我的机器上有两个物理网卡。
基于 this post ,似乎 dpdk 应该能够使用虚拟网卡。
因此,我在 Linux 中使用以下命令创建了 3 个虚拟接口(interface),其中 eno1d1
是我的物理网卡的名称。
sudo ifconfig eno1d1:0 10.10.1.107
sudo ifconfig eno1d1:1 10.10.1.207
sudo ifconfig eno1d1:2 10.10.2.107
但是,当我运行我的 dpdk 应用程序时,函数
rte_eth_dev_count
仍然只返回 2。我需要做什么才能让 Dpdk 识别虚拟网卡?
这是关于我的 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: PMD: net_mlx4: port 2 MAC address is ec:b1:d7:85:3a:13
DPDK: PMD: net_mlx4: 0xae6000: TX queues number update: 0 -> 1
DPDK: PMD: net_mlx4: 0xae6000: RX queues number update: 0 -> 1
这是我机器上的输出
ifconfig
。eno1 Link encap:Ethernet HWaddr ec:b1:d7:85:1a:12
inet addr:128.110.153.148 Bcast:128.110.155.255 Mask:255.255.252.0
inet6 addr: fe80::eeb1:d7ff:fe85:1a12/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:15241610 errors:0 dropped:0 overruns:0 frame:0
TX packets:11238825 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4530541723 (4.5 GB) TX bytes:8168066799 (8.1 GB)
eno1d1 Link encap:Ethernet HWaddr ec:b1:d7:85:1a:13
inet addr:10.10.1.7 Bcast:10.10.1.255 Mask:255.255.255.0
inet6 addr: fe80::eeb1:d7ff:fe85:1a13/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3787661978 errors:0 dropped:66084 overruns:0 frame:0
TX packets:4758273664 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1905977969665 (1.9 TB) TX bytes:3897938668285 (3.8 TB)
eno1d1:0 Link encap:Ethernet HWaddr ec:b1:d7:85:1a:13
inet addr:10.10.1.107 Bcast:10.255.255.255 Mask:255.0.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
eno1d1:1 Link encap:Ethernet HWaddr ec:b1:d7:85:1a:13
inet addr:10.10.1.207 Bcast:10.255.255.255 Mask:255.0.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
eno1d1:2 Link encap:Ethernet HWaddr ec:b1:d7:85:1a:13
inet addr:10.10.2.107 Bcast:10.255.255.255 Mask:255.0.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:62313 errors:0 dropped:0 overruns:0 frame:0
TX packets:62313 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:3557508 (3.5 MB) TX bytes:3557508 (3.5 MB)
最佳答案
那些不是虚拟网卡,那些是网络别名,即不同的 Linux 内核 netdev
s 指的是同一个网卡。由于 DPDK 不使用 Linux 内核,我们不能使用这些别名来运行 DPDK 应用程序。
尽管如此,我们在不使用物理网卡的情况下运行 DPDK 应用程序的选择很少:
在虚拟机中运行 DPDK
有关更多信息,请查看 DPDK Poll Mode Driver for Emulated Virtio NIC 。
使用 NIC 虚拟功能:
num_vfs
to the MLX4 kernel module driver 上配置一些虚拟功能。 vfio-pci
有关更多信息,请查看 DPDK MLX4 Poll Mode Driver 和 to HowTo Configure SR-IOV for ConnectX-3
对于 SR-IOV 的一般描述,您可能会发现有用的 DPDK Intel Virtual Function Driver 。请注意,Mellanox 内核模块的配置略有不同,您应该使用上面链接中描述的
num_vfs
。使用 DPDK 虚拟设备
libpcap
支持编译 DPDK。 --vdev
参数来创建少量虚拟设备,例如:testpmd -l 0-3 -n 4\
--vdev 'net_pcap0,iface=tun0' --vdev 'net_pcap1,iface=tun1' ...
有关更多信息,请查看 DPDK libpcap Poll Mode Driver 。
希望这些选项之一能满足您的需求。
关于linux - 如何让 dpdk 识别由 Linux 虚拟化的网卡?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49963311/