Paramètres TCP à faible latence sur Ubuntu

10

Il y a un serveur pour les mesures fonctionnant sur Ubuntu dans mon laboratoire. Et il y a le programme C, qui reçoit des données via une connexion TCP et devrait dès que possible envoyer une réponse.

Configuration

  • CPU: 2 processeurs x 4 cœurs - Intel (R) Xeon (R) CPU E5345 à 2,33 GHz
  • RAM: 12 Go
  • Carte réseau: Contrôleur Gigabit Ethernet Intel Corporation 80003ES2LAN / Contrôleur Gigabit Ethernet 82546EB
  • Commutateur réseau: Cisco Catalyst 2960
  • Informations sur les données: les blocs de données viennent env. toutes les 10 millisecondes. La taille du bloc de données est d'env. 1000 octets.

La latence du réseau lors de la réception de paquets est très critique (des dizaines de microsecondes sont importantes). J'ai optimisé le programme au maximum, mais je n'ai aucune expérience en ajustant Ubuntu.

Que peut-on configurer dans Ubuntu pour réduire le délai local de traitement / envoi des paquets?

Alex V
la source
Oui, j'aimerais connaître la marque / le modèle du serveur.
ewwhite
vous devriez creuser plus profondément. lire des informations sur l'optimisation du noyau pour le trading haute fréquence. Par exemple, un document Cisco de vente: cisco.com/c/dam/en/us/products/collateral/switches/… afin d'obtenir une carte PCI-E décente des deux côtés permettra d'économiser également. Très probablement (en fonction du temps que vous souhaitez y consacrer), vous reconstruirez au moins le noyau avec des paramètres différents, supprimant beaucoup de choses dont Ubuntu a besoin, mais vous ne le faites pas. Donc, comme ewwhite l'a écrit dans les commentaires, ubuntu n'est peut-être pas parfait pour les paramètres les plus bas.
Dennis Nolte
Avec le matériel répertorié, il s'agit d'un équipement datant de 2008 (processeurs Intel série 5300). À l'époque, il n'y avait pas trop de modifications matérielles spéciales à faible latence possibles. Je définirais le BIOS du système pour qu'il s'exécute en mode haute performance et désactiverais les états C du processeur.
ewwhite
@ewwhite Oui, vous avez raison sur les équipements de l'ère 2008. J'essaierai vos suggestions. Je vous remercie!
Alex V
Avez-vous la possibilité de modifier ce logiciel pour TCP_NODELAY?
Matt

Réponses:

10

Honnêtement, je n'utiliserais pas Ubuntu pour cela ... mais il existe des options qui peuvent être appliquées à n'importe quelle variante de Linux.

Vous voudrez incréer vos tampons de pile réseau:

net.core.rmem_default = 10000000
net.core.wmem_default = 10000000
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216

Si l'application écrit sur le disque, un changement d'ordonnanceur / élévateur serait peut-être nécessaire (par exemple l' deadlineélévateur).

Au niveau du serveur, vous pouvez modifier le gouverneur du processeur et la gestion de l'alimentation et de la fréquence du processeur (États P, États C).

Au niveau du système d'exploitation, vous pouvez modifier la priorité en temps réel de votre application ( chrt), en optimisant pour réduire les interruptions, en l'épinglant sur un processeur ou un groupe de processeurs ( taskset) et en arrêtant tous les services ou démons inutiles.

Vous pouvez également voir quelques suggestions sur: Comment dépanner la latence entre 2 hôtes Linux

Il est difficile d'être plus précis sans connaître le matériel ou l'équipement de réseau impliqué.

ewwhite
la source
3
Ce n'est pas vraiment le lieu approprié pour les débats religieux. Emmenez-le ailleurs, comme le chat.
Michael Hampton
1
@MichaelHampton Il y avait des liens intéressants dans la discussion liés à la question: Red Hat Realtime Tuning Guide .
Alex V
6

Si vous optez pour la voie des hautes performances, vous voudrez généralement exécuter aussi peu d'autres processus (planifiés) que possible car ils interféreront avec votre application.

Linux, comme les systèmes d'exploitation UNIX classiques, est conçu pour exécuter simultanément plusieurs applications de manière équitable et essaie d'éviter la famine des ressources et vous viserez le contraire, affamez tout le reste sauf votre application. Des étapes simples au niveau du système d'exploitation changent le niveau agréable et la priorité en temps réel de votre application, changent le planificateur ou optent pour un noyau en temps réel .

TCP / IP est généralement réglé pour éviter les interruptions de connexion et utiliser efficacement la bande passante disponible. Pour obtenir la latence la plus faible possible d'une liaison très rapide, plutôt que d'obtenir la bande passante la plus élevée possible d'une connexion où certaines liaisons intermédiaires sont plus contraintes, vous allez ajuster le réglage de la pile réseau.

 sysctl -a 

vous montrera une multitude de paramètres de noyaux que vous pouvez régler. Les paramètres varient selon que vous utilisez IPv4 ou IPv6 et ce que vous faites déjà dans votre application, mais qui peut être intéressant:

  • net.ipv4.tcp_window_scaling=1 RFC 1323 - prise en charge des tailles de fenêtre TCP IPV4 supérieures à 64 Ko - généralement nécessaire sur les réseaux à large bande passante
  • net.ipv4.tcp_reordering=3 Le nombre maximal de fois qu'un paquet IPV4 peut être réorganisé dans un flux de paquets TCP sans TCP en supposant une perte de paquet et un démarrage lent.
  • net.ipv4.tcp_low_latency=1destiné à privilégier une faible latence sur un débit plus élevé; = 1 désactive le traitement de la pré-file d'attente TCP IPV4
  • net.ipv4.tcp_sack=0 la valeur 1 permet un accusé de réception sélectif pour IPV4, ce qui nécessite l'activation de tcp_timestamps et ajoute une surcharge de paquets, dont vous n'avez pas besoin si vous ne rencontrez pas de perte de paquets
  • net.ipv4.tcp_timestamps=0 Seulement conseillé dans les cas où un sac est nécessaire.
  • net.ipv4.tcp_fastopen=1 Activez pour envoyer des données dans le paquet SYN d'ouverture.

La plupart sinon tous sont mieux documentés dans la source du noyau .

Vous pouvez bien sûr coder des sockets TCP brutes et contourner complètement la pile TCP / IP du noyau.

Souvent, les systèmes hautement réglés fonctionnent sur un réseau de confiance et verront leurs pare-feu locaux (iptables) désactivés.

HBruijn
la source