[英]How can I get dpdk to recognize a NIC virtualized by Linux?
我的機器上有兩個物理網卡。 根據這篇文章 ,似乎dpdk應該能夠使用虛擬網卡。
因此,我在Linux中使用以下命令創建了3個虛擬接口,其中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)
eno1d1:0鏈接封裝:以太網HWaddr ec:b1:d7:85:1a:13
那些不是虛擬NIC,那些是網絡別名,即不同的Linux內核netdev
引用同一個NIC。 由於DPDK不使用Linux內核,因此我們無法使用這些別名來運行DPDK應用程序。
盡管如此,我們幾乎沒有選擇在不使用物理網卡的情況下運行DPDK應用程序:
有關更多信息,請查看仿真Virtio NIC的DPDK輪詢模式驅動程序 。
num_vfs
傳遞給MLX4內核模塊驅動程序 。 vfio-pci
有關更多信息,請查看DPDK MLX4輪詢模式驅動程序以及如何為ConnectX-3配置SR-IOV
有關SR-IOV的一般說明,您可能會發現有用的DPDK Intel虛擬功能驅動程序 。 請注意,Mellanox內核模塊的配置略有不同,您應該使用上面鏈接中描述的num_vfs
。
libpcap
支持編譯DPDK。 像往常一樣運行DPDK應用程序,但是傳遞幾個--vdev
參數來創建很少的虛擬設備,例如:
testpmd -l 0-3 -n 4 \\ --vdev'net_pcap0,iface = tun0' - vdev'net_pcap1,iface = tun1'...
有關更多信息,請查看DPDK libpcap輪詢模式驅動程序 。
希望其中一個選項能滿足您的需求。
你不是在談論相同類型的虛擬網卡。 該帖子指的是虛擬機的NIC (例如,virtio或模擬的e1000),而您嘗試在Linux虛擬NIC上偵聽DPDK。
在那篇文章中,Zhandos Zhylkaidar只是說你可以在虛擬機中運行DPDK,在這種情況下,DPDK看到的NIC不一定是物理網卡。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.