4 votes

Comment changer l'affinité SMP d'une IRQ sur Ubuntu PV domU dans Xen XCP ?

J'aimerais changer l'affinité IRQ SMP pour des raisons, décrites dans cette question : Le CPU0 est submergé par les interruptions de eth1.

Mais je ne peux pas - je vois Input/output error lorsque j'essaie d'écrire à /proc/irq/*/smp_affinity .

Veuillez m'indiquer le HOWTO à ce sujet. (Une référence formelle sur /proc/irq/*/ serait aussi cool).

Des détails sanglants :

Notez qu'il s'agit d'une VM (PV domU) à l'intérieur d'un hôte Xen XCP basé sur Ubuntu.

$ uname -a
Linux MYHOST 2.6.38-15-virtual #59-Ubuntu SMP Fri Apr 27 16:40:18 UTC 2012 i686 i686 i386 GNU/Linux

$ lsb\_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 11.04
Release:    11.04
Codename:   natty

$ sudo cat /proc/irq/\*/smp\_affinity
01
01
01
01
01
80
80
80
80
80
80
40
40
40
40
40
40
20
20
20
20
20
20
10
10
10
10
10
10
08
08
08
08
08
08
04
04
04
04
04
04
02
02
02
02
02
02
01
01
01
01
01
01

Mise à jour. Les détails de l'erreur :

$ N=$(grep -c processor /proc/cpuinfo)
$ echo $N
8

$ printf %x $((2\*\*N-1))
ff

$ printf %x $((2\*\*N-1)) | sudo tee /proc/irq/\*/smp\_affinity
fftee: /proc/irq/288/smp\_affinity: Input/output error
tee: /proc/irq/289/smp\_affinity: Input/output error
tee: /proc/irq/290/smp\_affinity: Input/output error
tee: /proc/irq/291/smp\_affinity: Input/output error
tee: /proc/irq/292/smp\_affinity: Input/output error
tee: /proc/irq/293/smp\_affinity: Input/output error
tee: /proc/irq/294/smp\_affinity: Input/output error
tee: /proc/irq/295/smp\_affinity: Input/output error
tee: /proc/irq/296/smp\_affinity: Input/output error
tee: /proc/irq/297/smp\_affinity: Input/output error
tee: /proc/irq/298/smp\_affinity: Input/output error
tee: /proc/irq/299/smp\_affinity: Input/output error
tee: /proc/irq/300/smp\_affinity: Input/output error
tee: /proc/irq/301/smp\_affinity: Input/output error
tee: /proc/irq/302/smp\_affinity: Input/output error
tee: /proc/irq/303/smp\_affinity: Input/output error
tee: /proc/irq/304/smp\_affinity: Input/output error
tee: /proc/irq/305/smp\_affinity: Input/output error
tee: /proc/irq/306/smp\_affinity: Input/output error
tee: /proc/irq/307/smp\_affinity: Input/output error
tee: /proc/irq/308/smp\_affinity: Input/output error
tee: /proc/irq/309/smp\_affinity: Input/output error
tee: /proc/irq/310/smp\_affinity: Input/output error
tee: /proc/irq/311/smp\_affinity: Input/output error
tee: /proc/irq/312/smp\_affinity: Input/output error
tee: /proc/irq/313/smp\_affinity: Input/output error
tee: /proc/irq/314/smp\_affinity: Input/output error
tee: /proc/irq/315/smp\_affinity: Input/output error
tee: /proc/irq/316/smp\_affinity: Input/output error
tee: /proc/irq/317/smp\_affinity: Input/output error
tee: /proc/irq/318/smp\_affinity: Input/output error
tee: /proc/irq/319/smp\_affinity: Input/output error
tee: /proc/irq/320/smp\_affinity: Input/output error
tee: /proc/irq/321/smp\_affinity: Input/output error
tee: /proc/irq/322/smp\_affinity: Input/output error
tee: /proc/irq/323/smp\_affinity: Input/output error
tee: /proc/irq/324/smp\_affinity: Input/output error
tee: /proc/irq/325/smp\_affinity: Input/output error
tee: /proc/irq/326/smp\_affinity: Input/output error
tee: /proc/irq/327/smp\_affinity: Input/output error
tee: /proc/irq/328/smp\_affinity: Input/output error
tee: /proc/irq/329/smp\_affinity: Input/output error
tee: /proc/irq/330/smp\_affinity: Input/output error
tee: /proc/irq/331/smp\_affinity: Input/output error
tee: /proc/irq/332/smp\_affinity: Input/output error
tee: /proc/irq/333/smp\_affinity: Input/output error
tee: /proc/irq/334/smp\_affinity: Input/output error
tee: /proc/irq/335/smp\_affinity: Input/output error

Mise à jour. irqbalance est en cours :

$ sudo service irqbalance status
irqbalance start/running, process 560

8voto

chutz Points 7404

Il existe un fichier appelé Documentation/IRQ-affinity.txt dans le code source de Linux.

/proc/irq/IRQ#/smp_affinity specifies which target CPUs are permitted
for a given IRQ source. It's a bitmask of allowed CPUs. It's not allowed
to turn off all CPUs, and if an IRQ controller does not support IRQ
affinity then the value will not change from the default 0xffffffff.

Le problème ici est que le masque de bits est en hexadécimal. Donc, si vous avez N CPUs,

N=$(grep -c processor /proc/cpuinfo)

pour activer toutes les IRQ pour toutes les UC, si vous avez N UC, vous pouvez

printf %x $((2**N-1)) | sudo tee /proc/irq/*/smp_affinity

Noyau 3.0 et plus a un fichier appelé smp_affinity_list . Ce fichier prend une liste de CPUs ou de gammes de CPUs séparés par des virgules. Exemples valides : 0 , 2,3,5-7 , 0-7 . La commande précédente est équivalente à :

echo 0-$((N-1)) | sudo tee /proc/irq/*/smp_affinity_list

2voto

Nils Points 7622

Je ne pense pas que le déplacement des interruptions vers différentes unités centrales - en particulier pour le traitement des événements réseau - augmenterait les performances.

C'est le contraire qui se produira, puisque le code réseau ne peut plus être maintenu dans une unité centrale spécifique.

Donc, tant que vous n'avez pas de paquets abandonnés sur votre interface réseau, je dirais que c'est un comportement tout à fait normal pour un réseau qui sert de nombreux paquets.

Vous devez réduire le nombre d'interruptions - les déplacer ne vous aidera pas (au contraire, comme j'ai essayé de le souligner).

Je vois deux solutions possibles :

  • Augmentez la taille de votre MTU pour réduire le nombre d'interruptions.
  • PIN le vCPU 0 du DomU à un CPU dédié sur le Dom0 (qui n'est pas utilisé par une autre VM ou le Dom0).

Mise à jour 2012-12-17 : Puisque vous avez demandé des liens d'autorité, j'ai essayé de poser une question générale. Quand ne pas utiliser la virtualisation - Je pense que c'est l'un des cas où vous vous heurtez aux limites générales de VM. L'une des réponses à la question contient une approche différente : Utiliser des conteneurs, au lieu de la virtualisation.

J'espère que cela vous aidera...

0voto

EML Points 363

Mais j'aimerais avoir une réponse officielle sur la raison de l'affinité. ne fonctionne pas. Je m'inquiète du fait que tout le monde semble supposer que c'est possible, mais je ne peux pas le faire.

Pour cette question spécifique - et je n'ai aucune idée si Xen affecte cette réponse - vous obtenez l'adresse suivante Input/output error lorsqu'aucun pilote de périphérique n'a actuellement un gestionnaire installé pour cette interruption.

Si un conducteur installe un gestionnaire sur '105', par exemple, le répertoire /proc/irq/105 est créé, et contient un smp_affinity entre autres. Vous pouvez désormais écrire à smp_affinity . Si vous fermez l'appareil, le répertoire reste, avec l'option smp_affinity mais vous ne pouvez plus y écrire. Ouvrez le périphérique (via open ou ce que l'on appelle éventuellement request_irq dans le pilote) et vous pouvez maintenant écrire dans le fichier. Testé uniquement sur RHEL/SL 6.

Si vous ne savez pas si le dispositif est actuellement ouvert ou non, vérifiez le répertoire. Il contiendra le nom du périphérique s'il est ouvert.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X