网卡的 TX/RX 缓冲区中的数据如何传输到 dpdk 环形缓冲区而不是内核环形缓冲区
How is the data in TX/RX buffer of NIC is transferred to dpdk ring buffer rather than kernel ring buffer?
我想知道dpdk是如何绕过内核的。用户空间应用程序如何访问 NIC 空间。dpdk 使用什么工具来访问网卡?我知道,dpdk 使用 uio_pci_generic 或 igb_uio 或 vfio-pci 驱动程序。它如何连接到 NIC 空间。轮询模式驱动程序如何知道在哪里轮询?
我知道网卡的 RX 被重定向到 dpdk 环形缓冲区而不是内核环形缓冲区。
DPDK 使用 uio_pci_generic 或 igb_uio 或 VFIO-PCI
这正是 DPDK 连接到 NIC 的方式 - 通过将兼容 DPDK 的驱动程序绑定到 NIC PCI 地址(在大多数情况下,例如使用 Mellanox,使用 RDMA(。好吧,实际上,您必须绑定驱动程序。
然后,正如您所说,DPDK 将 NIC 缓冲区映射到用户空间内存(大页(,并通过 PCI 与 NIC 接口,直接"对话"到寄存器。
如果你想更深入地了解架构,我认为这些幻灯片做得很好。
相关文章:
- C++字符*缓冲区的大小
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- ostream过载时的缓冲区冲洗
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- Xaudio2在更改缓冲区或循环时弹出声音
- 为什么我在leetcode上收到AddressSanitizer:地址0x602000000058上的堆缓冲区溢出错误
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)
- 多线程双缓冲区
- Android P-9.0.0_r53 Logcat主缓冲区超出定义大小
- 套接字读取后,我在缓冲区中看到意外输入
- std::带有自定义缓冲区的 iostream 不允许我写入
- 从返回的顶点缓冲区查询顶点结构
- Vulkan 中的动态顶点缓冲区格式设置
- OpenGL 16 位模板缓冲区?
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 在 openGL 中多次绑定缓冲区
- struct.error:解压缩 C++ 结构时,解包需要 288 字节的缓冲区
- 网卡的 TX/RX 缓冲区中的数据如何传输到 dpdk 环形缓冲区而不是内核环形缓冲区