BGP flapping et blackhole partiel sur cluster Bare Metal Bird2

ncharrier 01/03/2026
RÉSOLU
ncharrier
Auteur
Avatar de ncharrier
ncharrier
Auteur

on a un souci majeur sur notre infra edge. cluster bird2 sur debian 12 qui annonce des prefixes en anycast.

aléatoirement les sessions bgp tombent puis remontent après 30 secondes. au moment du flap on a des drops de paquets massifs. le syslog est peu bavard sauf un laconique hold timer expired.

quelqu'un a déjà eu ça sur du trafic dépassant les 10gbps ? on est sur des cartes intel x520.

01/03/2026 à 01:54

15 commentaires

dpierre
Membre Actif
Avatar de dpierre
dpierre
Membre Actif

hold timer expired c'est souvent un signe que tes keepalives ne passent plus. à 10gbps tu dois avoir une saturation de la queue RX qui gère le trafic de contrôle.

t'as vérifié l'état des queues avec ethtool ?

02/03/2026 à 17:12
ncharrier
Auteur
Avatar de ncharrier
ncharrier
Auteur
ethtool -S eth0 | grep miss
rx_errors: 0
rx_missed_errors: 124502
rx_no_dma_resources: 0

en effet j'ai des rx_missed_errors qui grimpent pile pendant les flaps. mais le cpu global est à 20%.

05/03/2026 à 09:52
lallard
Membre Actif
Avatar de lallard
lallard
Membre Actif

le cpu global veut rien dire. regarde le détail par core avec mpstat. parierais que t'as un core à 100% à cause des softirqs (ksoftirqd).

tes interruptions sont bien balancées sur tous les cores ou tout tape sur le core 0 ?

08/03/2026 à 04:43
ncharrier
Auteur
Avatar de ncharrier
ncharrier
Auteur

bien vu. le core 0 est en PLS totale. ksoftirqd/0 prend tout le load.

pourtant l'irqbalance tourne. je comprends pas pourquoi il fait pas son job.

10/03/2026 à 00:46
dpierre
Membre Actif
Avatar de dpierre
dpierre
Membre Actif

vire irqbalance. c'est souvent de la merde sur des workloads haute performance. faut fixer les affinités manuellement.

montre ton /proc/interrupts pour voir comment les queues sont bindées.

12/03/2026 à 19:09
ncharrier
Auteur
Avatar de ncharrier
ncharrier
Auteur
cat /proc/interrupts | grep eth0
 125: 542310234 0 0 0 IRQ-PCI-MSI eth0-TxRx-0
 126: 0 432123 0 0 IRQ-PCI-MSI eth0-TxRx-1

effectivement la queue 0 prend tout dans la tronche et les autres branlent rien.

14/03/2026 à 17:23
lallard
Membre Actif
Avatar de lallard
lallard
Membre Actif

c'est typique du RSS (Receive Side Scaling). si ton trafic entrant est mal hashé le NIC envoie tout sur la même queue.

tu fais du tunnel ou de l'encapsulation quelconque ? genre vxlan ou gre ?

16/03/2026 à 07:31
ncharrier
Auteur
Avatar de ncharrier
ncharrier
Auteur

exactement. on a un tunnel ip-in-ip pour certains flux transverses.

du coup le NIC voit toujours le même couple IP source/dest du tunnel et hash tout sur la même queue rx.

17/03/2026 à 17:54
dpierre
Membre Actif
Avatar de dpierre
dpierre
Membre Actif

cherche pas plus loin. ton trafic tunnelisé sature un seul core. bird2 est sur ce même core et ses paquets bgp se font dropper avant d'arriver au userland.

faut activer le steering RFS ou essayer de decapsuler plus tôt si ton NIC le supporte pas en hardware.

20/03/2026 à 13:19
lallard
Membre Actif
Avatar de lallard
lallard
Membre Actif

ou alors tu configures ton bird pour utiliser une priorité temps réel ou un socket priority pour bypasser la file d'attente saturée.

mais le mieux c'est de régler le hashage. sur intel tu peux forcer le hashage sur les ports l4 même dans l'encapsulation avec certains réglages ethtool.

21/03/2026 à 23:08
ncharrier
Auteur
Avatar de ncharrier
ncharrier
Auteur

j'ai tenté de modifier le hashage rss via ethtool mais le x520 est vieux il galère sur l'inner header.

j'ai mis en place ça pour tester en urgence :

ethtool -N eth0 rx-flow-hash udp4 sdfn
ethtool -C eth0 rx-usecs 100
24/03/2026 à 03:10
dpierre
Membre Actif
Avatar de dpierre
dpierre
Membre Actif

si ça suffit pas check le rps (receive packet steering). c'est du load balancing logiciel dans le kernel.

tu peux dispatcher les paquets sur plusieurs cores après la réception par le NIC.

echo f > /sys/class/net/eth0/queues/rx-0/rps_cpus
25/03/2026 à 14:54
ncharrier
Auteur
Avatar de ncharrier
ncharrier
Auteur

le rps a sauvé le setup. la charge est maintenant split sur les 4 premiers cores.

plus aucune rx_missed_errors. les sessions bgp sont stables depuis 1h malgré un stress test à 12gbps.

28/03/2026 à 04:08
lallard
Membre Actif
Avatar de lallard
lallard
Membre Actif

pense aussi à augmenter le net.core.netdev_max_backlog pour encaisser les bursts.

et passe bird en priorité fifo avec chrt si tu veux être vraiment safe contre les spikes cpu.

29/03/2026 à 10:44
ncharrier
Auteur
Avatar de ncharrier
ncharrier
Auteur

c'est noté. modif sysctl appliquée. on va monitorer la nuit mais ça semble enfin sain.

merci pour le coup de main sur le RSS c'était bien ça le point bloquant.

31/03/2026 à 17:05

Laisser une réponse

Vous devez être connecté pour poster un message !

Rejoindre la communauté

Recevoir les derniers articles gratuitement en créant un compte !

S'inscrire