[MASOCH-L] Alto uso de software interrupts (%si + irqs/seq) ksoftirqd

"Tiago A. Peçanha" tiago at symetric.com.br
Thu Nov 22 10:20:04 -03 2012


Em 21/11/2012 17:31, Henrique de Moraes Holschuh escreveu:
> On 21-11-2012 17:21, Tiago A. Pecanha wrote:
>> Boa tarde a todos,
>> Estou com uma situação aqui bem estranha. De um tempo para cá um 
>> servidor DELL (16GB RAM) com quagga + iptables que está funcionando 
>> como borda começou a apresentar uma alta utilização de cpu pelo  
>> processo: ksoftirqd e isso gera aumento de latência e lentidão na rede.
>>
>> Investigando, percebi que quando desativo as regras de prerouting 
>> (mangle) o problema não ocorre, ou se ocorre, é raro.
>
> ksoftirqd alto implica que o kernel está tendo que bicar o 
> processamento de pacote por excessiva latência.
>
>> Segue detalhes do pert top:
>>    PerfTop:   53248 irqs/sec  kernel:99.1% [100000 cycles],  (all, 4 
>> CPUs)
>> ------------------------------------------------------------------------------ 
>>
>>
>>               samples    pcnt   kernel function
>>               _______   _____   _______________
>>
>>              69219.00 - 35.2% : __nf_conntrack_find    [nf_conntrack]
>>              35383.00 - 18.0% : nf_conntrack_tuple_taken    
>> [nf_conntrack]
>>              12884.00 -  6.6% : ipt_do_table    [ip_tables]
>>              11483.00 -  5.8% : __nf_conntrack_confirm    [nf_conntrack]
>
> Precisa mesmo de conntrack na borda?  Aqui marcamos tudo como 
> NO_TRACK, exceto o que for direcionado à caixa propriamente dita.  
> Melhor ainda é retirar do kernel o suporte (e tire o ebtables também).

Desculpe a ignorância, nossas regras de fw são basicamente:
1) Algumas regras INPUT para acesso a máquina remotamente.
2) Algumas regras FORWARD para permitir acesso a partes/serviços 
internos da rede (DNS, clientes de ip fixo, etc...)
3) E as regras de mangle para redirecionar o tráfego externo destinado a 
porta 80 para uma tabela de roteamento que redireciona para os caches 
squid.

Quando eu examino "cat /proc/net/ip_conntrack" vejo muitas conexões 
listando ali. Mas não saberia dizer se isso significa que é requisito o 
conntrack.
>
>> NMI:  107596285  107592380  107599814  107591919   Non-maskable 
>> interrupts
>
> Muita NMI. Descubra porquê, e resolva. Não é normal, nem é boa ideia. 
> Se for o NMI watchdog, você realmente precisa dele com uma frequência 
> tão alta assim?
>
Qual a melhor forma de fazer o troubleshooting? Ou qual a melhor 
abordagem para o watchdog? Temos o watchdog por default rodando sim. 
Entendo que poderia estar ocorrendo algum problema de hardware que 
esteja fazendo crescer este tipo de interrupção? Além é claro do próprio 
watchdog?

> Tente utilizar o irqbalance para ver se o comportamento geral das 
> interrupções melhora um pouco, você está com tudo em round-robin, o 
> que nem sempre é bom devido a efeitos de cache.
>
O irqbalance está executando.

>> PMI:  107596280  107592379  107599813  107591912   Performance 
>> monitoring interrupts
>> PND:  107569857  107566488  107574071  107566157   Performance 
>> pending work
> Pare de rodar perf se não estiver precisando dele. Isso não sai de 
> graça, perturba o cache e gasta tempo de CPU.
>
O perf só executo nos momentos de problema para ter noção dos irqs.

> De resto, faça o tunning da NAPI via ethtool e parâmetros dos drivers 
> da placa de rede, para ter certeza que não está entrando em modo de 
> polling por excesso de interrupções.
>

Seguem alguns dados das placas:

ethtool -c eth0/1/2/3
Coalesce parameters for eth0:
Adaptive RX: off  TX: off
stats-block-usecs: 999936
sample-interval: 0
pkt-rate-low: 0
pkt-rate-high: 0

rx-usecs: 18
rx-frames: 12
rx-usecs-irq: 18
rx-frames-irq: 2

tx-usecs: 80
tx-frames: 20
tx-usecs-irq: 18
tx-frames-irq: 2

rx-usecs-low: 0
rx-frame-low: 0
tx-usecs-low: 0
tx-frame-low: 0

rx-usecs-high: 0
rx-frame-high: 0
tx-usecs-high: 0
tx-frame-high: 0

Alguma referência de como fazer o tweak disso corretamente?



More information about the masoch-l mailing list