为什么DPDK+mellanox connectx5处理128B数据包的速度比其他大小的数据包快得多,当毁坏一个I/O密集型的应用程序时?
对于我的测量值,有两台机器,一台作为客户端节点(Haswell),另一台作为服务器节点(Skylake),两个都带有NIC,Mellanox Connect5.客户端以高速率(GPP)将数据包发送到服务器,并提供一个简单的应用程序-L2转发,在服务器节点上使用4096 RX描述符运行.我发送了许多尺寸的数据包(64b,128b,256b,512b,1024b,1500b),但是我得到了一个有趣的结果. 当我发送128B数据包时,延迟(LAT99和LAT-AVG)都比其他尺寸数据包好得多. 下面有我的测量结果: 数据包大小 吞吐量 pps lat99 latavg 64b 14772199568.1 20983238.0228 372.75 333.28 128B 22698652659.5 18666655.1476 51.25 32.92 256B 27318589720 12195798.9821 494.75 471.065822332 512B 4986709
2 2023-12-15
编程技术问答社区
在 SR-IOV 虚拟功能 (VF) 网卡之间转发数据包
我有一个支持英特尔SR-IOV的Intel 82599ES 10G NIC.我已经成功创建了8个虚拟函数(VF),并分配给2个QEMU/KVM VM(每个VM 2 VF).两种VM都使用分配的VF运行DPDK应用程序(一个和我的自定义应用程序).我需要做的是通过使用warp17通过它发送流量来测试我的自定义DPDK应用程序.我的测试设置看起来像这样, 红色箭头代表交通路径. 我的物理NIC(PF)使用DPDK轮询模式驱动程序(IGB_UIO).我需要做的是如红色箭头所示,在VF之间路由流量.我认为 解决方案 X710 fortville和ninatic 82599ES ASIC都没有内部桥接或转发VERB或feature.最好的选择是拥有SPP,OVS-DPDK或自定义应用程序的软件虚拟开关,以通过virtio或tap. . 如果您仍然要使用物理NIC或X710或82599,则需要在另一端具有连接并运行逻辑以将数据包定向到相关VF(修改DST MAC). edit-1
4 2023-11-19
编程技术问答社区
无法通过 virtio 使用 testpmd 向 qemu 进程中的虚拟机发送 pkts
我正在尝试测试vhost-user/virtio-net.我使用TestPMD将PKT(以TXonly模式)发送到QEMU VM.但是所有PKT均通过TestPMD显示.这是我的环境: DPDK version: 19.08 (HOST) Hugepagesize=1GB Hugepages=16 # testpmd cmd testpmd -l 0-3 -n 4 --socket-mem 1024 --vdev 'net_vhost0,iface=/tmp/sock0,queues=1' -- -i # qemu cmd qemu-system-x86_64 /opt/vm/centos/vm.img \ -cpu qemu64,+ssse3,+sse4.1,+sse4.2 \ --enable-kvm \ --nographic -vnc :0 \ -smp 4 \ -m 4096 -mem
0 2023-11-19
编程技术问答社区
Mellanox ConnectX-5和DPDK在rxonly模式下的奇特行为
最近,我观察到Mellanox Connectx-5 100 Gbps NIC的特殊行为.在使用DPDK rxonly模式下在100 Gbps rxonly上工作时.据观察,我能够使用12个队列接收142 MPP.然而,有11个队列,只有96 MPP,有10个队列94 MPP,92 MPPs.谁能解释为什么捕获性能从11个队列到12个队列突然/突然跳跃? 设置的详细信息如下. 我已经将两个服务器背对背连接.其中一个(Server-1)用于流量生成,另一个(Server-2)用于交通接收.在这两个服务器中,我都使用Mellanox Connectx-5 NIC. 这两个服务器都是相同的配置. 服务器配置 处理器:英特尔Xeon可伸缩处理器,6148系列,20核HT,2.4 GHz,27.5 L3 CACHE 不.处理器:4号 RAM:256 GB,2666 MHz速度 使用的DPDK版本是DPDK-199.11,OS是RHEL-8.0 使用-forw
10 2023-06-30
编程技术问答社区
Connectx-5 DPDK性能降解时,启用巨型,散射和多SEG
我正在使用ConnectX-5 nic. 我有一个DPDK的应用程序,我想支持jumbo packets. 为此,我添加了RX卸载功能:DEV_RX_OFFLOAD_JUMBO_FRAME,DEV_RX_OFFLOAD_SCATTER 和TX卸载功能:DEV_TX_OFFLOAD_MULTI_SEGS 我也使max_rx_pkt_len更高,因此它将接受巨型数据包(9k). 我注意到添加这些卸载功能 +增加max_rx_pkt_len危害性能. 例如,没有那些卸载标志,我可以重定向80Gbps大小512的数据包,而无需任何掉落. 使用这些标志将~55Gbps降低而不会损失. 我正在使用DPDK 19.11.6. 目前在此测试中,我不发送巨型数据包.我只想了解它如何影响平均数据包大小. 这是期望的吗?使用这些卸载标志应该降低性能? 谢谢 - 编辑 - 端口配置: const struct rte_eth_conf port_conf = {
40 2023-05-02
编程技术问答社区
如何在一个基于dpdk的应用程序中启用调试模式?
运行基于DPDK的应用程序时会遇到一些错误.我发现当DPDK库提供的调用rte_eth_dev_configure()函数时,会发生错误.错误代码为-22.但是,我希望该应用程序显示更多的调试信息,以便我可以快速关注错误部分. 我做了RTFM并修改了$RTE_SDK/build/.config.我把RTE_LIBRTE_ETHDEV_DEBUG变成y.但这无效. rte_vlog()功能放在哪里放置日志消息? 您想帮助我吗?任何建议都将被赞赏! 解决方案 您还应该更改默认日志级别,否则所有调试消息将在编译期间编译,即: RTE_LOG_LEVEL=RTE_LOG_DEBUG RTE_LIBRTE_ETHDEV_DEBUG=y 请看一下EXTRA_CFLAGS.您可能还需要添加调试符号和禁用优化,即: make EXTRA_CFLAGS="-O0 -g" ... 其他解决方案 i将CONFIG_ RTE_LIBRTE_ETHDEV_DEBUG=y添
66 2023-04-22
编程技术问答社区
用DPDK对FPGA进行编程
我面临一个问题:需要创建一个简单的防火墙来直接在FPGA上切割不需要的数据包.基本上,这个想法是拥有一个带有规则的共享表.该表旨在从FPGA访问以检查是否通过数据包,并由用户空间的应用程序填充. 我听说了可以处理数据包处理的DPDK项目.但是我找不到任何信息如何使其在FPGA上工作.是否可以?是否有关于解决问题的建议? 解决方案 DPDK库不会将任何RTL图像包装为参考代码.在当前情况下,在内联或lookaside模式下没有防火墙RTL图像. 使用以太网使用内联FPGA的几个FPGA变体是Intel N3000,其中包含Intel Arria 10和Fortville X710和Intel Arkville Data Mover.链接在DPDK峰会上的链接是 https://www.bittware.com/fpga/arkville/.虽然DPDK IFPGA RAW pmd允许从设备管理和RX-TX数据包.链接 .html . 因此,有DPDK为防火墙创建F
16 2023-04-22
编程技术问答社区
如何在虚拟机中运行Intel DPDK应用程序?
任何人都设法在虚拟机中运行基于Intel DPDK的应用程序? 我有一个基于DPDK的应用程序,我正在尝试在VirtualBox中提出. 英特尔在其文档中提到了paravirtalization的网络接口,但我找不到与虚拟机兼容性相关的任何特定说明. 该应用程序失败了以下错误: EAL: coremask set to 3 EAL: 0 hugepages of size 2097152 reserved, but no mounted hugetlbfs found for that size PANIC in rte_eal_init(): Cannot get hugepage information 解决方案 适合虚拟化的驱动程序是: e1000 igbvf ixgbevf virtio-net vmxnet3 在VirtualBox中,您应该首先使用基本的E1000设备尝试. 关于您的问题"没有安装的hugetlbfs",
18 2023-04-21
编程技术问答社区
你能以非root用户身份在非特权容器中运行DPDK吗?
我正在尝试在非私有码头容器中运行DPDK.虽然我可以限制容器的特权并将容器指定为非特权,但我仍然需要运行DPDK应用程序(例如TestPMD)作为root.我还可以将容器运行为非根管,然后使用sudo启动testpmd. 我想知道是否有人能够在Docker容器内运行DPDK(无需 - 不可能的选项)作为非root用户.如果是这样,是否需要授予某些特权或权限? 更新: 我正在使用DPDK 20.02.我认为我已经将问题范围缩小到Ulimit -L设置. 来自TestPMD: EAL:无法设置DMA重新映射,错误12(无法分配内存) 来自DMESG DMESG:[5697911.199003] VFIO_PIN_PAGES_REMOTE:RLIMIT_MEMLOCK(65536)超过. 响应VIPIN: 您是否需要调整容器的限制?如果是这样? 我正在使用Helm来部署PODS,因此我不确定是否可以修改Docker Run命令,看来我需要在主机和Redep
30 2023-04-18
编程技术问答社区
如何将两个docker容器连接到openvswitch+DPDK上
我正在尝试使用连接到OVS(OpenVswitch)和Ubuntu 18.04(VMware Workstation)上连接到OVS(OpenVswitch)和DPDK的IPERF3(任何吞吐量测试程序应用程序)之间的两个Docker容器之间的吞吐量.这样做的目的是比较在某些情况下OVS-DPDK与Linux内核的性能. 我找不到适当的解决方案,该解决方案解释了如何将OVS+DPDK连接到Docker容器,以便容器可以将TCP/UDP流量传递给对方. 我感谢您的帮助,解释如何将两个Docker容器与OVS+DPDK连接.需要在Docker容器中进行的配置,以及需要在主机OS中完成的配置. 顺便说一句,我没有外部流量. 谢谢 编辑 DPDK版本为20.11.0 OVS版本是2.15.90 这是我采取的步骤: 我使用APT安装DPDK:sudo apt install openvswitch-switch-dpdk 将替代方案设置为:s
64 2023-04-18
编程技术问答社区
英特尔 DPDK 编译错误
我在Fedora上编译Intel DPDK时遇到问题,我真的需要. 这是我在终端中的所示: [gois@localhost dpdk-1.5.2r1]$ make install T=i686-default-linuxapp-gcc ================== Installing i686-default-linuxapp-gcc == Build scripts == Build scripts/testhost == Build lib == Build lib/librte_eal == Build lib/librte_eal/common == Build lib/librte_eal/linuxapp == Build lib/librte_eal/linuxapp/igb_uio make: *** /lib/modules/3.11.10-301.fc20.x86_64/build: File or directory not found. S
42 2023-03-18
编程技术问答社区
构建igb_uio时DPDK编译错误
我正在尝试在KVM下运行的CENTOS 6.4 VM中测试DPDK示例应用程序,但我无法让DPDK编译. 尝试运行 make install T=x86_64-default-linuxapp-gcc -n 来自DPDK-2.0.0,我得到以下输出: [...] make S=lib/librte_eal/linuxapp -f /home/dpdk-1.6.0r2/lib/librte_eal/linuxapp/Makefile -C /home/dpdk-1.6.0r2/x86_64-default-linuxapp-gcc/build/lib/librte_eal/linuxapp all [ -d /home/dpdk-1.6.0r2/x86_64-default-linuxapp-gcc/build/lib/librte_eal/linuxapp/igb_uio ] || mkdir -p /home/dpdk-1.6.0r2/x86_64-def
112 2023-03-18
编程技术问答社区
如何在构建应用程序时解决dpdk-18.02的 "无有效端口 "问题?
使用dpdk-v18.02构建应用程序并获取错误为"无效端口". 我尝试了dpdk-v19.02,它给出了相同的错误. 这是错误: EAL: Detected 40 lcore(s) EAL: Multi-process socket /var/run/.rte_unix EAL: Probing VFIO support... EAL: PCI device 0000:04:00.0 on NUMA socket 0 EAL: probe driver: 10ee:9038 xnic EAL: Requested device 0000:04:00.0 cannot be used EAL: Error - exiting with code: 1 Cause: Error: no valid ports 端口已经绑定到驱动程序: dpdk/usertools/# python dpdk-devbind.py --bind=igb_uio 04:00
34 2023-02-04
编程技术问答社区
DPDK发送定制的pkt,但未能收到
我正在尝试使用DPDK发送自定义的软件包,但是我发现某些软件包结构将使它无法接收.例如,我定义了这样的包装结构: union my_pkt{ struct hdr{ uint32_t id; uint32_t name_len; uint64_t tsc; uint8_t name[100]; }__attribute__((__packed__)) pkt_hdr; char buff[500]; }; 我运行DPDK的服务器只能接收第一批PKT,但是RTE_ETH_TX_BURST()的返回值显示了更多已发送的软件包. 但是,如果我修改了以下结构: union my_pkt{ struct hdr{ uint32_t id; uint32_t name_len; uint32_t tsc[2];//modify this line
150 2023-02-04
编程技术问答社区
在DPDK 18.11.9中,我们如何才能访问收到的数据包的有效载荷?
我在Ubuntu 18.04上运行dpdk-stable-18.11.9./40/50GBE以太网适配器卡单端口). 我在DPDK SDK中看到了skeleton示例,并且使用rte_eth_rx_burst(port_id,queue_id,pkts_burst, MAX_PKT_BURST) rte_eth_rx_burst(port_id,queue_id,pkts_burst, MAX_PKT_BURST)可以接收数据包的功能.在调试模式中,我可以在pkts_burst中看到属性,但我无法访问Packets Poreload. 如何访问数据包有效载荷?哪些功能帮助我? 解决方案 In order to access a received packet's ethernet payload use DPDK API rte_pktmbuf_mtod( ). for (i = 0; i
60 2023-02-03
编程技术问答社区
在ubuntu 18.04的dpdk和ovs上使用testpmd的问题
我有一个 X520-SR2 10G 网卡,我将使用它创建 2 个使用 dpdk 编译的 OpenvSwitch 虚拟接口(从 ubuntu 18.04 的存储库安装)并使用 testpmd 测试这个虚拟接口,我做以下工作: 创建桥 $ ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev 绑定 dpdk 端口 $ ovs-vsctl add-port br0 dpdk0 -- set Interface dpdk0 type=dpdk options:dpdk-devargs=0000:01:00.0 ofport_request=1 $ ovs-vsctl add-port br0 dpdk1 -- set Interface dpdk1 type=dpdk options:dpdk-devargs=0000:01:00.1 ofport_request=2 创建 dpdkvhostuser 端口 $
330 2022-08-10
编程技术问答社区
当使用DPDK应用程序时,rte_eth_dev_count总是返回0
我的网卡配置如下:- [root@localhost ethtool]# ../../tools/dpdk-devbind.py -s Network devices using DPDK-compatible driver ============================================ 0000:81:00.0 'NetXtreme BCM5722 Gigabit Ethernet PCI Express' drv=igb_uio unused=tg3 Network devices using kernel driver =================================== 0000:02:00.0 '82599ES 10-Gigabit SFI/SFP+ Network Connection' if=ens513f0 drv=ixgbe unused=igb_uio 0000:02:00.1 '82599ES 10-Gigabit
1500 2022-08-10
编程技术问答社区
DPDK是否需要1个以上的网卡?
我对 DPDK 完全陌生,有一些我自己无法弄清楚的奇怪问题. DPDK 在我的物理设备上是否需要 1 个以上的 NIC?我看到一些例子(l2fwd,l3fwd)需要2个网卡,一个用于接收数据包,另一个用于传输数据包. 由于 DPDK 控制了 NIC,如果我将唯一的 NIC 绑定到 DPDK,我是否仍然可以正常访问 Internet?我的意思是做一些普通的事情,比如用 Firefox 上网. 绑定网卡后,只有DPDK应用可以访问这些网卡,还是有什么普通应用可以访问的方法? 这几天我一直对这些问题感到困惑.请净化我的心灵. 提前致谢:) 解决方案 这取决于应用程序.对于 l2fwd,是的,您需要 1 个以上的 NIC.但是,它们不必是物理的.您可以使用 VmWare 或 VirtualBox 创建虚拟 NIC. 如果将 NIC 绑定到 DPDK,您将无法上网. 我认为没有其他办法. 对于开发,您可以设置一个虚拟机,有 2 个虚拟 NIC 供 DPDK
160 2022-08-10
编程技术问答社区