[technique] Resolution du probleme de performance TCP depuis Saint-Gaudens

Laurent GUERBY laurent at guerby.net
Mar 3 Juin 11:10:04 CEST 2014


Bonjour,

Apres la mise en place des nouveaux switch et routeur (nouveau CPU,
nouveau kernel) le probleme de performance TCP limité a 10-20 Mbit/s en
download (wget, iperf, autres tests) etait toujours la.

En farfouillant j'ai fini par trouver une page wiki openwrt
dont une note explique clairement une source de probleme potentiel :

http://wiki.openwrt.org/doc/howto/packet.scheduler/packet.scheduler.example4
<<
...
ifconfig $IF_WAN txqueuelen 1000
...
"Set the tx queue lengh. By default virtual iface (bridges (br-*), vlans
(eth0.*)) txqueuelen is set to 0, and the qdisc inherit this value. QOS
is about changing the queue (reordering, dropping), so if you have 0
packet in your queue …"
>>

Et effectivement lors de la creation d'une interface virtuelle VLAN
avec iproute2 :

ip link add link eth0 name eth0.20 type vlan id 20
ip link set eth0.20 up

ip link|grep eth0.20

9: eth0.20 at eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc
noqueue state UP mode DEFAULT 

= "noqueue".

Le reseau vers Saint-Gaudens est sur un lien gigabit a la sortie
du routeur h7 a Toulouse mais limité a 100 Mbit/s par le CELAN,
lors de l'envoi de paquet h7 va envoyer des "burst" de paquets
collés les uns aux autres en gigabit, et ca va boucher
le tuyau 100 Mbit/s, perte de paquet et donc perte de performance
TCP. 

Un symptome clair etait la facilité d'obtenir un iperf
UDP a 60 Mbit/s sans perte alors que ca plafonne a 10 Mbit/s en TCP :
l'outil iperf en UDP espace les paquets dans le temps au bon rythme,
alors qu'en TCP de gros segments vont etre envoyés en burst par le
kernel. 

Un sujet de discussion recent "[Cerowrt-devel] Ubiquiti QOS"
https://www.mail-archive.com/cerowrt-devel@lists.bufferbloat.net/msg02727.html
"So we do need the source nodes to implement less "bursty" sending
stacks"

La solution est donc de shaper en logiciel a 100 Mbit/s le VLAN CELAN
pour forcer h7 a envoyer au bon rythme :

ip link set dev eth0.2417 txqueuelen 1000
tc qdisc add dev eth0.2417 root handle 1: htb 
tc class add dev eth0.2417 root classid 1: htb rate 100Mbit

Avec ce changement on monte facilement a 50 Mbit/s en TCP
sur iperf et wget. On doit surement trouver des reglages
un peu meilleurs.

La suite pour Saint-Gaudens est d'integrer le shaping, le NAT 1:1
et la repartition "fair" de la bande passante dans un seul outil
sur h7 pour pouvoir supprimer le routeur intermediaire a Saint-Gaudens
car c'est plus facile de redonder le routage a Toulouse qu'a
Saint-Gaudens.

Sincèrement,

Laurent




Plus d'informations sur la liste de diffusion technique