本文分享自华为云社区《2个RoCE网卡Bond聚合,实现带宽X2》,作者: tsjsdbd 。

我们知道操作系统里面,可以将2个实际的物理网卡,合体形成一个“逻辑网卡”,从而达到如主备/提升带宽等目的。但是RoCE网卡,是否也跟普通网卡一样,支持Bond能力呢?答案是的,RoCE也可以组Bond,只是比普通网卡多了一些约束。

今天我们就来实际操作一下这个过程,并了解其中需要注意的地方。也欢迎一起交流学习。

一、RoCE网卡链路聚合(LAG)

根据找到的资料:https://mellanox.my.site.com/mellanoxcommunity/s/article/How-to-Configure-RoCE-over-LAG-ConnectX-4-ConnectX-5-ConnectX-6 里面说的,RoCE网卡的Bond,只支持3种模式:

  • 模式1(主备)
  • 模式2(负载均衡)
  • 模式4(链路聚合)

相比普通网卡总共0-6共七种模式而言,算是打了大折。好在我们想要的“提升带宽”的模式还是有的。

二、服务器执行双网卡聚合(Bond)操作

不同的操作系统,执行Bond的命令不一样。这里我实际操作的是Ubuntu22.04,使用自带的 netplan工具,执行bond过程如下:

修改:

vi /etc/netplan/00-installer-config.yaml
network:
ethernets:
ens3f0np0
dhcp4: no
ens3f1np1
dhcp4: no
version: 2
renderer: networkd
bonds:
bond0:
interfaces: [ens3f0np0, ens3f1np1]
parameters:
mode: 802.3ad
mii-monitor-interval: 1
lacp-rate: faset
transmit-hash-policy: layer3+4
addresses: [10.10.2.20/24]

执行:

netplan apply

后,就可以看到一个叫“bond0”的网卡了。

这里,咱们配置的bond里面有2个重要的参数:

(1)选择bond模式4,即802.3ad(链路聚合)

(2)transmit-hash-policy,负载均衡策略,有以下3种值:

这里由于RDMA点对点通信的时候,IP+MAC地址都不会变。所以咱选 layer3+4,毕竟发送报文的时候,源端口还是随机的。

附CentOS的操作供参考:

新建bond口

nmcli con add type bond ifname tsjbond0 bond.options "mode=2,miimon=100,updelay=100,downdelay=100"

添加子网卡

nmcli con add type ethernet ifname enp80s0f0 master tsjbond0
nmcli con add type ethernet ifname enp80s0f1 master tsjbond0

激活子网卡

nmcli con up bond-slave-enp80s0f0
nmcli con up bond-slave-enp80s0f1

修改了bond卡的配置

vi /etc/sysconfig/network-scripts/ifcfg-bond-tsjbond0
IPADDR=29.28.195.228
NETMASK=255.255.240.0

修改2子网卡配置

vi /etc/sysconfig/network-scripts/ifcfg-enp80s0f0
DEVICE=enp80s0f0
TYPE=Ethernet
ONBOOT=yes
MASTER= tsjbond0
SLAVE=yes
BOOTPROTO=none

激活bond卡

ifup bond-slave-enp80s0f0
ifup bond-slave-enp80s0f1
ifdown bond-tsjbond0
ifup bond-tsjbond0

三、服务器为新网卡开启PFC流控

执行如下命令,首先设置MTU:

ifconfig bond0 mtu 4200

然后开启队列4的pfc流控策略:

mlnx_qos -i ens3f0np0 --pfc=0,0,0,0,1,0,0,0 --turst=dscp
mlnx_qos -i ens3f1np1 --pfc=0,0,0,0,1,0,0,0 --turst=dscp
cma_roce_mode -d mlx5_bond_0 -p 1 -m 2
echo 128 > /sys/class/infiniband/mlx5_bond_0/tc/1/traffic_class

其中,前2条命令需要分别为bond下的各个子网卡开启pfc。

然后,mlx5_bond_0 可以通过 ibdev2netdev 命令查询得到。

最后一条echo 128命令,是指强制网卡发送的报文的Traffic Class为128,即匹配网卡发送队列4。不设置的话也行,可以通过 NCCL_IB_TC=128 达成相同的目的。详细可以参考《为什么华为云上AI训练必须设置NCCL_IB_TC=128》一文。

四、交换机执行双网口聚合(LACP)

不同的交换机开启LACP模式的命令不一样,这里型号是 CE9860。执行如下:

开启eth-trunk口。

interface Eth-Trunk1
port link-type trunk
mode lacp-static

然后切换到对应的网口,使其加入到这个trunk口。

interface GigabitEthernet0/0/1
eth-trunk 1 interface GigabitEthernet0/0/2
eth-trunk 1

命令操作基本这个思路,另外,LACP的LB策略,是通过修改 load-balance profile default配置完成的:

eth-trunk hash-mode ?
INTEGER<1-9> Different hash mode provide different load distribution result for egress traffic flows from a trunk, the default is 1
For Eth-Trunk, mode 1 is suggested
For SMAC change, mode 1/2/6/7 is suggested
For SIP change, mode 1/5/7/9 is suggested
For DIP change, mode 5/6 is suggested
For DMAC&SMAC change, mode 9 is suggested
For SMAC+SIP change, mode 5/6 is suggested

默认值是1。

五、交换机为对应端口开启PFC流控

交换机上执行:

qos buffer headroom-pool size 20164 cells slot 1
interface 400 x/x/x
trust dscp
dcb pfc enable mode manual
dcb pfc buffer 4 xoff dynamic 4 hdrm 3000 cells
commit

上面的命令,其实除了开启pfc之外,还设置了网口对应的buffer大小。具体参数值大小自己看着办。

六、RDMA流量带宽测试

这个就是咱们平时经常用的带宽测试命令了:

首先服务器端,启动Server,

ib_write_bw -s 8388608 -F --run_infinitely -x 3 -q 8 --report_gbits

然后Client开始给服务端打流:

ib_write_bw -s 8388608 -F --run_infinitely -x 3 10.10.2.20 -q 8 --report_gbits

其中 -x参数设置为3,是表示使用 RoCE V2协议。

参数 --run_infinitely 可以让测试一直进行而不停止。

-q 表示使用多个QPS(Queue-Pairs)流。对应 NCCL_IB_QPS_PER_CONNECTION,可以尝试设大一点试试效果。

示意的一个结果如下:

七、服务器端统计信息

查询队列4的报文数量:

watch -n 2 “ethtool -S ens3f0np0 | grep prio4”

这个报文数不会减少,清零不方便,好像重启服务器数量也不会清0。

只找到了通过卸载IB模块来达到清空统计数的目的(假如需要的话):

rmmod mlx5_ib
rmmod mlx5_core
modprob mlx5_core

查询网卡温度:

mget_temp -d mlx5_bond_0

可以看到温度,一般都是62/63度左右。

八、小结

本文只是操作记录,用于互相交流,不一定是最佳实践,自己有选择的看。

因为官网https://mellanox.my.site.com/mellanoxcommunity/s/article/How-to-Configure-RoCE-over-LAG-ConnectX-4-ConnectX-5-ConnectX-6

这么写的:

点击关注,第一时间了解华为云新鲜技术~

带宽优化新思路:RoCE网卡聚合实现X2增长的更多相关文章

  1. CentOS下多网卡绑定bond/多网卡聚合

    网卡bond我直接理解成网卡聚合了,就是把多张网卡虚拟成1张网卡,出口时,这张网卡无论哪个断线都不影响网络,入口时,需要结合交换机的端口聚合功能实现和网卡配置的bond模式进行负载均衡.bond需要在 ...

  2. CentOS 7使用nmcli配置双网卡聚合

    进入CentOS 7以后,网络方面变化比较大,例如eth0不见了,ifconfig不见了,其原因是网络服务全部都由NetworkManager管理了,下面记录下今天下午用nmcli配置的网卡聚合,网络 ...

  3. Linux网卡聚合时,其中一个网卡有两种配置的解决方法

    先来看看: ficonfig 其中第一网卡是ssh使用: 第二个网卡是在Linux 最小化安装后IP的配置(手动获取静态IP地址)这个文章中配置过ip是192.168.1.2:在Linux重命名网卡名 ...

  4. Linux 网卡聚合

    Linux 网卡聚合的类型: 1.broadcast:传输来自所有端口的每个包 2.roundrobin:以轮播方式传输来自每个端口的包 3.activebackup:故障转移运行程序,监视更改并选择 ...

  5. CentOS下bond网卡聚合与网桥结合

    需求:服务器配置bond多网卡聚合,然后KVM需要使用到网桥,那么需要做到网桥绑定到bond网卡上. 实现核心: 1.bond配置参考:https://www.cnblogs.com/EasonJim ...

  6. 转:CentOS 7使用nmcli配置双网卡聚合LACP

    进入CentOS 7以后,网络方面变化比较大,例如eth0不见了,ifconfig不见了,其原因是网络服务全部都由NetworkManager管理了,下面记录下今天下午用nmcli配置的网卡聚合,网络 ...

  7. Linux物理网卡聚合及桥接

    说明: (1).在网卡聚合绑定之前,要先停用NetworkManager服务(或者在网卡中添加参数:NM_CONTROLLED=no),否则系统重启后绑定的IP失效了. # systemctl sto ...

  8. centos 网卡聚合及Cisco交换机链路聚合

    一.配置环境 centos 系统.网卡1口和2口做链路聚合.    交换机网口 6口和7口. 二.服务器操作步骤 centos 6 1.创建一个channel bonding interface #v ...

  9. PWA 时代的移动端图片优化新思路

    图片通常是移动端网页中最占流量的资源.在很多类型的网站中(比如电商.社区),图片占据了网页的大部分空间.优化图片的质量和加载速度成为提高用户体验的重要途径. 传统方案的弊端 目前有一些被广泛应用的方案 ...

  10. SqlServer数据库优化之添加主键和自增长

    今天需要给有500万条数据的表添加主键和自增长列,其中最大的难度在于如何UPDATE这500万多条数据,开始吧! 1.先给表添加一个字段叫ID,并允许空 2.查询表,我想到了使用其中的时间列排序来创建 ...

随机推荐

  1. Elasticsearch 6.x 配置search-guard 插件

    前言   es之前版本一直无用户验证功能,不过官方有提供一x-pack,但是问题是付费.在es的6.3.2版本中,已经集成了x-pack,虽然es团队已经对x-pack开源,但是在该版本中如果需要使用 ...

  2. 人工智能智能城市(AIinSmartCities)领域的100篇热门博客文章标题如下:

    目录 人工智能智能城市(AI in Smart Cities)领域的100篇热门博客文章标题如下: 1.<智能城市与大数据:未来城市大脑的发展方向> 2.<智能交通系统的设计与实现& ...

  3. ABP - 缓存模块(2)

    1. 缓存模块源码解析 个人觉得 ABP 分布式缓存模块有三个值得关注的核心点.首先是 AbpRedisCache 类继承了微软原生的 RedisCache,并 通过反射的方式获取RedisCache ...

  4. 体细胞突变检测分析流程-系列1( WES&Panel)

    Sentieon●体细胞变异检测-系列1   Sentieon 致力于解决生物信息数据分析中的速度与准确度瓶颈,通过算法的深度优化和企业级的软件工程,大幅度提升NGS数据处理的效率.准确度和可靠性. ...

  5. 玩转AI二维码:揭秘我的漂亮二维码生成秘诀

    这几天我又生成了很多漂亮的二维码图片,有了一些感受和想法,特总结此文,分享给大家.需要图片参数的同学可直接看文章最后,我生成了100多张不同风格的图片. 先看效果,喜欢的可以继续读下去. 背景 在这篇 ...

  6. 你的Spring应用启动很慢?不妨试试这个工具!

    睡不着闲逛,在GitHub上看到一个挺实用的开源项目:Spring Startup Analyzer. 从项目名称中就大概能猜到,这是一个分析Spring应用启动过程的工具.Spring Startu ...

  7. javascript高级程序设计第三版FileApi 学习与实践1

    文件操纵 File API File API 在表单中的文件输入字段的基础上,又添加了一些直接访问文件信息的接口. H5 在 DOM 元素中为文件输入元素添加了一个 files 集合. 在通过文件输入 ...

  8. <学习笔记> 关于错排列

    1 是做排列计数的时候了解到这个东西: 一开始想的是用容斥原理,先加上全排列,再减去不满足的,再加上重复的,再减去不满足的...... 后来发现还涉及到杨辉三角,麻烦死了,时空复杂度也过不去,然后就知 ...

  9. 助力618-Y的混沌实践之路

    一.写在前面 1.混沌是什么? 混沌工程(Chaos Engineering)的概念由 Netflix 在 2010 年提出,通过主动向系统中引入异常状态,并根据系统在各种压力下的行为表现确定优化策略 ...

  10. js实现继承的五种方法及原型的继承关系

    继承是javascript中实现代码复用的一种方式,也能绑定对象或者函数之间的关系 为什么要继承 比如以下代码,Person.Student和Teacher构造函数,可以发现他们有一些特征 Perso ...