10 commentaires
C'est un classique. Augmenter le ring buffer aide contre les rafales, mais si ton CPU n'est pas capable de vider la file assez vite, tu ne fais que décaler le problème. As-tu vérifié si tu as du softirq pinning efficace sur tes cores ?
Oui, j'ai activé le irqbalance mais je me demande s'il ne faut pas forcer le pinning manuellement. J'ai déjà RPS et RFS activés, mais le CPU 0 est souvent surchargé.
Attention à la taille des buffers, si tu dépasses les capacités du cache L3, tu vas introduire du jitter. Tu devrais aussi regarder du côté de net.core.netdev_max_backlog dans ton sysctl.conf.
Merci pour le conseil sur le NUMA. J'ai déplacé les interruptions sur le même node que la mémoire utilisée par l'application et les drops ont diminué de 60%. Je vais tester le pinning manuel demain en prod.
Garde un oeil sur le context switch rate après le pinning, ça peut grimper si ton app n'est pas bien isolée.
Je vais tester le busy polling sur un node de staging pour voir l'impact sur la consommation CPU. Merci à tous pour les pistes.
N'oublie pas de vérifier si ton pilote NIC supporte le XDP, ça pourrait bypasser une partie de la stack kernel.
C'est la prochaine étape si le tuning sysctl ne suffit pas. Je clôture ce thread pour le moment, merci pour l'aide précieuse.
Laisser une réponse
Vous devez être connecté pour poster un message !
Je travaille sur une infra haute performance et je constate des
dropped packetsau niveau de la carte réseau (NIC) sous forte charge. Après analyse avecethtool -S, je vois que les compteursrx_missed_errorsaugmentent drastiquement.J'ai tenté d'augmenter la taille du ring buffer avec
ethtool -G, mais je me demande si cela ne va pas dégrader la latence globale. Quelqu'un a-t-il déjà tuné ces valeurs sur des cartes Intel 10G/25G en environnement virtualisé ?