我的机器上有两个物理NIC。根据这篇文章,似乎dpdk应该能够使用虚拟NIC。
因此,我在Linux中使用以下命令创建了3个虚拟接口,其中,这eno1d1是我的物理NIC的名称。
sudo ifconfig eno1d1:0 10.10.1.107
sudo ifconfig eno1d1:1 10.10.1.207
sudo ifconfig eno1d1:2 10.10.2.107
Run Code Online (Sandbox Code Playgroud)
但是,当我运行dpdk应用程序时,该函数rte_eth_dev_count仍仅返回2。
我需要做什么才能使Dpdk识别虚拟NIC?
这是有关我的DPDK版本的一些信息,该信息记录在应用程序的开头。
Using DPDK version DPDK 16.11.0
DPDK: EAL: Detected 16 lcore(s)
DPDK: EAL: Probing VFIO support...
DPDK: EAL: PCI device 0000:09:00.0 on NUMA socket 0
DPDK: EAL: probe driver: 15b3:1007 net_mlx4
DPDK: PMD: net_mlx4: PCI information matches, using device "mlx4_0" (VF: false)
DPDK: PMD: net_mlx4: 2 port(s) detected
DPDK: PMD: net_mlx4: port 1 MAC address is ec:b1:d7:85:3a:12
DPDK: …Run Code Online (Sandbox Code Playgroud) 克隆dpdk git 存储库并构建helloworld应用程序后,出现以下错误:
$ ./examples/helloworld/build/helloworld
EAL: Detected 4 lcore(s)
EAL: Detected 1 NUMA nodes
EAL: Multi-process socket /run/user/1000/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'VA'
EAL: No available hugepages reported in hugepages-1048576kB
EAL: Probing VFIO support...
EAL: VFIO support initialized
EAL: Couldn't get fd on hugepage file
EAL: error allocating rte services array
EAL: FATAL: rte_service_init() failed
EAL: rte_service_init() failed
PANIC in main():
Cannot init EAL
5: [./examples/helloworld/build/helloworld(+0x11de) [0x56175faac1de]]
4: [/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf3) [0x7f31f60fe0b3]]
3: [./examples/helloworld/build/helloworld(+0x111c) [0x56175faac11c]]
2: [/lib/x86_64-linux-gnu/librte_eal.so.20.0(__rte_panic+0xc5) [0x7f31f62d537e]] …Run Code Online (Sandbox Code Playgroud) 我正在尝试绑定此网卡 I40E:适用于 10GbE 背板 1581 的以太网控制器 X710
我的操作系统是 ubuntu 18.04 内核:4.15.0-74-generic
我使用 dpdk-setup.sh 插入 VFIO 模块。我还将 iommu=on 添加到 grub 文件中。
运行 devbind 命令:
sudo ./dpdk-devbind.py -b vfio-pci 02:00.1
我有这个错误:
错误:0000:02:00.1 绑定失败 - 无法绑定到驱动程序 vfio-pci
dmesg 输出:
[5091.393436]vfio-pci:0000:02:00.1的探测失败,错误-22
互联网界的人们大家好:
不想使用 CI 编写 DPDK 应用程序,而是想使用 C++。有办法这样做吗?
我可能应该提到配置、编译和设置 DPDK 本身以及与之相关的所有内容(绑定 NIC,...)工作得非常好。以及编译和运行示例应用程序以及我自己用 C 编写的应用程序。但是,我想在新的 DPDK 应用程序中使用来自另一个项目的一些我自己的 C++ 类,因此使用 C++ 而不是 C 会非常好。
谢谢。
我下载并构建了 dpdk-stable-16.11.4 版本(使用 x86_64-native-linuxapp-gcc 目标)。我正在运行 Ubuntu 16.04.3 LTS。根据http://dpdk.org/doc/quick-start或http://dpdk.org/doc/guides-16.04/linux_gsg/sys_reqs.html设置大页面后
mkdir -p /mnt/huge
mount -t hugetlbfs nodev /mnt/huge
echo 64 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
Run Code Online (Sandbox Code Playgroud)
我可以很好地看到大页面。
cat /proc/meminfo | grep Huge
HugeAnonHugePages: 284672 kB
ShmemHugePages: 0 kB
HugePages_Total: 64
HugePages_Free: 64
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Run Code Online (Sandbox Code Playgroud)
但是当我运行 helloWorld 示例时,它抱怨没有免费的大页面,请参见下文。
./build/helloworld -l 0-3 -n 2
EAL: Detected 4 lcore(s)
EAL: No free hugepages reported in hugepages-1048576kB
EAL: Probing VFIO support...
hello from core 1
hello from core 2
hello from core …Run Code Online (Sandbox Code Playgroud) 我正在使用 Intel X722 NIC 在 Linux 上使用 DPDK 版本 18.11.8 稳定版本。
如果我在软件中计算 IP 和 UDP 校验和,我的应用程序工作正常,但如果我在硬件中计算,则会出现分段错误。这是我的代码:
local_port_conf.txmode.offloads = local_port_conf.txmode.offloads | DEV_TX_OFFLOAD_IPV4_CKSUM | DEV_TX_OFFLOAD_UDP_CKSUM;
Run Code Online (Sandbox Code Playgroud)
mb->ol_flags |= PKT_TX_IPV4 | PKT_TX_IP_CKSUM | PKT_TX_UDP_CKSUM;
mb->l2_len = sizeof(struct ether_hdr);
mb->l3_len = sizeof(struct ipv4_hdr);
mb->l4_len = sizeof(struct udp_hdr);
p_ip_hdr->hdr_checksum = 0;
p_udp_hdr->dgram_cksum = rte_ipv4_phdr_cksum((const ipv4_hdr*)(mb->l3_len), mb->ol_flags);
Run Code Online (Sandbox Code Playgroud)
rte_ipv4_phdr_cksum() 调用很神秘,我是否理解正确的做法?
可以理解的是,C++编译器给出了警告:
warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
p_udp_hdr->dgram_cksum = rte_ipv4_phdr_cksum((const ipv4_hdr*)(ptMbuf->l3_len), ptMbuf->ol_flags);
^
Run Code Online (Sandbox Code Playgroud)
我的代码有什么问题吗?
当我在valgrind上运行基于DPDK的应用程序时,它无法执行并引发错误
错误:此系统不支持“ RDRAND”。请检查是否正确设置了RTE_MACHINE。
我的CPU支持RDRAND,但仍然抛出相同的错误。为了使valgrind支持我的应用程序正在使用的大页面,我使用了以下valgrind修补版本。 https://github.com/bisdn/valgrind-hugepages.git
我只是想在dpdk中运行helloworld。我收到这个奇怪的错误,但是我执行了设置脚本以及从源代码进行构建的所有步骤,但仍然收到错误:
dpdk@dpdk-vm:~/Desktop/dpdk-stable-17.08.1/examples/helloworld/build$ ./helloworld -c 1 -n 1
EAL: Detected 1 lcore(s)
EAL: Probing VFIO support...
EAL: VFIO support initialized
EAL: Cannot obtain physical addresses: Permission denied. Only vfio will function.
EAL: WARNING: Master core has no memory on local socket!
error allocating rte services array
EAL: FATAL: rte_service_init() failed
EAL: rte_service_init() failed
PANIC in main():
Cannot init EAL
5: [./helloworld(_start+0x2a) [0x5555a79f366a]]
4: [/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf1) [0x7ff3176151c1]]
3: [./helloworld(+0x54f6d) [0x5555a79eef6d]]
2: [./helloworld(__rte_panic+0xbd) [0x5555a79ea467]]
1: [./helloworld(rte_dump_stack+0x2e) [0x5555a7a41a7e]]
Aborted (core dumped)
Run Code Online (Sandbox Code Playgroud)
请让我知道我做错了什么?