Mais interrupções do que comutadores de contexto da cpu

1

Eu tenho uma máquina rodando Debian GNU / Linux 5.0.8 (lenny) 8 núcleos e 12Gb de RAM. Temos um núcleo permanentemente em torno de 40% ~ 60% de tempo de espera e tentando identificar o que está acontecendo, percebi que temos mais interrupções do que switches de contexto da CPU. Descobri que a proporção normal entre troca de contexto e interrupções é cerca de 10x mais troca de contexto do que interrupções, mas no meu servidor os valores são completamente diferentes.

backend1:~# vmstat -s
  12330788 K total memory
  12221676 K used memory
   3668624 K active memory
   6121724 K inactive memory
    109112 K free memory
   3929400 K buffer memory
   4095536 K swap cache
   4194296 K total swap
      7988 K used swap
   4186308 K free swap
  44547459 non-nice user cpu ticks
    702408 nice user cpu ticks
  13346333 system cpu ticks
1607583668 idle cpu ticks
 374043393 IO-wait cpu ticks
   4144149 IRQ cpu ticks
   3994255 softirq cpu ticks
         0 stolen cpu ticks
4445557114 pages paged in
2910596714 pages paged out
    128642 pages swapped in
    267400 pages swapped out
3519307319 interrupts
2464686911 CPU context switches
1306744317 boot time
  11555115 forks

Alguma ideia se isso é um problema? E nesse caso, como posso identificar a causa e corrigi-lo?

Atualizar

Seguindo as instruções dos comentários e concentrando-se no núcleo da espera, verifiquei os processos anexados a esse núcleo e, abaixo, você pode encontrar a lista:

   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  P COMMAND
    24 root      RT  -5     0    0    0 S    0  0.0   0:03.42 7 migration/7                                                                                                                              
    25 root      15  -5     0    0    0 S    0  0.0   0:04.78 7 ksoftirqd/7                                                                                                                              
    26 root      RT  -5     0    0    0 S    0  0.0   0:00.00 7 watchdog/7                                                                                                                               
    34 root      15  -5     0    0    0 S    0  0.0   1:18.90 7 events/7                                                                                                                                 
    83 root      15  -5     0    0    0 S    0  0.0   1:10.68 7 kblockd/7                                                                                                                                
   291 root      15  -5     0    0    0 S    0  0.0   0:00.00 7 aio/7                                                                                                                                    
   569 root      15  -5     0    0    0 S    0  0.0   0:00.00 7 ata/7                                                                                                                                    
  1545 root      15  -5     0    0    0 S    0  0.0   0:00.00 7 ksnapd                                                                                                                                   
  1644 root      15  -5     0    0    0 S    0  0.0   0:36.73 7 kjournald                                                                                                                                
  1725 root      16  -4 16940 1152  488 S    0  0.0   0:00.00 7 udevd                                                                                                                                    
  2342 root      20   0  8828 1140  956 S    0  0.0   0:00.00 7 sh                                                                                                                                       
  2375 root      20   0  8848 1220 1016 S    0  0.0   0:00.00 7 locate                                                                                                                                   
  2421 root      30  10  8896 1268 1016 S    0  0.0   0:00.00 7 updatedb.findut                                                                                                                          
  2430 root      30  10 58272  49m  616 S    0  0.4   0:17.44 7 sort                                                                                                                                     
  2431 root      30  10  3792  448  360 S    0  0.0   0:00.00 7 frcode                                                                                                                                   
  2682 root      15  -5     0    0    0 S    0  0.0   3:25.98 7 kjournald                                                                                                                                
  2683 root      15  -5     0    0    0 S    0  0.0   0:00.64 7 kjournald                                                                                                                                
  2687 root      15  -5     0    0    0 S    0  0.0   1:31.30 7 kjournald                                                                                                                                
  3261 root      15  -5     0    0    0 S    0  0.0   2:30.56 7 kondemand/7                                                                                                                              
  3364 root      20   0  3796  596  476 S    0  0.0   0:00.00 7 acpid                                                                                                                                    
  3575 root      20   0  8828 1140  956 S    0  0.0   0:00.00 7 sh                                                                                                                                       
  3597 root      20   0  8848 1216 1016 S    0  0.0   0:00.00 7 locate                                                                                                                                   
  3603 root      30  10  8896 1268 1016 S    0  0.0   0:00.00 7 updatedb.findut                                                                                                                          
  3612 root      30  10 58272  49m  616 S    0  0.4   0:27.04 7 sort                                                                                                                                     
  3655 root      20   0 11056 2852  516 S    0  0.0   5:36.46 7 redis-server                                                                                                                             
  3706 root      20   0 19832 1056  816 S    0  0.0   0:01.64 7 cron                                                                                                                                     
  3746 root      20   0  3796  580  484 S    0  0.0   0:00.00 7 getty                                                                                                                                    
  3748 root      20   0  3796  580  484 S    0  0.0   0:00.00 7 getty                                                                                                                                    
  7674 root      20   0 28376 1000  736 S    0  0.0   0:00.00 7 cron                                                                                                                                     
  7675 root      20   0  8828 1140  956 S    0  0.0   0:00.00 7 sh                                                                                                                                       
  7708 root      30  10 58272  49m  616 S    0  0.4   0:03.36 7 sort                                                                                                                                     
 22049 root      20   0  8828 1136  956 S    0  0.0   0:00.00 7 sh                                                                                                                                       
 22095 root      20   0  8848 1220 1016 S    0  0.0   0:00.00 7 locate                                                                                                                                   
 22099 root      30  10  8896 1264 1016 S    0  0.0   0:00.00 7 updatedb.findut                                                                                                                          
 22108 root      30  10 58272  49m  616 S    0  0.4   0:44.55 7 sort                                                                                                                                     
 22109 root      30  10  3792  452  360 S    0  0.0   0:00.00 7 frcode                                                                                                                                   
 26927 root      20   0  8828 1140  956 S    0  0.0   0:00.00 7 sh                                                                                                                                       
 26947 root      20   0  8848 1216 1016 S    0  0.0   0:00.00 7 locate                                                                                                                                   
 26951 root      30  10  8896 1268 1016 S    0  0.0   0:00.00 7 updatedb.findut                                                                                                                          
 26960 root      30  10 58272  49m  616 S    0  0.4   0:10.24 7 sort                                                                                                                                     
 26961 root      30  10  3792  452  360 S    0  0.0   0:00.00 7 frcode                                                                                                                                   
 27952 root      20   0 65948 3028 2400 S    0  0.0   0:00.00 7 sshd                                                                                                                                     
 30731 root      20   0     0    0    0 S    0  0.0   0:01.34 7 pdflush                                                                                                                                  
 31204 root      20   0     0    0    0 S    0  0.0   0:00.24 7 pdflush
 21857 deploy    20   0 1227m 2240  868 S    0  0.0   2:44.22 7 nginx                                                                                                                                    
 21858 deploy    20   0 1228m 2784  868 S    0  0.0   2:42.45 7 nginx                                                                                                                                    
 21862 deploy    20   0 1228m 2732  868 S    0  0.0   2:43.90 7 nginx                                                                                                                                    
 21869 deploy    20   0 1228m 2840  868 S    0  0.0   2:44.14 7 nginx                                                                                                                                    
 27994 deploy    20   0 19372 2216 1380 S    0  0.0   0:00.00 7 bash                                                                                                                                     
 28493 deploy    20   0  331m  32m  16m S    4  0.3   0:00.40 7 apache2                                                                                                                                  
 21856 deploy    20   0 1228m 2844  868 S    0  0.0   2:43.64 7 nginx
  3622 nobody    30  10 21156  10m  916 D    0  0.1   4:42.31 7 find                                                                                                                                     
  7716 nobody    30  10 12268 1280  888 D    0  0.0   0:43.50 7 find                                                                                                                                     
 22116 nobody    30  10 12612 1696  916 D    0  0.0   6:32.26 7 find                                                                                                                                     
 26968 nobody    30  10 12268 1284  888 D    0  0.0   1:56.92 7 find

Atualizar

Como sugerido, dou uma olhada em / proc / interrupts e abaixo das informações:

           CPU0       CPU1       CPU2       CPU3       CPU4       CPU5       CPU6       CPU7
  0:         35          0          0 1469085485          0          0          0          0   IO-APIC-edge      timer
  1:          0          0          0          8          0          0          0          0   IO-APIC-edge      i8042
  8:          0          0          0          1          0          0          0          0   IO-APIC-edge      rtc0
  9:          0          0          0          0          0          0          0          0   IO-APIC-fasteoi   acpi
 12:          0          0          0        105          0          0          0          0   IO-APIC-edge      i8042
 16:          0          0          0          0          0          0          0  580212114   IO-APIC-fasteoi   3w-9xxx, uhci_hcd:usb1
 18:          0          0        142          0          0          0          0          0   IO-APIC-fasteoi   uhci_hcd:usb6, ehci_hcd:usb7
 19:          9          0          0          0          0          0          0          0   IO-APIC-fasteoi   uhci_hcd:usb3, uhci_hcd:usb5
 21:          0          0          0          0          0          0          0          0   IO-APIC-fasteoi   uhci_hcd:usb2
 23:          0          0          0          0          0          0          0          0   IO-APIC-fasteoi   uhci_hcd:usb4, ehci_hcd:usb8
1273:         0          0 1600400502          0          0          0          0          0   PCI-MSI-edge      eth0
1274:         0          0          0          0          0          0          0          0   PCI-MSI-edge      ahci
NMI:          0          0          0          0          0          0          0          0   Non-maskable interrupts
LOC:  214252181   69439018  317298553   21943690   72562482   56448835  137923978  407514738   Local timer interrupts
RES:   27516446   16935944   26430972   44957009   24935543   19881887   57746906   24298747   Rescheduling interrupts
CAL:      10655      10705      10685      10567      10689      10669      10667        396   function call interrupts
TLB:     529548     462587     801138     596193     922202     747313    2027966     946594   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
SPU:          0          0          0          0          0          0          0          0   Spurious interrupts
ERR:          0

Todos os valores parecem mais ou menos os mesmos para todos os núcleos, mas este IO-APIC-fasteoi 3w-9xxx, uhci_hcd:usb1 afeta apenas o núcleo 7 (o mesmo com o tempo de espera de 40% ~ 60%) pode ser algo anexado à porta usb causando o problema?

Obrigado em avançado

    
por Christopher Valles 28.06.2011 / 12:38

3 respostas

1

Eu diria que este é um comportamento normal, você está percebendo algum problema específico de desempenho?

Acabei de verificar uma caixa do Ubuntu aqui e recebi o seguinte,

1406721073 interrupts

942882359 CPU context switches

Felicidades, Bob

    
por 28.06.2011 / 12:44
1

Eu nunca ouvi falar de uma 'proporção normal de interruptores de contexto para interrupções'. Como outras pessoas disseram, isso não é necessariamente um problema. No entanto, se você tiver uma interrupção que está ocorrendo com muita freqüência, isso pode causar problemas de desempenho. Depende do que interrompe, como alguns devem ocorrer com muita frequência, mas para coisas como controladores de disco ou adaptadores de rede, onde os manipuladores de interrupção são mais lentos, uma alta taxa de interrupção pode causar sérios problemas de desempenho.

É importante descobrir quais interrupções estão ocorrendo e se elas podem ser tratadas de alguma outra forma, por exemplo, usando a pesquisa do dispositivo que causa o problema, usando um driver melhor ou substituindo o dispositivo por um melhor. Eu acredito em linux, / proc / interrupts irá levá-lo para o caminho para resolver o seu problema.

    
por 28.06.2011 / 18:29
1

O que a parte superior de top diz? São interrupções de software ou hardware?

Para obter mais informações sobre interrupções, confira /proc/interrupts - isso pode dar uma ideia do seu consumo principal e interrupções.

Você pode ver quais interrupções estão sendo mais agressivas executando watch -d -n 1 cat /proc/interrupts .

Você pode querer verificar sua afinidade de processo ou instalar algo como irqbalance.

    
por 28.06.2011 / 18:51