Performances weirdes avec eBPF pour network policy k8s

Posté par vdidier le 04/11/2025
RÉSOLU

vdidier

Membre depuis le 18/11/2024

actif rédacteur

yo la team j'ai un souci bizarre on a déployé des netpol avec cilium et eBPF sur notre cluster k8s et depuis on voit des spikes cpu sur les nodes et même des pertes de paquets par moments sur du gros trafic genre 10Gbps quand le réseau monte un peu. j'ai l'impression que c lié à eBPF mais pas sûr comment diagnostiquer ça bien

kubectl get ds cilium -n kube-system
NAME     DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
cilium   6         6         6       6            6                     3d

Commentaires

gmenard

Membre depuis le 27/09/2024

actif secouriste

salut check d'abord ta version de kernel et de cilium les perfs eBPF sont hyper sensibles à ça surtout sur des vieilles versions. t'es en L7 policy ou juste L3/L4

vdidier

Membre depuis le 18/11/2024

actif rédacteur

kernel 5.4 avec cilium 1.9 c'est du L3/L4 de base pas de complexité. les drops sont pas constants mais quand le débit s'emballe ça se voit direct

monnier-augustin

Membre depuis le 26/11/2020

actif

5.4 c'est un peu ancien pour du eBPF haute perf le 5.10 ou 5.15 apporte des grosses optis surtout pour XDP t'as les cpu en mode irq ou softirq qui montent en flèche

vdidier

Membre depuis le 18/11/2024

actif rédacteur

les softirq ouais ça monte pas mal dans atop. j'ai regardé les logs du kernel mais rien d'explicite sur les drops ou des erreurs eBPF

gmenard

Membre depuis le 27/09/2024

actif secouriste

ok si c'est les softirq c'est probablement le traitement des paquets. t'as configuré des maps ebpf avec des clés/valeurs complexes ou bcp de lookups

vdidier

Membre depuis le 18/11/2024

actif rédacteur

pas vraiment c'est des maps assez basiques pour les règles de sécurité. la complexité c'est la quantité de règles disons une centaine par node

gmenard

Membre depuis le 27/09/2024

actif secouriste

cent règles c'est pas énorme. vérifie si tu n'as pas des `perf_event_open` leaks ou des traces qui s'accumulent. ça peut tuer le cpu sans le dire

vdidier

Membre depuis le 18/11/2024

actif rédacteur

comment je check ça les `perf_event_open` leaks t'as un outil spécifique

gmenard

Membre depuis le 27/09/2024

actif secouriste

utilise `bpftool prog show` pour voir les programmes chargés et `bpftool map show` pour les maps. regarde aussi `cat /proc/kallsyms | grep bpf_prog_run` ou des outils comme `bcc/profile` pour identifier les hotspots cpu

vdidier

Membre depuis le 18/11/2024

actif rédacteur

j'ai lancé `bpftool` et j'ai vu que certains programmes avaient des durées d'exécution assez longues pour des opérations réseau censées être rapides. y'a un moyen de voir les jit logs du bpf verifier

monnier-augustin

Membre depuis le 26/11/2020

actif

pour les jit logs faut activer `echo 1 > /proc/sys/net/core/bpf_jit_enable` et `echo 1 > /proc/sys/net/core/bpf_jit_harden` et après tu regardes dans dmesg ou les logs du kernel mais ça peut être verbeux à mort

gmenard

Membre depuis le 27/09/2024

actif secouriste

ouais et si c un souci de map access massif essaie de passer sur une structure plus optimisée si possible pour les lookups genre bpf hash map avec des clés pré-calculées ou des array maps si tes clés sont séquentielles

vdidier

Membre depuis le 18/11/2024

actif rédacteur

j'ai activé les logs du jit et j'ai vu des avertissements sur des boucles potentielles dans un de mes programmes qui est censé être simple. c'est ptete ça la source du souci quand il y a bcp de flux en parallèle

gmenard

Membre depuis le 27/09/2024

actif secouriste

ah les boucles c'est le classique si le verifier est pas content ça ralentit ou ça rejette direct. réécris la partie critique pour éviter les boucles explicites utilise plutôt des helpers bpf_map_lookup_elem en batch si possible

vdidier

Membre depuis le 18/11/2024

actif rédacteur

on a identifié un pattern dans le code généré par cilium qui avait une petite boucle pour une inspection de header ça passait sur du faible trafic mais en charge ça partait en vrille. on a mis à jour cilium vers une version plus récente et ça a corrigé le programme bpf généré le cpu est redevenu normal et plus de drops. thx pour les pistes

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