Eu tenho um problema interessante.
Nós temos um servidor Linux com o Debian Stretch instalado. O servidor tem uma única CPU E5-2680 v2 e Intel 82599ES 10G Dual Port NIC. Não há outros serviços (como HTTP e assim por diante) em execução.
Tudo parece bom, até eu ativar a modelagem de tráfego. As regras de formatação consistem em htb qdisc
na interface bond0
e bond1
.
Existe um filtro hash de três etapas:
Filtro de quatro regras para selecionar uma grande sub-rede. As regras são assim:
protocol ip u32 ht 800:: match ip src 10.15.0.0/18 hashkey mask 0x0000ff00 at 12 link 1:
60 ou mais tabelas de regras para selecionar / 24 fora dessa grande sub-rede
protocol ip u32 ht 1:10 match ip src 10.15.16.0/24 hashkey mask 0x000000ff at 12 link 100:
256 tabelas de regras para corresponder ao 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
Agora, quando habilito essas regras, recebo no máximo cerca de 10Gbps de tráfego total e, em seguida, o ping começa a ir até 100ms ou mais. No entanto, durante esse tempo, a carga da CPU é quase nenhuma - uptime
mostra uma carga de 0,07 e cada núcleo da CPU é apenas cerca de 5% utilizado. ping
instantaneamente fica OK quando eu limpo as regras de formatação.
Anteriormente, usei sfq
em vez de pfifo_fast
e isso resultou em uma grande carga de CPU. Em seguida, mudei para vermelho, o que produziu resultados um pouco melhores sem carga de CPU, depois mudei para pfifo_fast
, o que produz quase os mesmos resultados que o vermelho.
Tags performance networking linux tc