20 commentaires
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
Ouais désactive tout ce qui est offload via `ethtool -K
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.
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
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.
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
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.
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
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é !
Laisser une réponse
Vous devez être connecté pour poster un message !
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_passaprès quelques checks. sur la mellanox j'ai genre 10% de drops. la carte est en modedriverpasgeneric. je comprends pas pourquoi.