i4box’s Blog

What, Why, How ?

Sriov + Dpdk测试

简介

SRIOV是一种虚拟化硬件加速方案,支持SRIOV功能的网卡,可以从一个物理端口(PF),新虚拟出多个虚拟端口(VF),每个VF具有独享的PCI配置区域,与其他VF共享相同的物理资源或物理网口; 从逻辑上可以认为开启SR-IOV后的物理网卡内置了一个定制的Switch将所有的PF和VF口连接起来,通过VF和PF的mac地址以及vlanid来进行数据包分发。

  1. 入方向(从外部进入网卡)上,数据包分发机制是:如果数据包的目的mac地址和vlanid都匹配某一个VF,那么数据包会分发到该VF,否则数据包会进入PF;如果数据包的目的mac地址是广播地址,那么数据包会在同一个vlan内广播(即所有vlanid=数据包vlanid的VF,都会收到该数据包)。
  2. 出方向(从PF或者VF发出)上:如果数据包的mac地址不匹配同一vlan内的任何端口(VF或PF),那么数据包会向网卡外部转发,否则会直接转发给对应的端口;如果数据包的mac地址为广播地址,那么数据包会在同一个vlan内以及向网卡外部广播。 注:所有未设置vlanid的VF和PF,可以认为是在同一个“vlan”中,不带vlan的数据包在该“vlan”中按照上述规则进行处理 参考: http://www.jianshu.com/p/9bf690956d7d

开启SRIOV

  1. 确定网卡是否支持SRIOV特性,像Intel的X722、X710、82599都是支持的;
  2. BIOS中开启SRIOV特性,大部分服务器默认开启;

配置SRIOV

测试环境:CentOS7.3 内核:3.10 网卡:Intel X710

开启两个PF(enp95s0f1是网卡名)
echo 2 > /sys/class/net/enp95s0f1/device/sriov_numvfs

查看该网卡最多支持配置的VF个数
cat /sys/class/net/enp95s0f1/device/sriov_totalvfs

配置完成之后,查看分出来的VF网卡

ip link show

ip link show

SRIOV + DPDK

  1. 将网卡绑定到dpdk igb_uio驱动

    ./dpdk-devbind.py –bind=igb_uio 0000:5f:00.1

  2. 配置SRIOV,分出VF

    echo 2 > /sys/bus/pci/devices/0000:5f:00.1/max_vfs

  3. 将网卡PF面挂到OVS

    ovs-vsctl –timeout 10 add-port br-phy dpdk0 – set Interface dpdk0 type=dpdk options:dpdk-devargs=0000:5f:00.1

此时,OVS可以通过该网卡DPDK + PF面进行通信,分离出的VF网卡可以用于直接透传给虚机使用,或其他用途,如分给存储面用。

网卡bond

目标:将2张10G网卡通过SRIOV切分出PF面和VF面,PF面bond,通过dpdk挂载到ovs,做为数据面用,VF网卡用于虚机透传和存储。

  1. 两张网卡都通过上面的步骤,挂到dpdk的igb_uio驱动,分出VF面;

  2. 将两个PF面bond到ovs上

    ovs-vsctl add-bond br-phy dpdkbond p0 p1 – set Interface p0 type=dpdk options:dpdk-devargs=0000:5f:00.0 – set Interface p1 type=dpdk options:dpdk-devargs=0000:5f:00.1

  3. 设置bond模式

    ovs-vsctl set port dpdkbond bond_mode=balance-slb

参考

http://blog.51cto.com/maomaostyle/1439651
http://www.jianshu.com/p/9bf690956d7d
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux_openstack_platform/7/html/director_installation_and_usage/app-bonding_options