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/

Répondre à