Donc j'ai regardé avec htop, très intéressant, au niveau irq, je n'ai vu que des soft-irq et sur 2 CPU (#4 et #5) : je ne sais pas pourquoi ces CPU, je ne vois pas dans /proc/interrupts ce qui pourrait expliquer cela..
10 septembre 2021 12:21 "Fabien H" frnog.fabien@gmail.com a écrit:
D'accord je vais jeter un oeil à cela merci.
irqbalance est bien installé, d'ailleurs je vois remonter les process
ksoftirqd/2 et ksoftirqd/3
lors des fortes charges.
J'ai lu dans la littérature que de toute façon, les interrupt d'une
carte réseau ne seraient pas
réparties par irqbalance mais seraient justement tout le temps traité
par le même CPU virtuel pour
des raisons de performance..?
Je ne sais pas si il y a un comportement spécifique sur du virtuel mais avec un OS sur un hôte physique il est important que les IRQ soit réparties sur l'ensemble des cœurs sinon on fini par perdre des connexions car un cœur sature en passant son temps a gérer les interruptions alors que les autre se tournent les pouces.
Le tunning nginx (si je ne me trompe pas) est bon ? Par exemple worker_rlimit_nofile, worker_connections ou bien worker_processes, worker_cpu_affinity. Logiquement vous avez gardé la même conf je suppose
Par contre le tuning de la stack réseau n'a peut etre pas été reporté sur le nouvel OS ? (somaxconn, ip_local_port_range, et si il y a aussi du tcp tcp_fin_timeout..) ?
Le ven. 10 sept. 2021 à 12:16, Guillaume Vassal guillaume@vass.al a
écrit :
Bonjour,
J'ai eu ce genre problème sur de la machine physique qui encaisse
vraiment beaucoup de trafic, mais
ça doit être valable sur du virtuel.
Dans un premier temps, pour voir si les IRQ sont mal réparties sur les
différents cœurs sans se
prendre la tête tu peux utiliser simplement htop > F2 > Display Options
[x] Detailed CPU time
(.....)
De visu si tout s'empile sur seulement sur certains cœur c'est qu'il y
a surement un problème de
répartition.
Une piste peut être de vérifier que le service irqbalnce est bien
installé et démarré. Il fait le
café tout seul en théorie
systemctl status irqbalance.service
Cdt,
Guillaume Vassal
10 septembre 2021 11:55 "Fabien H" frnog.fabien@gmail.com a écrit:
Bonjour,
je vais essayer de vous expliquer le problème que nous rencontrons en
essayant d’être concis :Nous
avons utilisé pendant des années sur 2 VM un applicatif open source
très connu qui fonctionne
massivement en multi-threadé, en quasi temps réel, et en gateway UDP
avec mal un trafic UDP qui va
en augmentant selon la charge (les plus perspicaces devineront !) :
- ESXI : 6.5.0 update 3
- OS invité : Debian 8
- Interfaces réseau : E1000
- 8 vCPU / 16 Go RAM
Cela a fonctionné très bien même en cas de montée en charge assez
importante. Le load average
depasse rarement 0,8 et très stable dans le temps. Pourtant nous
étions bien conscients que les
conditions n’étaient pas optimales sur la type de carte E1000
utilisées.
Récemment, nous avons déployé 2 nouvelles VM avec le même applicatif
mais en version plus récente
et sur un OS plus récent :
- ESXI 6.5.0 update 3
- OS invité : Debian 10
- Interface réseau : VMXNET3 (driver integré au noyau 4.19.0-16)
- 8 vCPU / 16 Go RAM
- VMWARE Tools installé
Nous avons constaté assez rapidement des problèmes de montée en
charge, avec une charge moderée, le
load average est quasi à 0,00. Lors d’une montée en charge en journée,
le load est plutôt en
moyenne sur 2 ou 3, et lors de certains pics de charge part à 4 ou 6,
puis retombe à 2-3. Lorsque
la charge retombe. Je constate que le load average s’envole surtout quand le si est non
nul sur les 2 CPU qui gèrent
les interruptions des 2 cartes réseau IN et OUT :
%Cpu2 : 1.5 us, 1.1 sy, 0.0 ni, 96.6 id, 0.0 wa, 0.0 hi, 0.8 si, 0.0 st %Cpu3 : 1.1 us, 1.1 sy, 0.0 ni, 97.4 id, 0.0 wa, 0.0 hi, 0.4 si, 0.0 st
16: 0 0 529091347 0 0 0 0 0 0 0 0 0 0 0 0 0 IO-APIC 16-fasteoi ens34,
vmwgfx
17: 0 0 0 453037316 0 0 0 0 0 0 0 0 0 0 0 0 IO-APIC 17-fasteoi ens35
J’en déduit que la charge augmente à cause d’un problème
d’interruptions. Pourtant la charge de
trafic UDP n’est pas énorme, surtout par rapport à l’ancienne
installation sur Debian 8 +
E1000.Nous avons essayé le CPU Pinning => Pas vraiment d’amélioration. Nous avons essayé de revenir à E1000 => Amélioration en charge basse
mais pas d'amélioration en
charge elevée
Mes questions :
- Avez-vous déjà rencontré ce genre de comportements sur le réseau et
les interruption sur Vmware +
Linux Debian ?
- Comment être sur que le load average vient bien des interruptions ?
Faut-il mesurer un nombre
d’interruptions / seconde pour confirmer ?
- Avez-vous des idées pour faire un bench de VM vierge sur du trafic
UDP ? iperf par exemple entre
2 VM ? -Avez-vous des idées sur la possible résolution du problème indiqué ?
(j’ai pensé testé en noyau
5.X mais sans conviction)
Merci pour votre aide, Fabien