Bonjour,
Ayant commandé, reçu, testé des soekris 6501 afin de servir de routeur, passerelle, concentrateur VPN, ... bref un peu tout, je me suis aperçu que les performances s'écroulent dramatiquement dès que le routeur est sollicité.
Les performances brutes (sans IPtables, ...) uniquement en routage, on atteint presque 1Gb/s. Lors de l'utilisation d'IPTables, les performances s'écroulent sévèrement pour atteindre 250Mb/s.
Ayant un transit internet 100Mb/s de commit avec 1Gb/s de burst, je trouve dommage d'être limité à 250Mb/s.
Après examen de /proc/interrupts, on s'aperçoit que: - La machine voit bien ses 2 CPUs (coeurs) - Les interruptions des 4 interfaces réseau sont sur le CPU0 (majoritairement).
# egrep "(eth|CPU)" /proc/interrupts CPU0 CPU1 40: 10460220 0 PCI-MSI-edge eth0-rx-0 41: 18965372 6687 PCI-MSI-edge eth0-tx-0 42: 5 0 PCI-MSI-edge eth0 43: 4165358 65846 PCI-MSI-edge eth1-rx-0 44: 875081 10055 PCI-MSI-edge eth1-tx-0 45: 5 0 PCI-MSI-edge eth1 47: 1543827 3451 PCI-MSI-edge eth2-rx-0 48: 209462 774 PCI-MSI-edge eth2-tx-0 49: 5 0 PCI-MSI-edge eth2 50: 12990523 6874 PCI-MSI-edge eth3-rx-0 51: 11156335 5841 PCI-MSI-edge eth3-tx-0 52: 5 0 PCI-MSI-edge eth3
Après avoir "rééquilibré" les interruptions sur les 2 coeurs du CPU le débit (IPTables activé) a doublé. On parvient en effet à 550Mb/s. C'est certes loin de 1Gb/s, mais déjà bcp mieux.
## eth0/1 # for i in {40..45}; do echo 1 > /proc/irq/$i/smp_affinity; done ## eth2/3 # for i in {47..52}; do echo 2 > /proc/irq/$i/smp_affinity; done
Esperant que celà puisse servir à certain(e)s.
Laurent
Bonjour,
On Mon, 24 Sep 2012 16:30:44 +0200 Laurent CARON lcaron@unix-scripts.info wrote:
| Ayant commandé, reçu, testé des soekris 6501 afin de servir de routeur, | passerelle, concentrateur VPN, ... bref un peu tout, je me suis aperçu | que les performances s'écroulent dramatiquement dès que le routeur est | sollicité. | | Les performances brutes (sans IPtables, ...) uniquement en routage, on | atteint presque 1Gb/s. | Lors de l'utilisation d'IPTables, les performances s'écroulent | sévèrement pour atteindre 250Mb/s. | | Ayant un transit internet 100Mb/s de commit avec 1Gb/s de burst, je | trouve dommage d'être limité à 250Mb/s. | | Après examen de /proc/interrupts, on s'aperçoit que: | - La machine voit bien ses 2 CPUs (coeurs) | - Les interruptions des 4 interfaces réseau sont sur le CPU0 | (majoritairement). | | # egrep "(eth|CPU)" /proc/interrupts | CPU0 CPU1 | 40: 10460220 0 PCI-MSI-edge eth0-rx-0 | 41: 18965372 6687 PCI-MSI-edge eth0-tx-0 | 42: 5 0 PCI-MSI-edge eth0 | 43: 4165358 65846 PCI-MSI-edge eth1-rx-0 | 44: 875081 10055 PCI-MSI-edge eth1-tx-0 | 45: 5 0 PCI-MSI-edge eth1 | 47: 1543827 3451 PCI-MSI-edge eth2-rx-0 | 48: 209462 774 PCI-MSI-edge eth2-tx-0 | 49: 5 0 PCI-MSI-edge eth2 | 50: 12990523 6874 PCI-MSI-edge eth3-rx-0 | 51: 11156335 5841 PCI-MSI-edge eth3-tx-0 | 52: 5 0 PCI-MSI-edge eth3 | | Après avoir "rééquilibré" les interruptions sur les 2 coeurs du CPU le | débit (IPTables activé) a doublé. On parvient en effet à 550Mb/s. C'est | certes loin de 1Gb/s, mais déjà bcp mieux.
Hum je ne sais pas si ce type de boitier est vraiment destiné à *router* du Gbps. Deja au niveau CPU c'est un Atom.
Ce qui compte le plus ce sont les pps pas les bps. Ca fait une grosse différence suivant la taille des packets... Ensuite au niveau routage, c'est quel type de routage: 4 routes en statique ou des fulls view bgp ? Et au niveau iptables, il faudrait voir le nombre de regles, etc...
Un point a verifier peut être: est-ce que l'"Interrupt moderation" est activé au niveau du driver des interfaces reseau.
Pour ce type de bête, router 550Mbs/s ca me semble deja tres tres bien.
Manuel
On Mon, Sep 24, 2012 at 05:22:59PM +0200, Manuel Guesdon wrote:
Hum je ne sais pas si ce type de boitier est vraiment destiné à *router* du Gbps. Deja au niveau CPU c'est un Atom.
Ce type de boitier n'est clairement pas destiné à router du Gb/s, mais autant le pousser le plus loin possible.
Ce qui compte le plus ce sont les pps pas les bps. Ca fait une grosse différence suivant la taille des packets...
J'ai pris une utilisation typique. Cette machine servant à router les connexions internet de 100/150 personnes, terminer 50 tunnels OpenVPN, et 10 tunnels IPSec. En terme de PPS, je n'en ai aucune idée.
Ensuite au niveau routage, c'est quel type de routage: 4 routes en statique ou des fulls view bgp ?
Une route par défaut + qq routes statiques (une vingtaine).
Et au niveau iptables, il faudrait voir le nombre de regles, etc...
# iptables -n -L | wc -l 878
Un point a verifier peut être: est-ce que l'"Interrupt moderation" est activé au niveau du driver des interfaces reseau.
Je vais regarder ça. Merci du tuyau ;)
Pour ce type de bête, router 550Mbs/s ca me semble deja tres tres bien.
On 24 sept. 2012, at 19:42, "Radu-Adrian Feurdean" frsag@radu-adrian.feurdean.net wrote:
On Mon, Sep 24, 2012, at 06:35 PM, Laurent CARON wrote:
On 24/09/2012 18:10, Radu-Adrian Feurdean wrote:
Avec ou sans conntrack ?
Avec.
Si t'a pas desesperement besoin, essaye sans. Renomme/efface carement le module histoire qu'il n'y a pas de risque qu'il se charge.
Hello,
Sinon, plus propre, utiliser les cibles NOTRACK de manière sélective.
Ca tiendra mieux aux upgrades kernel aussi.
Cdt, Aurélien.
Envoyé depuis mon fax satellitaire
Le 24 sept. 2012 à 18:11, Radu-Adrian Feurdean frsag@radu-adrian.feurdean.net a écrit :
Avec ou sans conntrack ? 878 c'est deja pas mal.
Sans conntrack je suis monté sans problème notable de performance sur une conf au delà de 10000 règles.
C'était pas le royaume de l'élégance, mais ça marchait bien - maintenant on n'avait jamais poussé l'infra dans ses retranchements. -- Aurelien
On 24 Sep 2012, lcaron@unix-scripts.info wrote:
# iptables -n -L | wc -l 878
Effectivement, c'est beaucoup pour un Atom.
Tu devrais gagner pas mal en perfs avec ipset si ton use-case est compatible.
Sinon pour le problème d'IRQ, t'as installé irqbalance ?
Bonsoir,
Laurent CARON lcaron@unix-scripts.info : [...]
Après avoir "rééquilibré" les interruptions sur les 2 coeurs du CPU le débit (IPTables activé) a doublé. On parvient en effet à 550Mb/s. C'est certes loin de 1Gb/s, mais déjà bcp mieux.
Vu ce qui a été modifié après le 3.5 pour le routage, ça pourrait valoir le coup d'essayer un 3.6-rc.
Sinon, comme il s'agit d'un routeur, les résultats devraient être différents si on favorise le traitement des interruptions rx et tx d'un même paquet par le même CPU, donc en évitant d'avoir les irq rx et tx d'une interface dans le même CPU. Je ne parierai pas sur le sens ni sur l'ampleur du changement :o)
On 24/09/2012 22:27, Francois Romieu wrote:
Vu ce qui a été modifié après le 3.5 pour le routage, ça pourrait valoir le coup d'essayer un 3.6-rc.
Sinon, comme il s'agit d'un routeur, les résultats devraient être différents si on favorise le traitement des interruptions rx et tx d'un même paquet par le même CPU, donc en évitant d'avoir les irq rx et tx d'une interface dans le même CPU. Je ne parierai pas sur le sens ni sur l'ampleur du changement :o)
J'ai déjà essayé cette piste (c'était d'ailleurs mon premier essai), sans résultat génial.
J'avais mis sur le même coeur rx de eth0/1 et tx de eth2/3 (et inversement pour l'autre coeur).
Le 25/09/2012 09:05, Laurent CARON a écrit :
On 24/09/2012 22:27, Francois Romieu wrote:
Vu ce qui a été modifié après le 3.5 pour le routage, ça pourrait valoir le coup d'essayer un 3.6-rc.
Sinon, comme il s'agit d'un routeur, les résultats devraient être différents si on favorise le traitement des interruptions rx et tx d'un même paquet par le même CPU, donc en évitant d'avoir les irq rx et tx d'une interface dans le même CPU. Je ne parierai pas sur le sens ni sur l'ampleur du changement :o)
J'ai déjà essayé cette piste (c'était d'ailleurs mon premier essai), sans résultat génial.
J'avais mis sur le même coeur rx de eth0/1 et tx de eth2/3 (et inversement pour l'autre coeur).
Bonjour,
sinon il y a les patchs RPS, RFS et XPS de Google qui fonctionnent très bien : http://code.google.com/p/kernel/wiki/NetScalingGuide
Il faut les activer dans le kernel (mini 2.6.35), puis eth par eth. Ca se benchmark mais j'avais fais un script vite fait pour mes besoins :
#!/bin/bash
#Mask cpu: # f = for 4 cpus # ff = for 8 cpus # ffff = for 16 cpus # ffffff = for 24 cpus # But any cpus <= 24: if you do echo "ffffff" > /sys/class/net/$interface/queues/$rx/rps_cpus, you'll have the good mask val="ffffff" #Length of rps_dev_flow table(round to 2^n): rfs="2" optimized=0 force=0
# .....
# RPS/RFS/TPS for interface in $IFACE do if [ -d /sys/class/net/$interface/queues/rx-0 ] then optimized=1 if [ $force == 1 ] || ! grep -q $rfs /sys/class/net/$interface/queues/rx-0/rps_flow_cnt then echo "[$interface] Enabling Receive Packet Steering" for rx in $(ls -1d /sys/class/net/$interface/queues/rx-*) do echo $val > $rx/rps_cpus echo $rfs > $rx/rps_flow_cnt done fi fi
if [ -d /sys/class/net/$interface/queues/tx-0 ] then optimized=2 if [ $force == 1 ] || ! grep -q "f" /sys/class/net/$interface/queues/tx-0/xps_cpus then echo "[$interface] Enabling Transmit Packet Steering" for tx in $(ls -1d /sys/class/net/$interface/queues/tx-*) do echo $val > $tx/xps_cpus done fi fi done
Le 24/09/2012 16:30, Laurent CARON a écrit :
Bonjour,
Ayant commandé, reçu, testé des soekris 6501 afin de servir de routeur, passerelle, concentrateur VPN, ... bref un peu tout, je me suis aperçu que les performances s'écroulent dramatiquement dès que le routeur est sollicité.
Quelqu'un aurait il fait quelque tests de la bête sous Openbsd, avec et sans pf ? Je suis curieux du résultat (même si pour le coup le dual core ne sert à rien)
2012/9/25 Raphael Mazelier raph@futomaki.net:
Quelqu'un aurait il fait quelque tests de la bête sous Openbsd, avec et sans pf ? Je suis curieux du résultat (même si pour le coup le dual core ne sert à rien)
Concernant un pf qui est multi-core: il y a celui inclus la version -current de FreeBSD.
Cordialement,
Olivier
Hello,
Quelqu'un aurait il fait quelque tests de la bête sous Openbsd, avec et sans pf ? Je suis curieux du résultat (même si pour le coup le dual core ne sert à rien)
Ou NetBSD avec le nouveau npf ? (qui n'est pas complètement fini par contre, mais le test serait imho intéressant (SMP aware))
'jour
je profite du thread pour demander si quelqu'un a pu tester les nouveaux EdgeRouter de chez Ubiquiti. http://www.ubnt.com/edgemax#edge-router-carrier
Selon les tests Tolly, la version Lite (99USD, 3 ports giga) pulvériserait du 3925 Cisco, J6450 Juniper ou RB1100AHx2 Mikrotik.
Dualcore MIPS + hardware acceleration packet processing. Avec un soft basé sur du Debian par dessus.
David