如何在Linux内核中获取网络QoS统计信息?

如何在Linux内核中获取网络QoS统计信息?

有没有办法通过本机的接口获取某条链路的带宽、时延、抖动碰撞、误码率、丢包率?

假设我的机器通过两个接口连接到网络,一个是无线接口,另一个是以太网接口。我想通过这些测量来比较这两个链接的质量。

有没有办法在 Linux 内核中获取这些测量值? (第 3.5.0 节)

答案1

很难提供完整的细节,尤其是不知道您正在使用什么发行版以及您希望结果有多详细 - 所以我只会列出一些非常基本例子。

如果您希望获得每个界面的单独统计信息,我们可以单独分解每个项目(以下假设在 CentOS 等发行版上具有 root 访问权限):

为了带宽用法 - 我真的很喜欢 iftop。安装完成后,iftop您可以运行以下命令:

iftop -i eth0 -B

-B 选项用于字节。进入后iftop我喜欢按“T”以获得累计总数。

为了错误率ifconfig您可以在控制台的输出中轻松看到这一点。要获得更简化的方法,您可以运行一个非常粗暴的命令像这样(假设像 Centos):

# ifconfig | grep -E "^\w|errors.* " | sed 's/pack.*errors:/Errors:/g' | sed 's/ drop.*//g' | sed 's/HW.*//g'
eth0      Link encap:Ethernet
          RX Errors:0
          TX Errors:0
eth1      Link encap:Ethernet
          RX Errors:3
          TX Errors:1
lo        Link encap:Local Loopback
          RX Errors:0
          TX Errors:0

这将为您提供每个接口的错误计数。

为了碰撞你仍然可以使用ifconfig。为了获得碰撞计数,另一个基本命令如下:

# ifconfig | grep -E "^\w|collisions.* " | sed 's/pack.*collisions:/Collisions:/g' | sed 's/ txq.*//g' | sed 's/HW.*//g'
eth0      Link encap:Ethernet
          collisions:0
eth1      Link encap:Ethernet
          collisions:0
lo        Link encap:Local Loopback
          collisions:0

为了掉落数据包,仍然使用ifconfig,您可以运行另一个简单的命令:

# ifconfig | grep -E "^\w|dropped.* " | sed 's/pack.*dropped:/Dropped:/g' | sed 's/ over.*//g' | sed 's/HW.*//g'
eth0      Link encap:Ethernet
          RX Dropped:0
          TX Dropped:0
eth1      Link encap:Ethernet
          RX Dropped:1
          TX Dropped:0
lo        Link encap:Local Loopback
          RX Dropped:0
          TX Dropped:0

如果您有很多坏数据包(错误、冲突或丢弃),您可以将前面的 3 个命令放入 bash 脚本中,并使用以下命令watch来监视它们:

文件/tmp/netErrors:

#!/bin/sh

ifconfig | grep -E "^\w|errors.* " | sed 's/pack.*errors:/Errors:/g' | sed 's/ drop.*//g' | sed 's/HW.*//g'
echo
ifconfig | grep -E "^\w|collisions.* " | sed 's/pack.*collisions:/Collisions:/g' | sed 's/ txq.*//g' | sed 's/HW.*//g'
echo
ifconfig | grep -E "^\w|dropped.* " | sed 's/pack.*dropped:/Dropped:/g' | sed 's/ over.*//g' | sed 's/HW.*//g'
echo

命令:

watch /tmp/netErrors

为了服务质量,这实际上取决于您如何设置它。对于 Linux,traffic control通常用于设置 QoS。要查看当前的 QoS,traffic control可以运行以下命令:

# tc qdisc ls
qdisc pfifo_fast 0: dev eth0 root refcnt 2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
qdisc pfifo_fast 0: dev eth1 root refcnt 2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
qdisc pfifo_fast 0: dev eth2 root refcnt 2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
qdisc pfifo_fast 0: dev tun0 root refcnt 2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1

tc - 流量控制命令 qdisc - 排队规则 ls - 列表

为了更好地了解traffic control您应该查看以下链接关于交通管制

答案2

这可能是我发现的熟悉 Linux 内核中 QoS 统计数据的最佳教程。它最初于 2010 年发表在 Linux 杂志上,但仍然完全相关。

这篇文章的标题是:Linux 内核核心之旅:流量控制、整形和 QoS

答案3

像这样的包ntop会显示此信息。您还可以安装nagioscacti,它们功能更强大,但需要一些时间来配置。

答案4

接口统计信息主要保存在其中/sys/class/net/<interface>,包括有关 tx/rx fifo 错误、冲突等的统计信息。您必须查看统计信息,因为有些统计信息是特定于驱动程序的。

抖动往往是一个流级别概念,因为测量将在该 5 元组上进行。您可能需要为此使用不同的工具。

相关内容