这是关于让多个进程打开绑定到不同队列的 XDP 套接字的方法。刚刚开始阅读和研究多进程解决方案。
(excerpt from https://marc.info/?l=xdp-newbies&m=158399973616672&w=2)
hw_q0, hw_q1, hw_q2,
xsk_q0_0, xsk_q1_0, xsk_q2_0,
我创建了一个具有 16 个队列并使用 tcpreplay 抽取数据包的伪 netdev。流程如下。
tcprelay -> lo -> 驱动程序(rx_handler) -> ps-dev[XDP] -> XDP_REDIRECT -> APP。
APP创建了一个XDP套接字并将其附加到队列1。XDP正在接收ctx->rx_queue_index为0的数据包。调用 bpf_redirect_map(&xsks_map, 1, XDP_ABORTED);
没有错误,因为xsks_map中有一个索引为1的套接字。但我没有看到APP上的任何数据。
如果 APP 打开 XDP 套接字并绑定到队列 0,同样可以正常工作。
假设我很清楚,问题是:
队列上的 XDP 套接字绑定是否与伪 netdev 一起使用?
我们如何让数据包发送到绑定在队列 1 上的 XDP 套接字?
编辑 01
perf 显示以下内容:我想知道为什么xdp_redirect_map
没有看到。
tcpreplay 257463 [000] 109262.955907: xdp:xdp_redirect: prog_id=547 action=REDIRECT ifindex=19 to_ifindex=0 err=0 map_id=382 map_index=0
tcpreplay 257463 [000] 109263.206600: xdp:xdp_redirect: prog_id=547 action=REDIRECT ifindex=19 to_ifindex=0 err=0 map_id=382 map_index=0
tcpreplay 257463 [001] 109263.457411: xdp:xdp_redirect_err: prog_id=547 action=REDIRECT ifindex=19 to_ifindex=0 err=-22 map_id=382 map_index=1
tcpreplay 257463 [001] 109263.706151: xdp:xdp_redirect_err: prog_id=547 action=REDIRECT ifindex=19 to_ifindex=0 err=-22 map_id=382 map_index=1