Yo. XDP c'est sensible. les drops peuvent venir de pleins d'endroits. première chose t'es sûr que c'est pas le NIC driver qui a un souci de buffer. regarde les messages du kernel dmesg
dmesg est propre. pas d'erreurs ni de warnings sur le driver. on est sur un Mellanox ConnectX-5 avec les derniers drivers. les buffers rx/tx sont déjà tunés à fond
ok. ton programme xdp il fait quoi exactement. et t'es sûr qu'il drop pas les paquets lui-même avec un xdp_drop sans que ce soit intentionnel pour ces paquets là
il filtre juste du trafic l3/l4 pour du ddos mitigation. mais c'est du trafic légitime qui est droppé. j'ai vérifié la logique c'est pas censé. j'ai regardé avec bpftool prog show il est bien attaché
t'as checké les stats de ton programme eBPF avec bpftool prog metrics ou perf record -e bpf:bpf_prog_kprobe sur ton programme XDP pour voir où il passe le plus de temps
pas encore fait. je vais essayer bpftool prog metrics. mais est-ce que c'est possible que le kernel drop les paquets avant même que l'ebpf les voie si les buffers sont pleins genre before xdp
totalement. si les ring buffers du nic sont full avant même que xdp n'ait une chance de les processer, ils sont droppés par le hardware. xdp est censé être très tôt dans le pipeline mais y a toujours une limite physique
c'est ça qui m'inquiète. mais si les ring buffers sont full on devrait voir des overruns dans ip -s link. j'ai 0 overrun
pas forcément. overrun c'est quand la mémoire du driver est pleine. si c'est la mémoire hardware sur la carte NIC elle-même qui sature, ça peut juste être un drop silencieux ou compté différemment. t'as des métriques spécifiques du NIC via ethtool -S eth0
bingo ! ethtool -S eth0 montre des rx_queue_0_drops et rx_fifo_errors qui montent en flèche. ça vient bien du hardware de la carte ou du driver qui arrive pas à suivre même si mes buffers sont à fond
ok donc c'est pas XDP qui drop mais XDP qui ralentit le processus ou ton trafic est juste trop intense. si XDP prend trop de temps par paquet, ça backpresure le NIC. même un bon programme peut devenir un bottleneck. il faut que ton XDP soit ultra léger
mon programme est assez simple. il fait des lookups dans une map ebpf. ptete que les lookups sont chers. j'ai pas mis de cache ou de trucs optimisés
un lookup dans une map eBPF c'est ultra rapide normalement. sauf si ta map est énorme ou si t'as des collisions de hash fréquentes. t'as quelle taille de map
ma map fait 1M d'entrées. c grand mais pas non plus démentiel. je vais essayer de simplifier encore plus le programme XDP ou de le décharger pour voir si les drops disparaissent
je l'ai déchargé et surprise les drops sont toujours là. le souci venait bien du Mellanox qui galère avec certains types de burst trafic. j'ai dû upgrader le firmware et changer un paramètre de flow control. MERCI BEAUCOUP pour l'aide les gars j'aurais été bloqué sur eBPF pour des jours
Vous devez être connecté pour poster un message !
Recevoir les derniers articles gratuitement en créant un compte !
S'inscrire
camille35
Membre depuis le 18/04/2019actif
Salut les génies du kernel. On a une interface 100G qui fait pas mal de trafic et on voit des paquets droppés dans les stats ip -s link. genre 10k drops par minute. le souci c'est qu'on a un programme eBPF XDP chargé dessus. j'ai l'impression que ça vient de là. comment je debug un truc pareil