Comutador de contexto da CPU por segundo aumentando com o tráfego da rede aumentando

1

tenho servidor com sistema operacional do servidor Ubuntu, tenho alguns aplicativos nele que funciona com rede. Com um aumento no tráfego de rede, o contexto da CPU aumentando e as interrupções também aumentam 40 - 60 k por segundo. O que devo consertar a otimização do kernel, talvez a otimização da NIC ou o que?

UPDATE

Primeiramente, obrigado por suas respostas. Eu tenho 8 CPU. Meu gato / proc / interrompe

          CPU0       CPU1       CPU2       CPU3       CPU4       CPU5       CPU6       CPU7       
  0:    6938741    6966303    6934714    6881839    6895772    6883046    6952545    6909960   IO-APIC-edge      timer
  1:          0          0          1          0          0          1          1          1   IO-APIC-edge      i8042
  8:          0          1          0          0          0          0          0          0   IO-APIC-edge      rtc0
  9:          0          0          0          0          0          0          0          0   IO-APIC-fasteoi   acpi
 12:          0          1          0          0          1          1          2          1   IO-APIC-edge      i8042
 16:          0          0          0          0          0          0          0          0   IO-APIC-fasteoi   ehci_hcd:usb1, uhci_hcd:usb2
 17:          0          0          0          0          0          0          0          0   IO-APIC-fasteoi   uhci_hcd:usb3
 18:          0          0          0          0          0          0          0          0   IO-APIC-fasteoi   uhci_hcd:usb4
 19:          0          0          0          0          0          0          0          0   IO-APIC-fasteoi   uhci_hcd:usb5
 21:         21         23         22         21         23         21         23         21   IO-APIC-fasteoi   ipmi_si
 22:          3          5          6          6          2          5          3          6   IO-APIC-fasteoi   uhci_hcd:usb6, hpilo
 23:          0          0          0          0          0          0          0          0   IO-APIC-fasteoi   radeon
 41:     275729        555        587        549     275294        563        583        600   PCI-MSI-edge      cciss0
 42:          2          0          2          1          1          1          2          1   PCI-MSI-edge      cciss1
 46:   31600723   31636789   31668261   31721092   31643480   31719981   31650284   31692948   PCI-MSI-edge      eth0
NMI:          0          0          0          0          0          0          0          0   Non-maskable interrupts
LOC:   42250721   42318004   19164905   20751945   32012455   25335850   15889990   15935085   Local timer interrupts
SPU:          0          0          0          0          0          0          0          0   Spurious interrupts
PMI:          0          0          0          0          0          0          0          0   Performance monitoring interrupts
IWI:          0          0          0          0          0          0          0          0   IRQ work interrupts
RES:  104005816   96594384   40149041   34906154   77175689   55787936   28455228   25633969   Rescheduling interrupts
CAL:     204860     543304    1318717    1176681     431344     876239    1046465    1257472   Function call interrupts
TLB:     308034     229917     230598     299353     362103     478994     256456     212019   TLB shootdowns
TRM:          0          0          0          0          0          0          0          0   Thermal event interrupts
THR:          0          0          0          0          0          0          0          0   Threshold APIC interrupts
MCE:          0          0          0          0          0          0          0          0   Machine check exceptions
MCP:       1263       1263       1263       1263       1263       1263       1263       1263   Machine check polls
ERR:          0
MIS:          0

Eu tenho muito grande:

 RES:  104150407   96747853   40291367   35052019   77327041   55940217   28595113   25775538   Rescheduling

do qual depende?

Minhas placas de rede: bnx2: Driver Gigabit Ethernet Broadcom NetXtreme II bnx2 v2.1.6 (7 de março de 2011)

UPDATE 2

Eu fiz: ethtool -k eth0

E veja: large-receive-offload: off

Como posso fazer isso?

Obrigado.

    
por shk 17.01.2012 / 16:14

3 respostas

3

Eu suponho que estas são interrupções legítimas devido à carga da rede e não a um problema de hardware / driver. Então:

Você pode investir em cartão de rede TCP-offload (TOE), se você lidar com o tráfego TCP. Ele faz algum processamento de TCP / IP no chip da placa de rede e gera menos interrupções (e comutadores de contexto). Verifique se o seu kernel / sistema operacional / aplicativo / tráfego é compatível.

Alternativamente, dê uma olhada em Large receive offload (LRO), que é uma abordagem leve.

    
por 17.01.2012 / 16:42
1

As interrupções de hardware são uma parte normal da operação do computador. Seu NIC está indo "hey! Hey! Hey! Hey!" dizendo à sua CPU que precisa de atenção.

Excesso de hardware interrupções são normalmente causadas por drivers ruins. Então, a primeira coisa que eu gostaria de ver são os drivers da NIC.

    
por 17.01.2012 / 16:19
1

Isso, na verdade, é um grande número de interrupções. Isso geralmente é um problema de APIC, no entanto.

cat /proc/interrupts

deveria dizer. Se você vê apenas suas interrupções pressionando CPU0 tente

echo "2" > /proc/irq/"somenumber"/smp_affinity

Qual deve empurrar os irqs do processo "somenumber" na CPU2.

    
por 17.01.2012 / 16:40