Optimiser les performances reseau
Un article de Wiki SOS-ADMIN.
Sommaire |
Pourquoi ce guide ?
MERCI DE NE PAS MODIFIER CE GUIDE JE SUIS ENTRAIN DE LE REDIGER
Je ne prétends pas vous apporter des informations "super géniales/exactes", mais j'ai eu, sur des bi-Xeon, des soucis avec les performances réseau, après m'être renseigné un peu partout, certaines personnes, certains forums et certains sites, m'ont permis d'obtenir diverses informations qui m'ont étés utiles.
Donc je me dis, même si ce qui est la dessous de résoudra pas vos problèmes, cela pourra peut-être au moins vous guider...
Configuration Matérielle
J'ai effectué mes tests avec le matériel suivant :
- Carte mère : SuperMicro X6DVA-EG
- Processeur : 2x nocona Xeon 3 GHz
- Réseau : 2x Intel(R) PRO/1000 Gigabit Ethernet
Configuration logicielle
- Gentoo Linux
- Linux 2.6.14.3 - acpi=off - SMP
- Drivers chipset réseau : e1000 (support NAPI)
Optimisations
Equilibrage des interruptions
En effet sur un système multi-cpu physiques (i.e. : bi-xéon) et/ou virtuels (i.e. : HyperThreading), les interruptions (notemment réseaux) sont généralement mal répartis, ce qui fait qu'un des processeurs reçoit bien plus d'interruptions qu'un autre. Pour vérifier ça :
bixeon ~ # cat /proc/interrupts
CPU0 CPU1
0: 36318308 537 IO-APIC-edge timer
2: 0 0 XT-PIC cascade
14: 0 0 IO-APIC-edge libata
15: 587126 3 IO-APIC-edge libata
26: 162083535 1 IO-APIC-level eth0
NMI: 0 0
LOC: 36320638 36320637
ERR: 0
MIS: 0
ici on vois clairement que le CPU0 à beaucoup plus d'interruption que le CPU1, alors on va faire simple, on va basculer les interruptions d'eth0 de CPU0 vers CPU1, pour cela, il faut savoir sur quel IRQ se trouve eth0, simple, c'est le numéro le plus à gauche sur la même ligne qu'eth0.
Un fois que l'on connait l'irq d'eth0, on va demander simplement au kernel de basculer les intérruptions dessus :
bixeon ~ # cat /proc/irq/26/smp_affinity 01 bixeon ~ # echo "02">/proc/irq/26/smp_affinity
Pourquoi "02", actuellement tout était sur le CPU0 (01), et on bascule sur le CPU1 (02)
Et on peut constater deux choses : les changements sont biens pris en comptes, le CPU1 prends désormais en charge les interruptions d'eth0 à la place de CPU0 :
bixeon ~ # cat /proc/interrupts
CPU0 CPU1
0: 339951 518 IO-APIC-edge timer
2: 0 0 XT-PIC cascade
14: 0 0 IO-APIC-edge libata
15: 37204 3 IO-APIC-edge libata
26: 1090858 17961 IO-APIC-level eth0
NMI: 0 0
LOC: 340347 340346
ERR: 0
MIS: 0
Paramètres de l'interface réseau
- Augmenter le TXQUEUELEN sur votre interface réseau :
bixeon ~ # ifconfig eth0 txqueuelen 10000
- Pour éviter qu'une table ip_conntrack sature
sysctl -w net.ipv4.netfilter.ip_conntrack_max=1048576 sysctl -w net.ipv4.netfilter.ip_conntrack_buckets=8192
- Et pour éviter que la file d'attente des connexions TCP (syn) vienne à saturer, augmentons sa taille :
sysctl -w net.ipv4.tcp_max_syn_backlog=2048
A Faire
- Vérifier les fautes d'orthographes/grammaire
- Compléter un peu ce guide
- Vérifier les "problèmes" des utilisateurs
- Problèmes :
bixeon ~ # uname -a Linux srv18 2.6.14.3 #1 SMP Fri Dec 2 17:24:28 CET 2005 i686 Intel(R) Xeon(TM) CPU 3.00GHz GenuineIntel GNU/Linux bixeon ~ # bixeon ~ # sysctl -w net.ipv4.netfilter.ip_conntrack_max=1048576 net.ipv4.netfilter.ip_conntrack_max = 1048576 bixeon ~ # sysctl -w net.ipv4.netfilter.ip_conntrack_buckets=8192 error: "Operation not permitted" setting key "net.ipv4.netfilter.ip_conntrack_buckets"
Remerciements et liens
Merci à miss34 qui à beaucoup participer sans le vouloir à ce guide au travers du forum cité plus bas
Merci à Elgi qui m'a aidé à faire sortir des liens ci-dessous les informations essentielles
Merci à Stéphane Bouvard qui m'as donné quelques liens et renseignements
Merci à pye qui m'as aidé sur IRC pour que le kernel détecte 4 cpus sur le bi-xéons (2cpu HT)
Merci à David CHANIAL (DaviXX) qui a pris le temps de rédiger ce guide même si vous le trouvez inutile :)
http://www.faqs.org/docs/linux_network/x-087-2-iface.ifconfig.html
http://forum.ovh.com/showthread.php?s=&threadid=5899
--DaviXX 2 déc 2005 à 10:18 (CET)

