Mellanox CX-5网卡支持OVS流表加速功能的调研

奇技 · 指南

本文主要对Mellanox CX-5网卡支持OVS流表加速功能进行了调研,简单介绍了配套软件的版本要求,并描述了整体测试的步骤,另外对其支持VF热迁移也进行了初步的调研,希望对有相同需求的同学有所帮助。

1

背景简介

广泛的业务层需求致使数据中心快速增长,数据流量日益激增,vSwitch会大量占用宿主机计算资源,增加运营成本,虽然可以通过cpu及irq亲和性提高转发性能,但由于性能上的瓶颈,难以满足当前快速增长的高网络带宽应用需求。因此,进一步加速vSwitch势在必行。

2

涉及的技术

1.VT-d

Intel Virtualization Technology for Direct I/O,是对IO的虚拟化技术,在io透传虚拟化中,当一个虚机直接和IO设备对话时,它提供给这个设备的地址是虚机的物理地址(GPA),那么设备拿着这个地址去发起DMA势必会失败。

难点就是DMA的操作如何直接访问宿主机的物理地址,因此,vt-d在芯片组里引入了DMA重映射的硬件,就是IOMMU,负责对DMA的地址做转换(IO页表),也存在IOTLB,vt-d的功能主要包括,IO设备分配、DMA重映射、中断重映射。

2.SR-IOV

sriov技术就是为了解决网卡透传到虚机后,网卡不足的问题,支持水平扩展网卡,一个io设备最多支持256个VF;

PF用来配置和管理sriov,拥有所有的pcie资源;

VF是精简的pcie功能,由PF创建和销毁,拥有独立的pci配置空间,收发队列,中断等,宿主机可以分配一个或者多个VF给虚机使用;

把一个网卡透传到虚机中,其收发流程与宿主机上直接使用一样,主要不同在于地址访问多做了一次地址转换。

3

测试要求

1)开启vf前,安装firmware-tools工具,安装OFED驱动,可去官网下载

https://cn.mellanox.com/products/adapter-software/firmware-tools

https://cn.mellanox.com/products/infiniband-drivers/linux/mlnx_ofed

2)版本要求:

  * Linux Kernel >= 4.13-rc5 (Upstream Kernel)
    >= 3.10.0-860 (RedHat Based Distributions)

 * Mellanox NICs FW
    FW ConnectX-5: >= 16.21.0338

 * iproute >= 4.11

 * upstream openvswitch >= 2.8

 * openstack >= Pike version

 * SR-IOV enabled

3)开启VT-d及iommu

vt-d在bios开启,iommu在cmdline开启

4

主机环境配置步骤
  • 开启sriov:

echo 0 > /sys/class/net/eth0/device/sriov_numvfs 
echo 2 > /sys/class/net/eth0/device/sriov_numvfs 
  • 设置vfmac:

# ip link set eth0 vf 0 mac e4:11:22:33:44:52
# ip link set eth0 vf 1 mac e4:11:22:33:44:53
  • 解绑VF:

echo 0000:04:00.2 > /sys/bus/pci/drivers/mlx5_core/unbind
echo 0000:04:00.3 > /sys/bus/pci/drivers/mlx5_core/unbind
  • 开启OFFLOAD:

echo switchdev > /sys/class/net/eth0/compat/devlink/mode
ethtool -K eth0 hw-tc-offload on

开启offload后会生成,vf representor,一种vport,对于没有硬件流表无法hit的报文,通过vf rep上送ovs处理。

5

OVS操作步骤
  • 安装ovs,测试时使用源码编译安装,版本2.11.0

modprobe openvswitch
ovs-ctl start //启动ovs
ovs-vsctl add-br ovs-sriov 
ovs-vsctl set Open_vSwitch . other_config:hw-offload=true
ovs-vsctl set Open_vSwitch . other_config:tc-policy=skip_sw    ----默认ovs内核及kernel都会下流表,skip是只下硬件
restart ovs
  • 将两个vf rep添加到 ovs 桥

ovs-vsctl add-port ovs-sriov ens3f0_0
ovs-vsctl add-port ovs-sriov ens3f0_1
ip link set dev ens3f0_0 up
ip link set dev ens3f0_1 up
  • 添加vxlan port //如果为vlan环境,则添加vlan tag

//vxlan环境
ovs-vsctl add-port ovs-sriov vxlan0 -- set interface vxlan0 type=vxlan options:local_ip=1.1.1.1 options:remote_ip=1.1.1.2 options:key=98
ovs-vsctl add-port ovs-sriov vxlan0 -- set interface vxlan0 type=vxlan options:local_ip=1.1.1.2 options:remote_ip=1.1.1.1 options:key=98


//vlan环境
ovs-vsctl add-port ovs-sriov eth0
ovs-vsctl add-port ovs-sriov enp26s0f0_0 tag=100
  • 启动虚机前,加载vfio及vfio-pci驱动

modprobe vfio 
modprobe vfio-pci
  • 绑定驱动到vfio:

lspci -ns 0000:1a:00.2    #vf的pci地址
echo 15b3 1018 > /sys/bus/pci/drivers/vfio-pci/new_id
  • 环境变量设置:

export VM_NAME=vhost-vm1
export GUEST_MEM=8192M
export QCOW2_IMAGE=/home/zhailiansen/qemu_image.qcow2
  • 设置虚机的cpu与网卡在同一个socket:

taskset 0xF0 /usr/local/bin/qemu-system-x86_64 -name $VM_NAME -smp 4 -cpu host -enable-kvm \
-m $GUEST_MEM -drive file=$QCOW2_IMAGE --nographic -snapshot \
-device vfio-pci,host=0000:1a:00.2

6

VXLAN环境下测试结果

HOST1流表情况

内核

网卡

HOST2流表情况

内核

网卡

因为报文从硬件直接转发,粗略计算ovs时延,15us,环境纯净,只有ping 包,实际还包含虚机将报文扔给vf时的时间开销,比如DMA时虚机内存地址到宿主机内存地址的转换,以及两台host在交换机查表转发的延时,网卡硬件的查表转发是相当快的,15us不足以体现其性能。

相同环境下对比virtio的延时,拓扑如下图,ovs延时达到113us,vm存在一定流量的情况下,延时上升到几百us,而硬件的延时几乎未有提升。

7

VLAN环境下测试结果

HOST1流表情况

内核

网卡


HOST2流表情况

内核

网卡

8

VF热迁移功能调研

综合现在的软件版本,及环境表现,还不能够支持sriov 的虚机热迁移,下边分析下sriov 热迁移的原理:

1、热迁移使用内核的net_failover设备。

2、net_failover原理

net_failover driver会创建一个net_failover设备,一个failover master netdev去管理一个primary 和 standby slave netdev,primary和standby需提前注册到net_failover。相当于一个failover设备管理两个slave设备。图中vf是 primary 设备, virtio是standby设备,他们具有相同的mac地址,用户通过failover设备访问外网,failover选择primary netdev传输流量。当vf unplug时,数据路径,failover到virtio路线,用于热迁移。qemu需支持 VIRTIO_NET_F_STANDBY 这个virtio_net device的标志位,以便 hypervisor 可以感知到,该virtio设备作为一个vf设备的standby设备。热迁移完成时,需attach一个vf到虚机,这个操作需要libvirt支持,之后vm数据路径切换到vf。

libvit为例,看一下迁移过程:

1、网卡xml配置

# cat vf_xml
<interface type='hostdev' managed='yes'>
  <mac address='52:54:00:00:12:53'/>
  <source>
    <address type='pci' domain='0x0000' bus='0x42' slot='0x02' function='0x5'/>
  </source>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/>
</interface>

2. 迁移步骤

# Source Hypervisor
#!/bin/bash
DOMAIN=fedora27-tap01
PF=enp66s0f0
VF_NUM=5
TAP_IF=tap01
VF_XML=vf_xml
MAC=52:54:00:00:12:53
ZERO_MAC=00:00:00:00:00:00
virsh domif-setlink $DOMAIN $TAP_IF up     --启动virt io设备
bridge fdb del $MAC dev $PF master
virsh detach-device $DOMAIN $VF_XML        --detach掉vf
ip link set $PF vf $VF_NUM mac $ZERO_MAC
virsh migrate --live $DOMAIN qemu+ssh://$REMOTE_HOST/system  ---开始迁移
# Destination Hypervisor
#!/bin/bash
virsh attach-device $DOMAIN $VF_XML                -----attach vf 发设备到虚机
virsh domif-setlink $DOMAIN $TAP_IF down           -----down掉 virtio设备

在目的机器怎么选择VF, 通过在计算节点配置文件,配置 passthrough_whitelist,这里是VF 的列表。

由于目前停留在openstack s版本,一些功能还需要开发支持,以及各个组件版本的配合,如下:

nova要做的事,

1、nova需要组织这两种设备到xml中,传给libvirt启动虚机
2、libvirt需支持参数的解析,传给qemu
3、qemu需支持failover相关功能
4、内核需要支持创建failover设备
5、迁移时需支持plug 及 unplug pci 设备。

neutron:
1、neutron 需要ovs支持添加 vf rep 口到ovs桥,为offload miss添加上送通道。
2、目前 sriov agent只支持vlan,需开发支持vxlan功能,联动ovs 下发流表。目前看到openstack T版已有支持。
3、哪些能下,哪些不能下

  1)支持,vxlan、vlan卸载
  2)不支持路由规则
  3)不支持安全组
  Mellanox CX-5网卡在基于SRIOV加速的场景下,不支持ct_state,导致涉及到ct操作带有ct_state匹配字段的流表均不能通过TC下发到网卡中,这时仍然需要在内核态完成这些操作

  支持这些功能的卸载,需要先转换成流表,这就需要类似ovn的功能加持,这些都需要实际开发中去实现。

各个组件版本要求:
kernel要求:4.18–4.20, 5.0–5.11, 5.12-rc+HEAD(宿主机及虚机内核) 
qemu:stable-4.2   
libvirt:5.3以上     

END

查看历史文章

Kubevirt在360的探索之路(K8S接管虚拟化)
如何提高大规模正则匹配的效能
360Stack裸金属服务器部署实践

360技术公众号

技术干货|一手资讯|精彩活动

扫码关注我们

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Mellanox ConnectX-5是一款高性能网络适配器。它由以色列公司Mellanox Technologies开发,用于数据中心和高性能计算领域。ConnectX-5支持多种网络协议,如以太网、InfiniBand和RoCE,可实现高速数据传输和低延迟通信。 Mellanox ConnectX-5的手册是一本详细介绍该产品特性和使用方法的指导手册。手册内包含了该适配器的硬件和软件配置要求,如操作系统兼容性、驱动程序安装和设置步骤等。手册还介绍了ConnectX-5支持的各种网络协议和功能,如SR-IOV虚拟化、RDMA(远程直接内存访问)和网络流量控制等。 手册还提供了关于如何配置和管理ConnectX-5的详细说明,如IP地址分配、链路聚合和高可用性配置等。此外,手册还介绍了ConnectX-5的性能监控和故障排除方法,以帮助用户快速解决常见问题。 在手册中,还提供了一些基本的示例和最佳实践,以帮助用户充分利用ConnectX-5的功能和性能优势。例如,如何使用ConnectX-5设置低延迟网络环境,或如何实现高带宽的数据传输等。 总之,Mellanox ConnectX-5手册是一本非常有用的指导手册,可以帮助用户了解和使用该高性能网络适配器。通过仔细阅读手册并按照指导进行配置和管理,用户可以更好地利用ConnectX-5的功能,并确保其在数据中心和计算领域的高效运行。 ### 回答2: Mellanox ConnectX-5是一种网络适配器,具有高度的网络性能和可靠性。它支持为数据中心和企业网络提供高速、低延迟和高吞吐量的连接。 Mellanox ConnectX-5手册是该适配器的用户指南,它提供了详细的技术规格和配置信息,帮助用户了解和使用该设备。 手册首先介绍了ConnectX-5的硬件特性,包括适配器类型、端口数量、连接介质等。它还提供了适配器的尺寸、电源需求和散热方案等物理特性。 接下来,手册详细介绍了适配器的功能和性能。它解释了如何配置和管理ConnectX-5适配器,包括安装适配器驱动程序、设置网络连接等。手册还提供了与其他设备和操作系统的兼容性信息,以及如何通过固件升级来获得最新的功能和性能增强。 手册还讨论了ConnectX-5适配器在不同应用场景下的最佳实践。它介绍了如何利用适配器的软件定义网络(SDN)功能来提高网络性能和灵活性。此外,手册还提供了一些示例配置和故障排除指南,帮助用户解决常见问题和优化适配器的性能。 总之,Mellanox ConnectX-5手册是一本详细的用户指南,提供了关于该适配器的全面信息。无论是初次使用适配器还是需要进一步了解和优化性能,用户都可以通过阅读手册来掌握ConnectX-5适配器的使用和配置。 ### 回答3: Mellanox ConnectX-5是一款高性能网络适配器,该手册提供了详细的配置和使用说明。 在手册中,首先介绍了Mellanox ConnectX-5的基本特性和硬件规格。它支持最新的以太网标准,包括10、25、40、50和100 Gbps,以及RoCE(RDMA over Converged Ethernet)和InfiniBand技术。它还具有低延迟、高带宽和高吞吐量的特点,适用于各种高性能计算和数据中心应用。 手册中还包含了详细的安装和配置步骤,以确保正确地安装和连接ConnectX-5网卡。它介绍了物理安装过程、驱动程序的安装和更新,以及各种操作系统的兼容性。此外,手册还提供了详细的网络设置和优化建议,以确保获得最佳的性能和可靠性。 对于网络管理员和系统管理员来说,这个手册还包含了各种管理和监控ConnectX-5的工具和功能。它介绍了如何配置和管理网卡,以及如何使用性能监控工具来诊断和解决网络问题。此外,手册还提供了各种故障排除和疑难解答的方法,以帮助用户解决常见的网络连接问题。 总之,Mellanox ConnectX-5手册是ConnectX-5用户的必备参考资料。它提供了全面而易于理解的信息,帮助用户正确地安装、配置和管理ConnectX-5网卡,以获得最佳的网络性能和可靠性。无论是初学者还是有经验的用户,都可以从这本手册中获得有关ConnectX-5的重要知识。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值