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