我有一个有趣的问题。
我们有一个安装了 Debian Stretch 的 Linux 服务器。该服务器具有单 CPU E5-2680 v2 和 Intel 82599ES 10G 双端口 NIC。其上没有运行其他服务(如 HTTP 等)。
一切看起来都很好,直到我启用流量整形。整形规则由htb qdisc
和bond0
接口组成bond1
。
有一个三步哈希过滤器:
用于选择大子网的四个规则过滤器。规则如下:
protocol ip u32 ht 800:: match ip src 10.15.0.0/18 hashkey mask 0x0000ff00 at 12 link 1:
60 个左右的规则表用于从大型子网中选择 /24
protocol ip u32 ht 1:10 match ip src 10.15.16.0/24 hashkey mask 0x000000ff at 12 link 100:
256条规则表匹配IP
parent 1:0 prio 100 protocol ip u32 ht 100:20: match ip src 10.15.16.32 flowid 1:20 class add dev bond0 parent 1:0 classid 1:1 htb rate 24Gbit ceil 24Gbit burst 4096k cburst 256k class add dev bond0 parent 1:1 classid 1:20 htb rate 102400Kbit burst 4096k cburst 256k qdisc add dev bond0 parent 1:20 pfifo_fast
现在,当我启用这些规则时,我最多可以获得大约 10Gbps 的总流量,然后 ping 时间开始上升到 100 毫秒或更长。然而,在此期间,CPU 负载几乎为零 -uptime
显示负载为 0.07,每个 CPU 核心的利用率仅为 5% 左右。ping
一旦我清除了整形规则,就立即变得OK。
之前我用的是sfq
,pfifo_fast
这确实导致了很大的 CPU 负载。然后我切换到红色,它在没有 CPU 负载的情况下产生了更好的结果,然后我切换到pfifo_fast
它产生与红色几乎相同的结果。
- 还有什么其他瓶颈?
- 有人尝试过在超过 10Gbps 的网络中使用 Linux 流量整形器吗?