Come vietare gli interrupt di processo con IRQBALANCE_BANNED_CPUS su Ubuntu?


9

Vorrei vietare gli interrupt da alcune CPU. Ho sentito dell'opzione IRQBALANCE_BANNED_CPUS. Vedo che irqbalance è in esecuzione sullo sfondo della mia macchina. Dove posso andare per modificare e come configuro quell'opzione? Ad esempio, voglio escludere cpus 2,3,4,5 dagli interrupt. Il descrittore dell'argomento è:

Fornisce una maschera di cpus che irqbalance dovrebbe ignorare e non assegnare mai interrupt

Cosa significa una maschera? E dove configuro irqbalance con quell'opzione?

EDIT1: Come sapere che la mia configurazione è attiva, in altre parole che la mia cpu non riceve interruzioni? Sto controllando / proc / interrupt ma alcuni numeri stanno aumentando lì.

EDIT2: Ora ho avviato la mia macchina con IRQBALANCE_BANNED_CPUS = 3e, quindi solo la CPU 0 NON è vietata dagli interrupt. Quindi dovrei aspettarmi di vedere cpo0 che riceve molti interrupt e l'altro cpus che non riceve interruzioni, giusto? Ecco il mio / proc / interrupt. Le linee in grassetto stanno cambiando per TUTTO cpus. Le linee 22, 24, 35 e LOC stanno cambiando.

            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: Sembra che l'opzione IRQBALANCE_BANNED_CPUS sia completamente IGNORATA su Ubuntu . Ho provato a riavviare la mia macchina con 1, 3e e ho avuto interruzioni dappertutto. Proprio quando disabilito irqbalance impostando ENABLED = 0, ottengo un clean / proc / interrupt solo su cpu0 e nessun altro cpu.

Risposte:


7

Hai impostato IRQBALANCE_BANNED_CPUS in / etc / default / irqbalance . Ho trovato questo guardando in /etc/init.d/irqbalance . Ma quali sono i valori validi per quell'impostazione? Dalla pagina man di Red Hat:

Questa è una maschera esadecimale senza il '0x' iniziale, su sistemi con un numero elevato di processori ogni gruppo di otto cifre esadecimali è sepolto con una virgola ','. cioè export IRQBALANCE_BANNED_CPUS=fc0impedirebbe a irqbalance di assegnare irqs al settimo-dodicesimo cpus (cpu6-cpu11) o export IRQBALANCE_BANNED_CPUS=ff000000,00000001impedirebbe a irqbalance di assegnare irqs al primo (cpu0) e 57th-64th cpus (cpu56-cpu63).

Il concetto di maschera è spiegato su Wikipedia. Leggi quello, poi torna indietro. Analizziamo il primo esempio di Red Hat. Il numero scritto come fc0 in esadecimale è scritto come 111111000000 in binario. Scansione da destra a sinistra (ovvero dal bit meno significativo al bit più significativo ), ci sono sei zero. Ciò significa che al 1 ° -5 ° cpus (cpu0-cpu5) possono essere assegnati degli interrupt. Quindi ce ne sono sei. Ciò significa che al 7 ° -12 ° cpus (cpu6-cpu11) non verranno assegnati gli interrupt.

Sembra che tu voglia consentire a cpu0 e cpu1 di ricevere gli interrupt ma impedire a cpu2, cpu3, ​​cpu4 e cpu5 di essere assegnati agli interrupt. Ciò significa che hai bisogno di due zero e quattro, o 111100. Questo è 3C in esadecimale. Quindi, dovresti creare / etc / default / irqbalance con i contenuti

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

Per vedere cosa sta succedendo, prova

$ sudo service irqbalance stop
Stopping SMP IRQ Balancer: irqbalance.
$ source /etc/default/irqbalance 
$ sudo irqbalance --debug

Grazie per la spiegazione. La confusione qui è: BAN CPU 0 su una macchina da 6 cpu. Uso: 000001 (1) o 111110 (3e). È il primo, giusto?
TraderJoeChicago,

Controlla la mia modifica nella domanda originale. Devo sapere come leggere / proc / interrupt per assicurarmi che la mia configurazione funzioni e che la mia CPU sia bandita dagli interrupt. Grazie!
TraderJoeChicago,

Vedi il mio numero di modifica 3: IRQBALANCE_BANNED_CPUS viene importato su Ubuntu, a meno che non stiamo incasinando la maschera. Ma ho provato 1 e 3e senza successo. :(
TraderJoeChicago,

Vedi le mie modifiche di debug.
sciurus,

2
NO. Posso confermare che NON funziona su Ubuntu 10.04.1. Questa opzione di configurazione IRQBALANCE_BANNED_CPUS = "1" viene ignorata.
TraderJoeChicago,


0

Devi usare 3c come sopra per farlo funzionare. Le versioni successive lo fanno automaticamente (almeno dalla v 1.9 su debian / sid)


0

Aggiunta ai suggerimenti sopra riportati sulla risoluzione dei problemi di irqbalance - Un comando utile per visualizzare le affinità di interrupt risultanti dalla corsa di irqbalance:

find /proc/irq/ -name smp_affinity | xargs cat | less
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.