Como proibir interrupções de hardware com IRQBALANCE_BANNED_CPUS no Ubuntu?

9

Eu gostaria de banir as interrupções de certas CPUs. Eu ouvi sobre a opção IRQBALANCE_BANNED_CPUS. Eu vejo irqbalance está sendo executado no fundo da minha máquina. Onde eu vou editar e como configuro essa opção? Por exemplo, eu quero excluir o cpus 2,3,4,5 das interrupções. O argumento descritor é:

Provides a mask of cpus which irqbalance should ignore and never assign interrupts to

O que significa por uma máscara? E onde eu configuro o irqbalance com essa opção?

EDIT1: Como saber se minha configuração está em vigor, em outras palavras, se meu cpu está recebendo NO interrupts? Estou verificando / proc / interrupts mas alguns números estão aumentando lá.

EDIT2: Agora inicializei minha máquina com IRQBALANCE_BANNED_CPUS = 3e, portanto, somente a CPU 0 NÃO é banida das interrupções. Então eu deveria esperar ver o cpo0 recebendo muitas interrupções e os outros processadores não recebendo interrupções, certo? Aqui está o meu / proc / interrupções. As linhas em negrito estão mudando para todos os cpus. As linhas 22, 24, 35 e LOC estão mudando.

            CPU0       CPU1       CPU2       CPU3       CPU4       CPU5       
   0:         26          0          0          0          0          0   IO-APIC-edge      timer
   1:          2          0          0          0          0          0   IO-APIC-edge      i8042
   6:          3          0          0          0          0          0   IO-APIC-edge      floppy
   8:          1          0          0          0          0          0   IO-APIC-edge      rtc0
   9:          0          0          0          0          0          0   IO-APIC-fasteoi   acpi
  12:          4          0          0          0          0          0   IO-APIC-edge      i8042
  14:      13556          0          0          0          0          0   IO-APIC-edge      ata_piix
  15:          0          0          0          0          0          0   IO-APIC-edge      ata_piix
  18:          0          0          0          0          0          0   IO-APIC-fasteoi   ata_piix
  19:          2          0          0          0          0          0   IO-APIC-fasteoi   ohci1394
  20:          3          0          0          0          0          0   IO-APIC-fasteoi   ehci_hcd:usb2, uhci_hcd:usb3, uhci_hcd:usb6
  21:        197        635         39          0          0          0   IO-APIC-fasteoi   uhci_hcd:usb4, uhci_hcd:usb7, HDA Intel
  22:        344       3506          0        702          0          0   IO-APIC-fasteoi   ehci_hcd:usb1, uhci_hcd:usb5, uhci_hcd:usb8
  24:        162         48          0          0          0          0   IO-APIC-fasteoi   nvidia
  35:        174          0         47          0          0          0   IO-APIC-fasteoi   nvidia
  53:       3517          0          0          0          0          0   PCI-MSI-edge      eth0
 NMI:          0          0          0          0          0          0   Non-maskable interrupts
 LOC:      11007       8840       6480       5652       4272       3046   Local timer interrupts
 SPU:          0          0          0          0          0          0   Spurious interrupts
 PMI:          0          0          0          0          0          0   Performance monitoring interrupts
 PND:          0          0          0          0          0          0   Performance pending work
 RES:        292        169        217        125        122        126   Rescheduling interrupts
 CAL:         86        280        254        292        293        291   Function call interrupts
 TLB:       1147       1031       1348        616        177        322   TLB shootdowns
 TRM:          0          0          0          0          0          0   Thermal event interrupts
 THR:          0          0          0          0          0          0   Threshold APIC interrupts
 MCE:          0          0          0          0          0          0   Machine check exceptions
 MCP:          2          2          2          2          2          2   Machine check polls
 ERR:          5
 MIS:          0

EDIT3: Parece que a opção IRQBALANCE_BANNED_CPUS está completamente IGNORADA no Ubuntu . Eu tentei reiniciar minha máquina com 1, 3e e tenho interrupções por toda parte. Apenas quando eu desabilito o irqbalance configurando ENABLED = 0 que eu recebo uma limpa / proc / interrompe apenas na cpu0 e em nenhuma outra cpu.

    
por TraderJoeChicago 19.04.2012 / 02:37

4 respostas

7

Você define IRQBALANCE_BANNED_CPUS em / etc / default / irqbalance . Eu encontrei isso procurando em /etc/init.d/irqbalance . Mas quais são os valores válidos para essa configuração? Da página de manual da Red Hat:

This is a hex mask without the leading '0x', on systems with large numbers of processors each group of eight hex digits is sepearated ba a comma ','. i.e. export IRQBALANCE_BANNED_CPUS=fc0 would prevent irqbalance from assigning irqs to the 7th-12th cpus (cpu6-cpu11) or export IRQBALANCE_BANNED_CPUS=ff000000,00000001 would prevent irqbalance from assigning irqs to the 1st (cpu0) and 57th-64th cpus (cpu56-cpu63).

O conceito de uma máscara é explicado na wikipedia. Leia isso e depois volte. Vamos quebrar o primeiro exemplo da Red Hat. O número que é gravado como fc0 em hexadecimal é gravado como 111111000000 em binário. Digitalização da direita para a esquerda (ou seja, do bit menos significativo para o bit mais significativo ), existem seis zeros. Isso significa que a 1ª a 5ª CPUs (cpu0-cpu5) podem receber interrupções. Então, existem seis. Isso significa que as 7ª a 12ª CPUs (cpu6-cpu11) não receberão interrupções.

Parece que você deseja permitir que a cpu0 e a cpu1 recebam interrupções, mas evitam que interrupções sejam atribuídas à cpu2, cpu3, cpu4 e cpu5. Isso significa que você precisa de dois zeros e quatro ou 111100. Isso é 3C em hexadecimal. Então, você criaria / etc / default / irqbalance com o conteúdo

ENABLED="1"
ONESHOT="0"
IRQBALANCE_BANNED_CPUS="3f"

Para ver o que está acontecendo, tente

$ sudo service irqbalance stop
Stopping SMP IRQ Balancer: irqbalance.
$ source /etc/default/irqbalance 
$ sudo irqbalance --debug
    
por 19.04.2012 / 03:09
2

um bug de equilíbrio impede que o IRQBALANCE_BANNED_CPUS trabalhe nas máquinas da NUMA: link

A partir de agora, 1.0.5 é a versão mais recente do irqbalance e não tem a correção.

    
por 13.05.2013 / 18:46
0

Você tem que usar o 3c como acima para fazê-lo funcionar. Versões posteriores fazem isso automaticamente (pelo menos por v 1.9 no debian / sid)

    
por 18.12.2015 / 10:49
0

Adicionando as sugestões acima sobre solução de problemas de irqbalance - Um comando útil para visualizar as afinidades de interrupção resultantes da execução do irqbalance:

find /proc/irq/ -name smp_affinity | xargs cat | less
    
por 04.01.2017 / 10:14