2

为什么套接字SO_TIMESTAMP不支持设置?AF_XDP我的驱动程序的用户手册 ( mlnx 5.0) 指出

根据 PCI 缓冲区中的拥塞情况,传入的数据包在它们被分发到 PCI 之前被打上时间戳。

据我所知,before distributed on the PCI这意味着(还)没有涉及 Linux 内核 - 对吧?

我试过这样设置:

int timestamp = SOF_TIMESTAMPING_RX_HARDWARE;
if(setsockopt(xsk_socket__fd(xsk_socket->xsk), SOL_XDP, SO_TIMESTAMP, (int*)&timestamp, sizeof(int)) < 0) {
    fprintf(stderr, "Failed to set `SO_TIMESTAMP`: %s\n", strerror(errno));
    return;
}

并得到:

设置失败SO_TIMESTAMP:协议不可用

SO_XDP我从xsk.chttps://github.com/libbpf/libbpf/blob/master/src/xsk.c)复制了定义:

#ifndef SOL_XDP
 #define SOL_XDP 283
#endif

不明白,为什么不支持。。。

4

1 回答 1

1

没有技术原因说明为什么它没有被实施。

确实,它看起来像是在 xdp 开发团队的待办事项清单上。

从这里引用:

重要的中期任务

...

来自硬件的元数据

有各种硬件元数据项可用于 XDP 程序访问,以减少 eBPF 中需要发生的处理量。这些包括:

  • 校验和
  • 哈希值
  • 流量代号
  • 更高级别的协议头偏移量
  • 时间戳

看起来这是自 2019 年 6 月以来的待办事项,所以它可能没有最高优先级,否则它已经实施了。

于 2020-03-09T09:03:20.940 回答