Wie kann man Hardware-Interrupts mit IRQBALANCE_BANNED_CPUS unter Ubuntu verbieten?

9

Ich möchte Interrupts von bestimmten CPUs verbieten. Ich habe von der Option IRQBALANCE_BANNED_CPUS gehört. Ich sehe, dass das Ungleichgewicht im Hintergrund meiner Maschine läuft. Wo gehe ich zum Bearbeiten und wie konfiguriere ich diese Option? Zum Beispiel möchte ich cpus 2,3,4,5 von Interrupts ausschließen. Das Argument - Deskriptor ist:

Bietet eine CPU von cpus, die irqbalance ignorieren und niemals Interrupts zuweisen sollte

Was bedeutet es mit einer Maske? Und wo konfiguriere ich irqbalance mit dieser Option?

EDIT1: Woher wissen Sie, dass meine Konfiguration wirksam ist, mit anderen Worten, dass meine CPU KEINE Interrupts empfängt? Ich überprüfe / proc / interrupts, aber einige Zahlen nehmen dort zu.

EDIT2: Jetzt habe ich meinen Computer mit IRQBALANCE_BANNED_CPUS = 3e gebootet, sodass nur CPU 0 NICHT von Interrupts ausgeschlossen ist. Ich sollte also damit rechnen, dass cpo0 viele Interrupts empfängt und der andere cpus keine Interrupts empfängt, oder? Hier ist mein / proc / interrupts. Die fett gedruckten Zeilen ändern sich für ALLE CPUs. Die Zeilen 22, 24, 35 und LOC ändern sich.

            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: Es sieht so aus, als ob die Option IRQBALANCE_BANNED_CPUS unter Ubuntu vollständig ignoriert wird . Ich habe versucht, meinen Computer mit 1, 3e neu zu starten und habe überall Interrupts bekommen. Gerade wenn ich das Ungleichgewicht deaktiviere, indem ich ENABLED = 0 setze, erhalte ich ein sauberes / proc / Interrupts nur für CPU0 und keine andere CPU.

TraderJoeChicago
quelle

Antworten:

7

Sie legen IRQBALANCE_BANNED_CPUS in / etc / default / irqbalance fest . Ich habe dies in /etc/init.d/irqbalance gefunden . Aber was sind die gültigen Werte für diese Einstellung? Aus der Manpage von Red Hat:

Dies ist eine Hex-Maske ohne das führende '0x'. Auf Systemen mit einer großen Anzahl von Prozessoren wird jede Gruppe von acht Hex-Ziffern durch ein Komma ',' getrennt. dh export IRQBALANCE_BANNED_CPUS=fc0würde verhindern irqbalance von irqs dem 7. bis 12. Cpus (CPU6-CPU 11) zuweisen oder export IRQBALANCE_BANNED_CPUS=ff000000,00000001verhindern würde irqbalance von irqs zum ersten (cpu0) und 57. bis 64. Cpus (cpu56-cpu63) zuweisen.

Das Konzept einer Maske wird auf Wikipedia erklärt. Lies das und komm dann zurück. Lassen Sie uns das erste Beispiel von Red Hat aufschlüsseln. Die Zahl, die hexadezimal als fc0 geschrieben wird, wird binär als 111111000000 geschrieben. Beim Scannen von rechts nach links (dh vom niedrigstwertigen Bit zum höchstwertigen Bit ) gibt es sechs Nullen. Dies bedeutet, dass dem 1.-5. CPU (cpu0-cpu5) Interrupts zugewiesen werden können. Dann gibt es sechs. Dies bedeutet, dass dem 7.-12. CPU (cpu6-cpu11) keine Interrupts zugewiesen werden.

Es hört sich so an, als ob Sie zulassen möchten, dass cpu0 und cpu1 Interrupts empfangen, aber verhindern, dass cpu2, cpu3, ​​cpu4 und cpu5 Interrupts zugewiesen werden. Das heißt, Sie benötigen zwei Nullen und vier Einsen oder 111100. Dies ist 3C hexadezimal. Sie würden also / etc / default / irqbalance mit dem Inhalt erstellen

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

Versuchen Sie, um zu sehen, was los ist

$ sudo service irqbalance stop
Stopping SMP IRQ Balancer: irqbalance.
$ source /etc/default/irqbalance 
$ sudo irqbalance --debug
Sciurus
quelle
Danke für die Erklärung. Die Verwirrung hier ist: CPU 0 auf einem 6-CPU-Computer zu verbieten. Benutze ich: 000001 (1) oder 111110 (3e). Es ist das erste, richtig?
TraderJoeChicago
Bitte überprüfen Sie meine Bearbeitung in der ursprünglichen Frage. Ich muss wissen, wie man / proc / interrupts liest, um sicherzustellen, dass meine Konfiguration funktioniert und meine CPU von Interrupts ausgeschlossen ist. Vielen Dank!
TraderJoeChicago
Siehe meine Bearbeitungsnummer 3: IRQBALANCE_BANNED_CPUS wird unter Ubuntu eingearbeitet, es sei denn, wir bringen die Maske durcheinander. Aber ich habe 1 und 3e ohne Erfolg versucht. :(
TraderJoeChicago
Siehe meine Debugging-Änderungen.
Sciurus
2
NEE. Ich kann bestätigen, dass es unter Ubuntu 10.04.1 NICHT funktioniert. Diese Konfigurationsoption IRQBALANCE_BANNED_CPUS = "1" wird ignoriert.
TraderJoeChicago
2

Ein Irqbalance-Fehler verhindert, dass IRQBALANCE_BANNED_CPUS an NUMA-Bearbeitungen arbeitet: http://code.google.com/p/irqbalance/issues/detail?id=43

Ab sofort ist 1.0.5 die neueste Version von irqbalance und hat das Update nicht.

Glockenspiel
quelle
0

Sie müssen 3c wie oben beschrieben verwenden, damit es funktioniert. Spätere Versionen tun dies automatisch (zumindest ab Version 1.9 auf debian / sid)

anon
quelle
0

Hinzufügen zu den obigen Vorschlägen zur Fehlerbehebung bei Problemen mit dem Ungleichgewicht - Ein nützlicher Befehl zum Anzeigen der Interrupt-Affinitäten, die sich aus dem Lauf des Ungleichgewichts ergeben:

find /proc/irq/ -name smp_affinity | xargs cat | less
YitzikC
quelle