Le 28/11/2012 11:14, Aurélien a écrit :
2012/11/28 [WHD-RS] Benjamin SCHILZ <benja...@whd-rs.com>:
Bonjour à tous,
Je m’interroge sur la distribution des I/O réseaux sur un serveur Linux
(Debian 6.0.6 ; 2.6.32-5-amd64) :
Les I/O sont toutes envoyées sur un cœur. Le truc que j’arrive pas à saisir
c’est que sur d’autres serveurs avec la même version de noyau, driver réseau
(e1000e) et le même genre de cartes réseaux (Intel sur CM Supermicro) ce
n’est pas le cas :
#cat /proc/interrupts
CPU0 CPU1 CPU2 CPU3
53: 2136695 2136042 2138009 2137537 PCI-MSI-edge eth0
54: 42655676 42656495 42654333 42654706 PCI-MSI-edge eth1
Bonjour,
C'est lié au nombre de coeurs et à l'architecture physique de la carte
mère. J'ai constaté qu'au delà de 4 coeurs, les interruptions sont
wirées sur un coeur et plus distribuées (pour les fans, lire ce qui
concerne l'io-apic dans le noyau).
irqbalance est à oublier, vu qu'il cherche l'économie d'énergie et pas
la performance apparemment. Enfin, il ne fonctionne tout simplement
pas quand on renomme les cartes (si ça ne commence pas par eth il est
perdu). Perso j'ai fait des scripts dans le ifup.d qui redistribue les
IRQs réseau en round-robin sur tous mes coeurs (je les matche avec une
regex).
Il peut y avoir un intérêt à mettre plus de cartes en LACP par
exemple, même si pas beaucoup de débit, pour utiliser tous les coeurs
(je pense à un LB en DSR par exemple); et à des cartes genre intel ou
broadcom qui ont 8 files txrx avec chacune une interruption.
Cordialement,
Bonjour,
Problème que j'ai aussi pu rencontrer de mon coté (même sur des kernels
3.2 de squeeze-backports, que je recommande en passant par rapport à un
kernel 2.6.32 pour des machines à forte charge réseau ou avec matériel
récent), irqbalance de son côté étant parfois totalement inefficace,
parfois ne proposant pas une répartition idéale.
A ne pas oublier qu'il est recommandé de n'envoyer les interrupts que
vers les cœurs physiques et non pas vers les cœurs logiques (hyper
threading) du/des CPU(s) et qu'irqbalance ne prends pas ce paramètre en
compte.
Personnellement, je force la répartition manuellement dans le
/etc/rc.local, ça n'est peut être pas très propre mais ça fonctionne
sans soucis (ne pas oublier de revérifier que les numéros d'interrupts
n'aient pas changés pour les périphériques suite à un changement de
kernel par exemple ou scripter pour automatiser cela), pour plus de
détails sur le format de la valeur à utiliser (possibilité d'envoyer les
interrupts vers plusieurs cœurs en même temps et non pas seulement vers
un seul) : https://cs.uwaterloo.ca/~brecht/servers/apic/SMP-affinity.txt
ps: il est aussi intéressant de faire de même pour les cartes RAID si
applicable, de plus certaines cartes permettent également d'être vues en
plusieurs "parties" dans la liste des devices afin de pouvoir mieux
répartir la charge (ex: http://kb.lsi.com/KnowledgebaseArticle16667.aspx).
Cordialement.
_______________________________________________
Liste de diffusion du FRsAG
http://www.frsag.org/