如何让dpdk识别Linux虚拟化的网卡?

时间:2018-04-22 06:48:02

标签: linux networking virtualization nic dpdk

我的机器上有两个物理网卡。 基于this post,似乎dpdk应该能够使用虚拟NIC。

因此,我在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)

2 个答案:

答案 0 :(得分:4)

  

eno1d1:0链接封装:以太网HWaddr ec:b1:d7:85:1a:13

那些不是虚拟网卡,它们是网络别名,即引用同一网卡的不同Linux内核netdev。由于DPDK不使用Linux内核,因此我们无法使用这些别名来运行DPDK应用程序。

尽管如此,我们几乎没有选择在不使用物理网卡的情况下运行DPDK应用程序:

在虚拟机中运行DPDK

  1. 根据需要运行具有任意数量NIC的虚拟机。
  2. 在虚拟机内部,将网卡绑定到UIO。
  3. 在虚拟机内部,运行DPDK,它应该可以正常使用虚拟机内的网卡。
  4. 有关详细信息,请查看DPDK Poll Mode Driver for Emulated Virtio NIC

    使用NIC虚拟功能:

    1. 在主机上配置SR-IOV支持。
    2. 在主机网卡passing num_vfs to the MLX4 kernel module driver上配置少量虚拟功能。
    3. 在主机上,将少数NIV虚拟函数绑定到vfio-pci
    4. 在主机上,运行DPDK,它应该可以正常使用NIC虚拟功能。
    5. 有关详细信息,请查看DPDK MLX4 Poll Mode DriverHowTo Configure SR-IOV for ConnectX-3

      对于SR-IOV的一般描述,您可能会发现有用的DPDK Intel Virtual Function Driver。请注意,Mellanox内核模块的配置略有不同,您应该使用上面链接中描述的num_vfs

      使用DPDK虚拟设备

      1. 使用libpcap支持编译DPDK。
      2. 配置主机以照常运行DPDK应用程序(即启用大页面等)。
      3. 不要将任何网卡绑定到UIO。
      4. 创建几个TUN / TAP接口,将它们与物理网卡桥接。
      5. 照常运行DPDK应用程序,但传递少量--vdev个参数以创建少量虚拟设备,例如:

        testpmd -l 0-3 -n 4 \ --vdev'net_pcap0,iface = tun0' - vdev'net_pcap1,iface = tun1'...

      6. 有关详细信息,请查看DPDK libpcap Poll Mode Driver

        希望其中一个选项能满足您的需求。

答案 1 :(得分:0)

您不是在谈论相同类型的虚拟网卡。 That post指的是虚拟机的网卡(例如,virtio或仿真的e1000),而您尝试在 Linux虚拟网卡上侦听DPDK。

在那篇文章中,Zhandos Zhylkaidar只是说你可以在虚拟机中运行DPDK,在这种情况下,网卡DPDK认为不一定是物理网卡。