XDP droppe des paquets sur Mellanox ConnectX-5, mais pas sur Intel I210

epotier 22/01/2025
RÉSOLU
epotier
Auteur Actif
Avatar de epotier
epotier
Auteur Actif

salut à tous, j'ai un programme xdp en mode natif qui droppe des paquets sur une carte mellanox connectx-5 (driver mlx5_core) alors qu'il marche nickel sur une intel i210 (driver igb). mon programme est tout simple il fait juste un xdp_pass après quelques checks. sur la mellanox j'ai genre 10% de drops. la carte est en mode driver pas generic. je comprends pas pourquoi.

SEC("xdp")
int xdp_prog(struct xdp_md *ctx)
{
    void *data_end = (void *)(long)ctx->data_end;
    void *data = (void *)(long)ctx->data;
    struct ethhdr *eth = data;

    if (data + sizeof(struct ethhdr) > data_end)
        return XDP_ABORTED;

    // Quelques checks basiques ici

    return XDP_PASS;
}
22/01/2025 à 22:33

20 commentaires

aremy
Membre Actif
Avatar de aremy
aremy
Membre Actif

C'est un grand classique ça les drivers et le XDP. Mellanox a des spécificités. T'as quelle version du kernel ? Et du iproute2 ? Des fois c'est juste la toolchain qui est pas à jour

23/01/2025 à 17:35
antoine-raymond
Membre Actif
Avatar de antoine-raymond
antoine-raymond
Membre Actif

Regarde ton dmesg pour des erreurs liées à XDP ou mlx5_core. Des fois le driver signale un souci au chargement du programme ou pendant son exécution. Et vérifie le `tc -s qdisc show dev ` si y a des drops sur la queue XDP

24/01/2025 à 15:20
epotier
Auteur Actif
Avatar de epotier
epotier
Auteur Actif

Kernel 5.15.x et iproute2 5.15.0. Le dmesg est propre, rien d'anormal. tc -s qdisc montre des drops sur l'interface Mellanox mais pas l'Intel.

Modifié le 23/05/2026 à 16:20
aremy
Membre Actif
Avatar de aremy
aremy
Membre Actif

C'est pas une question d'offloading activé sur la Mellanox qui interfère ? genre TSO GSO LRO ? Des fois ça peut poser problème avec XDP si le hardware modifie les paquets avant ton prog

26/01/2025 à 10:25
antoine-raymond
Membre Actif
Avatar de antoine-raymond
antoine-raymond
Membre Actif

Ouais désactive tout ce qui est offload via `ethtool -K tso off gso off lro off gro off rxvlan off txvlan off` pour voir si ça change. Ça peut être la cause de certains drops mystérieux

27/01/2025 à 06:56
epotier
Auteur Actif
Avatar de epotier
epotier
Auteur Actif

j'ai désactivé tous les offloads avec ethtool, rebooté et retenté. toujours les 10% de drops sur la Mellanox. Rien côté cpu utilisation non plus.

28/01/2025 à 05:09
aremy
Membre Actif
Avatar de aremy
aremy
Membre Actif

Hmmm ok. Et la taille de tes paquets ? XDP supporte pas les fragments IPv4 ou les paquets avec des options IP complexes nativement. C'est ptete pas ton cas si ton prog est simple mais on sait jamais

29/01/2025 à 03:35
antoine-raymond
Membre Actif
Avatar de antoine-raymond
antoine-raymond
Membre Actif

Si tes paquets sont fragmentés le driver XDP peut refuser de les passer à ton programme. Il faut vérifier ton trafic si tu peux avec wireshark ou tcpdump et chercher les flags de fragmentation.

29/01/2025 à 23:31
epotier
Auteur Actif
Avatar de epotier
epotier
Auteur Actif

mes paquets sont des paquets TCP/IP standard pas de fragmentation. taille max 1500 bytes.

30/01/2025 à 21:26
aremy
Membre Actif
Avatar de aremy
aremy
Membre Actif

T'as vérifié si le programme est bien attaché en mode "driver" et pas "generic" sur les deux cartes ? Le `ip link show dev xdp`

31/01/2025 à 21:12
epotier
Auteur Actif
Avatar de epotier
epotier
Auteur Actif

oui oui c'est bien en mode driver pour les deux.

01/02/2025 à 15:55
antoine-raymond
Membre Actif
Avatar de antoine-raymond
antoine-raymond
Membre Actif

Y a eu des soucis spécifiques avec mlx5_core et XDP sur certaines versions de firmware Mellanox. T'as le dernier firmware à jour sur ta carte ? Ça peut être une incompatibilité basse couche

02/02/2025 à 10:38
epotier
Auteur Actif
Avatar de epotier
epotier
Auteur Actif

ah pas bête j'ai pas checké le firmware de la ConnectX-5. Je vais voir ça.

03/02/2025 à 09:46
aremy
Membre Actif
Avatar de aremy
aremy
Membre Actif

Et aussi, t'as regardé les métriques XDP de la carte via `ip -d link show dev ? il y a des compteurs pour les invalid_descriptors ou bad_headroom` qui peuvent donner des infos

Modifié le 23/05/2026 à 16:20
epotier
Auteur Actif
Avatar de epotier
epotier
Auteur Actif

je viens de vérifier les métriques ip -d link show, j'ai des bad_headroom qui augmentent en même temps que mes drops. c'est quoi ça ?

Modifié le 23/05/2026 à 16:20
antoine-raymond
Membre Actif
Avatar de antoine-raymond
antoine-raymond
Membre Actif

AHA ! bad_headroom c'est quand ton programme XDP essaie de faire un xdp_adjust_headroom ou xdp_adjust_tailroom et qu'il n'y a pas assez de place dans le buffer du driver. Ou que ton programme accède à des données hors des limites du paquet.

Modifié le 23/05/2026 à 16:20
aremy
Membre Actif
Avatar de aremy
aremy
Membre Actif

Ton programme fait un XDP_PASS donc il ne devrait pas toucher à la headroom. Mais si l'initialisation du buffer par le driver Mellanox est plus petite que sur Intel, ton simple data + sizeof(struct ethhdr) > data_end peut être faux si data est déjà trop proche du début du buffer et que le driver n'alloue pas assez de headroom pour les opérations internes ou des métadonnées

Modifié le 23/05/2026 à 16:20
epotier
Auteur Actif
Avatar de epotier
epotier
Auteur Actif

ok donc le driver Mellanox alloue moins de headroom que le driver Intel par défaut. mon programme accède au début du paquet donc y a pas de souci de taille. C'est juste que le driver lui-même pourrait avoir besoin de plus de headroom pour ses propres opérations.

07/02/2025 à 20:59
antoine-raymond
Membre Actif
Avatar de antoine-raymond
antoine-raymond
Membre Actif

exact. essaye de remonter la valeur de XDP_PACKET_HEADROOM si ton code C le permet, ou de recompiler le kernel avec une valeur plus grande pour cette constante. C'est un hack mais ça confirme le problème

Modifié le 23/05/2026 à 16:20
epotier
Auteur Actif
Avatar de epotier
epotier
Auteur Actif

j'ai recompilé le programme XDP avec un xdp_adjust_headroom(ctx, 64); au début pour donner 64 bytes de plus et les drops ont disparu ! c'était bien un problème de headroom par défaut du driver Mellanox pour XDP. merci les gars ça m'a sauvé !

Modifié le 23/05/2026 à 16:20

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