测试 XDP 与 DPDK
Testing XDP vs DPDK
我确实有一些使用 DPDK 的经验,但目前我正在阅读许多关于 XDP 的博客。我正在尝试比较这两种技术并了解 DPDK 和 XDP 之间的区别。这提出了一些问题。我希望有人可以帮助我解决以下问题:
- 使用 DPDK,我可以将 worker 映射到 CPU 个内核,并隔离 CPU 个将由 DPDK 使用的内核。在 eBPF / XDP 的情况下,使用了哪些 CPU 个内核?是否使用了所有可用的 CPU 内核?是否可以隔离用于 eBPF / XDP 程序的 CPU 个内核?
- 当我测试 DPDK 应用程序的吞吐量时,我能够检查环形缓冲区 (内存池) 是否已满,从而导致数据包丢失。但是如何检查一个eBPF/XDP程序是否因为吞吐量太大而导致丢包呢?我假设当一个 eBPF / XDP 程序花费太多时间来处理一个数据包时,最终你会看到数据包丢失? (尤其是在高速率发送64B包的时候求最大可以发送的包数)
预先感谢您的帮助!
With DPDK I can map workers to CPU cores and isolate CPU cores which will be used by DPDK. In case of eBPF / XDP, which CPU cores are used?
答案:与 DPDK 用户 space.
不同,内核 space 中带有 eBPF 运行s 的 XDP
Are all available CPU cores used?
答:是的,但通常irqbalance或interrupt pinning会将端口的RX队列放到特定的内核上。
Would it be possible to isolate CPU cores meant for eBPF / XDP programs?
答:你指的是KERNEL_CMD_LINE选项isol
,理解不正确。如上所述,您可以将 RX 队列强制中断固定到该内核上的 运行 eBPF XDP。
When I test the throughput from a DPDK application, I'm able to check whether ring buffers (mempools) are full so packets will be lost. But how can I check whether an eBPF / XDP program causes packet drops because the throughput is too high?
答案:您混合使用 NIC 和 eBPF 计数器来实现相同的目的
I assume when an eBPF / XDP program takes too much time to process a packet, eventually, you will see packet drops? (especially when sending 64B packets on a high rate to find the maximum number of packets that can be send)
答:不一定,XDP 的最佳性能是将驱动程序零拷贝到用户空间。 运行 单独核心上的应用程序线程提供与 DPDK 几乎相当的性能(使用 2 * 10Gbps 测试 - DPDK 性能的 95%)。
我确实有一些使用 DPDK 的经验,但目前我正在阅读许多关于 XDP 的博客。我正在尝试比较这两种技术并了解 DPDK 和 XDP 之间的区别。这提出了一些问题。我希望有人可以帮助我解决以下问题:
- 使用 DPDK,我可以将 worker 映射到 CPU 个内核,并隔离 CPU 个将由 DPDK 使用的内核。在 eBPF / XDP 的情况下,使用了哪些 CPU 个内核?是否使用了所有可用的 CPU 内核?是否可以隔离用于 eBPF / XDP 程序的 CPU 个内核?
- 当我测试 DPDK 应用程序的吞吐量时,我能够检查环形缓冲区 (内存池) 是否已满,从而导致数据包丢失。但是如何检查一个eBPF/XDP程序是否因为吞吐量太大而导致丢包呢?我假设当一个 eBPF / XDP 程序花费太多时间来处理一个数据包时,最终你会看到数据包丢失? (尤其是在高速率发送64B包的时候求最大可以发送的包数)
预先感谢您的帮助!
With DPDK I can map workers to CPU cores and isolate CPU cores which will be used by DPDK. In case of eBPF / XDP, which CPU cores are used?
答案:与 DPDK 用户 space.
Are all available CPU cores used?
答:是的,但通常irqbalance或interrupt pinning会将端口的RX队列放到特定的内核上。
Would it be possible to isolate CPU cores meant for eBPF / XDP programs?
答:你指的是KERNEL_CMD_LINE选项isol
,理解不正确。如上所述,您可以将 RX 队列强制中断固定到该内核上的 运行 eBPF XDP。
When I test the throughput from a DPDK application, I'm able to check whether ring buffers (mempools) are full so packets will be lost. But how can I check whether an eBPF / XDP program causes packet drops because the throughput is too high?
答案:您混合使用 NIC 和 eBPF 计数器来实现相同的目的
I assume when an eBPF / XDP program takes too much time to process a packet, eventually, you will see packet drops? (especially when sending 64B packets on a high rate to find the maximum number of packets that can be send)
答:不一定,XDP 的最佳性能是将驱动程序零拷贝到用户空间。 运行 单独核心上的应用程序线程提供与 DPDK 几乎相当的性能(使用 2 * 10Gbps 测试 - DPDK 性能的 95%)。