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

  1. Vérifier les fautes d'orthographes/grammaire
  2. Compléter un peu ce guide
  3. 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)