You are here

Linux : performances réseau

Error message

Notice: Undefined property: stdClass::$forum_tid in forum_node_view() (line 271 of /srv/d_gandizzop/www/drupal/modules/forum/forum.module).

Certaines variables propres à TCP peuvent être optimisées pour une meilleure performance.
Toutefois l'inluence de ces options n'est visible que sous forte charge car le noyau Linux réalise déjà des optimisations "au vol" sur un grand nombre de paramètres.

Les variables à optimiser sont gérées par la commande "sysctl".
Dans la plupart des distributions Linux il existe un fichier "sysctl.conf" qui permet de conserver en permanence les valeurs des variables modifiées.
La modification d'une variable s'effectue par l'inscripton de la variable et de sa valeur dans ce fichier sous la forme :

nom_de_la_variable = valeur(s)
La validation des modifications est ensuite effectuée par la commande :
sysctl -p

La plupart de ces valeurs concernent la gestion de la mémoire accordée à la pile réseau.
Ne pas toucher à la variable "tcp_mem" utilisée ar le système pour effectuer ses propres optimisations.

net.core.rmem_max = fenêtre maximum de réception
net.core.wmem_max = fenêtre maximum d'émission
Les valeurs par défaut sont en général assez petites, la mémoire était rare et chère, et peuvent être "forcées" à des valeurs beaucoup plus fortes telles que 4M ( 4194304), 8M (8388608) ou même 16M (16777216).


net.ipv4.tcp_rmem = mémoire tampon réception
net.ipv4.tcp_wmem =  mémoire tampon émission
Valeurs à tester :
net.ipv4.tcp_rmem=4096   87380   4194304
net.ipv4.tcp_wmem=32768   436600   873200


net.core.netdev_max_backlog=2500
Suffisant pour des liens à 1Gb, à pousser à 25000/30000 sur des liens à 10Gb

net.ipv4.tcp_sack gestion des ack
Certains recommandent de positionner cette valeur à zéro, d'autres de la laisser à 1. Sur ce point quelques tests seront bienvenus.

net.ipv4.tcp_keepalive_time
La valeur est en général trop élevée, il est en général conseillé de positioner cette valeur vers 1800 soit 30 minutes.

net.ipv4.tcp_fin_timeout : durée de conservation des connexions après fermeture
Sur des serveurs gérant beaucoup de requêtes il faut diminuer cette valeur a 30 secondes ou même moins si le serveur est très chargé.


En ajustant ces paramètres on obtient déjà une performance correcte pour la plupart des applications. Si votre serveur recoit des milliers de connexions par minute il y a d'autres paramètres importants mais nous n'en parlerons pas ici.

Par ailleurs la qualité des cartes réseau est un facteur important de performance, les économies se paient en général par des performances non optimales.

Globalement sur la plupart des machines (sauf sur celles avec peu de mémoire ( < 1Go) j'utilise les paramètres suivants :

net.core.rmem_max = 8388608
net.core.wmem_max = 8388608

net.ipv4.tcp_mem  = 8388608 8388608 8388608  

net.ipv4.tcp_rmem = 8192 87380 8388608
net.ipv4.tcp_wmem = 8192 65536 8388608

net.core.netdev_max_backlog = 1024

net.ipv4.tcp_no_metrics_save = 1
net.ipv4.tcp_moderate_rcvbuf = 1

net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 900

Bons tests ...