[GTER] ksoftirqd 100%

Marcelo Gondim gondim at intnet.com.br
Fri Aug 2 19:10:48 -03 2013


Pessoal,

Faz muito tempo que não uso Linux em qualquer solução de roteamento com 
tráfego alto. Tenho usado FreeBSD mas hoje voltei à fazer testes com o 
Linux como concentrador PPPoE e quando o tráfego chega em 80Mbps lá vem 
a porcaria do ksoftirqd consumindo CPU. Sei que isso está relacionado 
com a alta requisição de interrupção no sistema mas pelo amor de Deus 
com 80Mbps? A máquina é um Dual Quad Xeon de 3.0 Ghz com 8Gb de ram e 
uma Intel Server Dual Port Gigabit.

Anulei os conntracks usando:

iptables -A OUTPUT -t raw -j NOTRACK
iptables -A PREROUTING -t raw -j NOTRACK

Com isso não gero nenhuma conntrack no sistema.
Fiz o cpu affinity distribuindo as irqs das interfaces de rede nas cpus.

Alguns sysctls que setei:

echo 65535 > /proc/sys/net/ipv4/neigh/default/gc_thresh1
echo 65535 > /proc/sys/net/ipv4/neigh/default/gc_thresh2
echo 65535 > /proc/sys/net/ipv4/neigh/default/gc_thresh3
echo 0 > /proc/sys/net/ipv4/route/gc_min_interval
echo 524288 > /proc/sys/net/ipv4/route/max_size
echo 3276822 > /proc/sys/net/nf_conntrack_max
echo 28800 > 
/proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
echo 60 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_syn_sent
echo 30 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_syn_recv
echo 60 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_fin_wait
echo 30 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_close_wait
echo 15 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_last_ack
echo 60 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_time_wait
echo 5 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_close
echo 15 > /proc/sys/net/ipv4/netfilter/ip_conntrack_udp_timeout
echo 90 > /proc/sys/net/ipv4/netfilter/ip_conntrack_udp_timeout_stream
echo 15 > /proc/sys/net/ipv4/netfilter/ip_conntrack_icmp_timeout
echo 300 > /proc/sys/net/ipv4/netfilter/ip_conntrack_generic_timeout

Mas mesmo com tudo isso ainda acontece o problema e o pior é que com 
exatamente esse mesmo hardware eu seguro um tráfego de 1.2Gbps no 
FreeBSD com lacp.

Vi em alguns lugares que uma solução seria setar esse cara no boot pra 1:
/sys/module/intel_idle/parameters/max_cstate

Mas vi que isso não seria a solução correta.

Alguém conseguiu descobrir como resolver esse problema definitivamente?

[]'s
Gondim




More information about the gter mailing list