Comment interdire les interruptions matérielles avec IRQBALANCE_BANNED_CPUS sur Ubuntu?

9

Je voudrais interdire les interruptions de certains processeurs. J'ai entendu parler de l'option IRQBALANCE_BANNED_CPUS. Je vois que l'irqbalance fonctionne en arrière-plan de ma machine. Où dois-je aller pour modifier et comment configurer cette option? Par exemple, je veux exclure les processeurs 2,3,4,5 des interruptions. Le descripteur d' argument est:

Fournit un masque de cpus que l'irqbalance doit ignorer et ne jamais affecter d'interruptions à

Qu'est-ce que cela signifie par un masque? Et où dois-je configurer irqbalance avec cette option?

EDIT1: Comment savoir que ma configuration est effective, en d'autres termes que mon processeur ne reçoit AUCUNE interruption? Je vérifie / proc / interrupts mais certains nombres y augmentent.

EDIT2: Maintenant, j'ai démarré ma machine avec IRQBALANCE_BANNED_CPUS = 3e, donc seul le CPU 0 n'est PAS banni des interruptions. Je devrais donc m'attendre à voir cpo0 recevoir beaucoup d'interruptions et les autres cpus ne recevant pas d'interruptions, non? Voici mes / proc / interruptions. Les lignes en gras changent pour TOUS les processeurs. Les lignes 22, 24, 35 et LOC changent.

            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: Il semble que l' option IRQBALANCE_BANNED_CPUS soit complètement IGNORÉE sur Ubuntu . J'ai essayé de redémarrer ma machine avec 1, 3e et j'ai eu des interruptions partout. Juste au moment où je désactive l'irqbalance en définissant ENABLED = 0, j'obtiens un clean / proc / interrupts juste sur cpu0 et aucun autre cpu.

TraderJoeChicago
la source

Réponses:

7

Vous définissez IRQBALANCE_BANNED_CPUS dans / etc / default / irqbalance . J'ai trouvé cela en regardant dans /etc/init.d/irqbalance . Mais quelles sont les valeurs valides pour ce paramètre? Depuis la page de manuel de Red Hat:

Il s'agit d'un masque hexadécimal sans le «0x» en tête, sur les systèmes avec un grand nombre de processeurs, chaque groupe de huit chiffres hexadécimaux est séparé par une virgule »,«. c.-à export IRQBALANCE_BANNED_CPUS=fc0-d. empêcherait l'irqbalance d'assigner des irq aux 7e-12e cpus (cpu6-cpu11) ou export IRQBALANCE_BANNED_CPUS=ff000000,00000001empêcherait l'irqbalance d'assigner des irqs aux 1er (cpu0) et 57e-64e cpus (cpu56-cpu63).

Le concept de masque est expliqué sur wikipedia. Lisez cela, puis revenez. Décomposons le premier exemple de Red Hat. Le nombre écrit comme fc0 en hexadécimal est écrit comme 111111000000 en binaire. En balayant de droite à gauche (c'est-à-dire du bit le moins significatif au bit le plus significatif ), il y a six zéros. Cela signifie que les 1er-5ème cpus (cpu0-cpu5) peuvent être affectés d'interruptions. Ensuite, il y en a six. Cela signifie que les 7e et 12e cpus (cpu6-cpu11) ne seront pas affectés d'interruptions.

Il semble que vous souhaitiez autoriser cpu0 et cpu1 à recevoir des interruptions mais empêcher que cpu2, cpu3, ​​cpu4 et cpu5 se voient attribuer des interruptions. Cela signifie que vous avez besoin de deux zéros et de quatre, soit 111100. Il s'agit de 3C en hexadécimal. Donc, vous créez / etc / default / irqbalance avec le contenu

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

Pour voir ce qui se passe, essayez

$ sudo service irqbalance stop
Stopping SMP IRQ Balancer: irqbalance.
$ source /etc/default/irqbalance 
$ sudo irqbalance --debug
sciurus
la source
Merci pour l'explication. La confusion est la suivante: interdire le CPU 0 sur une machine à 6 processeurs. Dois-je utiliser: 000001 (1) ou 111110 (3e). C'est le premier, non?
TraderJoeChicago
Veuillez vérifier ma modification dans la question d'origine. J'ai besoin de savoir comment lire / proc / interruptions pour m'assurer que ma configuration fonctionne et que mon processeur est banni des interruptions. Merci!
TraderJoeChicago
Voir mon numéro d'édition 3: IRQBALANCE_BANNED_CPUS est en train d'être intégré sur Ubuntu, à moins que nous n'endommagions le masque. Mais j'ai essayé 1 et 3e sans succès. :(
TraderJoeChicago
Voir mes modifications de débogage.
sciurus
2
NAN. Je peux confirmer que cela ne fonctionne PAS sur Ubuntu 10.04.1. Cette option de configuration IRQBALANCE_BANNED_CPUS = "1" est ignorée.
TraderJoeChicago
0

Vous devez utiliser 3c comme indiqué ci-dessus pour le faire fonctionner. Les versions ultérieures le font automatiquement (au moins par v 1.9 sur debian / sid)

anon
la source
0

Ajout aux suggestions ci-dessus sur le dépannage des problèmes d'irqbalance - Une commande utile pour afficher les affinités d'interruption résultant de l'exécution d'irqbalance:

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