cpu - 测试 XDP 与 DPDK

标签 cpu dpdk ebpf xdp-bpf

我确实对 DPDK 有一些经验,但目前我正在阅读许多关于 XDP 的博客。我试图比较这两种技术并了解 DPDK 和 XDP 之间的差异。这提出了一些问题。我希望有人可以帮助我解决以下问题:

  • 使用 DPDK,我可以将 worker 映射到 CPU 内核并隔离 DPDK 将使用的 CPU 内核。在 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 用户空间不同,带有 eBPF 的 XDP 运行在内核空间中。
    Are all available CPU cores used?答:是的,但通常 irqbalance 或中断固定会将端口的 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%)。

    关于cpu - 测试 XDP 与 DPDK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61666624/

    相关文章:

    docker - 在Docker容器中启动 `pktgen`应用程序时vdev_probe()失败

    bpf - 密件抄送 : ImportError cannot import name BPF

    c++ - 程序没有使用所有 CPU?

    dpdk - DPDK中Reorder Library和IP分片的目的

    hash - 现代计算机可以计算多少个SHA256哈希?

    linux - 不确定如何在启用 RSS 的情况下设置和使用 dpdk-pktgen

    c++ - Ebpf:助手的 undefined symbol

    c - libbpf : Error loading ELF section . BTF:0

    linux - Linux 如何处理阻塞 I/O 进程

    cpu - 硬件虚拟化