Mellanox CX6设置SR-IOV模式

Mellanox CX6设置SR-IOV模式

1.背景

主机系统:rocky8.7

虚拟机系统:rocky8.7

网卡类型:Mellanox CX6-DX

2.主机环境配置

1)关闭防火墙、selinux

systemctl stop firewalld // 临时关闭防火墙
systemctl start firewalld // 临时开启防火墙
systemctl disable firewalld // 永久关闭防火墙
systemctl enable firewalld // 开启防火墙
vim /etc/selinux/config
SELINUX=disabled  // 关闭selinux

2)开启iommu(SR-IOV)、内存大页

vim /etc/default/grub
//找到GRUB_CMDLINE_LINUX行双引号后面添加如下内容
intel_iommu=on iommu=pt pci=assign-busses pci=realloc 
// 开启大页
default_hugepagesz=1G hugepagesz=1G hugepages=64
// 重新加载这个文件。这一步骤需要根据系统进行调整
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

// 查看是否开启内存大页(开启内存1.为了提高性能;2.mlx网卡启动vdpa或者dpdk均需要内存大页)
cat /proc/meminfo | grep -i huge
// 如果现实如下,表示已经开启了内存大页
HugePages_Total:     128
HugePages_Free:      111
// 如果没有开启。按照如上步骤开启。
reboot
之后检查是否都开启成功
cat /proc/cmdline

3)安装Mellanox OFED驱动

a.配置镜像源

如果系统不是rocky的请查看自己系统的镜像源配置过程。

sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl="镜像源地址" \
-i.bak \
/etc/yum.repos.d/Rocky-*.repo
b.提前安装依赖
yum install patch make python3-unversioned-command autoconf gdb-headless lsof kernel-devel-5.10.0-136.12.0.86.oe2203sp1.aarch64 automake python3-devel gcc rpm-build

yum install createrepo

yum install pciutils-devel tcsh fuse-devel

运行ifconfig,查看网卡是否识别。如果识别到的网卡查看网卡的驱动版本和pci号:ethtool -i <网卡的名字>.

c.安装ofed

ofed官网下载渠道(下载前使用cat /proc/version查看主机的版本号,要和ofed一一对应才行,否则无法编译)

https://network.nvidia.com/products/infiniband-drivers/linux/mlnx_ofed/

// 解压后安装ofed
./mlnxofedinstall --add-kernel-support --all

4)安装qemu

Step.1 安装依赖

yum install gcc gcc-c++ automake libtool zlib-devel glib2-devel bzip2-devel libuuid-devel spice-protocol spice-server-devel usbredir-devel libaio-devel

Step.2 配置

./configure --prefix=/usr/local/qemu-5.0.0

Step.3 编译

make -j96
make install

Step.4 设置软链

ln -s /usr/local/qemu-5.0.0/bin/qemu-system-x86_64 /usr/bin/qemu-kvm

ln -s /usr/local/qemu-5.0.0/bin/qemu-system-x86_64 /usr/libexec/qemu-kvm

ln -s /usr/local/qemu-5.0.0/bin/qemu-img /usr/bin/qemu-img

参考:https://blog.csdn.net/sukysun125/article/details/89466676

5)安装libvirt

yum install libvirt
// 启动libvirt
systemctl start libvirtd

修改libvirtd服务权限,使libvirt拥有root权限。在后续vdpa中一定会用到。

vim /etc/libvirt/qemu.conf

使能user = "root"group = "root"

6)安装dpdk

网上很多都是安装的dpdk-19版本。dpdk版本之间的差异还是很大的,到dpdk-21.11版本的时候,已经对sriov、vdpa等模式做出了较好的性能优化(这方面可以看源码对比一下)。为了追求性能所以本文安装的是dpdk-21.11

dpdk下载地址:https://fast.dpdk.org/rel/

选择合适版本即可。

安装步骤:
step1:
tar -xvf <dpdk压缩包>
step2:
meson --prefix=/usr --reconfigure -Dexamples=all build

(注意:如果–prefix=/usr安装路径不加,可能会导致安装openvswitch的时候出现找不到dpdk库的问题)

step3:
// 编译
ninja -C build
// 安装
ninja install -C build

执行命令dpdk-devbind.py -s如果有输出,表示dpdk安装成功。

7)安装openvswitch

下载地址:https://www.openvswitch.org/download/

(注意:ovs的版本和dpdk的版本有依赖性,注意两者的版本兼容)

step1:
./configure --prefix=/home/xxx/ovs-xxx/ --with-dpdk=shared

如果中途出现找不到dpdk现象,是因为前面的dpdk编译的时候没有指定路径的原因。重新加上路径编译一遍dpdk就解决了。(注意:如果不想编译到指定文件,可以使用默认的编译。)建议如果之后对ovs不在更改,建议使用下面的这个命令。这个命令和上面的同理,只不过没有添加安装路径,默认路径编译到了/usr/local/bin中。

./configure --with-dpdk=shared
step2:编译
make -j 96

如果编译过程中dpdk库的头文件有问题,那么就是dpdk和ovs的版本不兼容,去官方文档中查看版本兼容情况。

step3:安装
make install
step4:openvswitch环境配置
cp rhel/etc_init.d_openvswitch /etc/init.d/openvswitch
cp rhel/etc_logrotate.d_openvswitch /etc/logrotate.d/openvswitch
systemctl daemon-reload
step5:启动openvswitch
service start openvswitch

(注意:dpdk需要使用大页内存,确认上面的大页内存是否配置成功)

8)虚拟vf(pf虚拟出来vf网卡)

这一步需要确定是否正确开启了sriov功能。

step1:找到mellanox网卡的pci地址
lspci | grep Mell
step2:恢复vf
echo 0 > /sys/class/net/<网卡名称>/device/sriov_numvfs
step3:开启vf
echo 2 > /sys/class/net/<网卡名称>/device/sriov_numvfs

查看是否开启成功lspci | grep Mell会多出两张mellanox类型网卡

step4:设置pf为eswitch模式
ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true
ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-extra=" "
ovs-vsctl --no-wait set Open_vSwitch . other_config={}
systemctl restart openvswitch

cat /sys/class/net/$IFNAME/device/sriov_numvfs
2
# 设置mac地址
ip link set $IFNAME vf 0 mac ${VF1MAC}
ip link set $IFNAME vf 1 mac ${VF2MAC}

# 解除驱动
echo ${PCINUM%%.*}.2 > /sys/bus/pci/drivers/mlx5_core/unbind || true
echo ${PCINUM%%.*}.3 > /sys/bus/pci/drivers/mlx5_core/unbind || true

# 设置eswitch模式
devlink dev eswitch set pci/$PCINUM mode switchdev
devlink dev eswitch show pci/$PCINUM
# # pci/0000:43:00.0: mode switchdev inline-mode none encap-mode basic

# 绑定驱动
echo ${PCINUM%%.*}.2 > /sys/bus/pci/drivers/mlx5_core/bind
echo ${PCINUM%%.*}.3 > /sys/bus/pci/drivers/mlx5_core/bind

# 气动设备
ip link set <网卡> up

# 将代表口添加到网桥上。
ovs-vsctl add-port ovs-sriov ${IFNAME}
ovs-vsctl add-port ovs-sriov ${IFNAME}_0
ovs-vsctl add-port ovs-sriov ${IFNAME}_1

此时配置完之后会出现2个代表口和2个vf口。

3.ovs-kernel

Step.1:创建网桥
ovs-vsctl add-br ovs-br0
Step.2:qemu中配置网络设备

打开qemuxml文件:virsh edit vm1在device中添加如下命令:

<interface type='bridge'>
      <mac address='52:54:00:4e:60:10'/>
      <source bridge='br0'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
</interface>

上述命令目的是在虚拟机中创建一个虚拟网卡,并将这个虚拟机网卡映射到主机上,同时绑定到主机的br0网桥上。(上述命令最终目的是为了配置外网,外网是为了方便连接虚拟机,给虚拟机联网–下载软件包)如果不需要这一步可以省略。

Step.3:将vf网卡透传到qemu中

device模块中添加一下内容

<interface type='subsystem' type='pci' managed='yes'>
   <source bridge='br0'/>
      <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
   </source>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> (这个pci填写的是主机上vf的pci地址)
</interface>

开启虚拟机之后你会发现多了一张网卡,网卡类型为mlx5_core类型的。(需要在虚拟机中安装mellanox ofed驱动,和主机上的编译ofed驱动步骤一样)

4.配置qemu虚拟机ip段

将两个vf分别透传到qemu中,两台虚拟机设置同一网段的ip,如下

// qemu_1
ifconfig <网卡名称> 1.1.1.1/20 up

// qemu_2
ifconfig <网卡名称> 1.1.1.2/20 up

两台虚拟机相互可以ping通,表示mellanox的sriov模式设置成功。

到此sriov模式配置结束。如果按照上述配置依然ping不通,或者中间有什么报错,请邮箱交流:947261733@qq.com。

如果对你有帮助,请麻烦点赞收藏一下~。原创不易

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值