[RoCE] 通过QoS对Mellanox网卡进行限速
参考资料:
Quality of Service (QoS) - NVIDIA Docs
【RDMA】RoCE网络QoS|应用层设置PFC等级|Tos|Priority|TC_cma_roce_tos-CSDN博客
【RDMA】mellonx流控配置工具mlnx_qos|PFC-CSDN博客
前言
目标:我有一个Mellanox-5网卡,我想用RoCE,同时对某些qp进行限速。
然而,Mellanox-5网卡在RoCE模式下是无法对每个QP进行单独限速的。
我试了很多方法,但都失败了。最显然的做法是使用 ibv_modify_qp
时修改attr.ah_attr.static_rate
参数(rdmamojo.com)。然而并没有效果。我尝试了其它一些可能和rate limit有关的API,比如ibv_modify_qp_rate_limit
和修改attr.rate_limit
,也都没有用。我在官方的perftest(linux-rdma/perftest: Infiniband Verbs Performance Tests (github.com))里设置static_rate
参数,结果它告诉我:
The QP failed to accept HW rate limit
我查看网卡的配置,发现:
$ ibv_devinfo -v
hca_id: mlx5_1
...
packet_pacing_caps:
qp_rate_limit_min: 0kbps
qp_rate_limit_max: 0kbps
qp_rate_limit_min
和qp_rate_limit_max
都是0,这明摆着是用不了rate limit。无奈只得另寻他法。
经过一番寻找,我找到了用QoS进行限速的方法。
使用QoS进行限速
具体的文档可见Quality of Service (QoS) - NVIDIA Docs。
1. 查看网卡的QoS信息
在ifconfig
里,我的网卡名字是ens10f1np1
。
$ mlnx_qos -i ens10f1np1
DCBX mode: OS controlled
Priority trust state: pcp
default priority:
Receive buffer size (bytes): 0,262016,0,0,0,0,0,0,
Cable len: 7
PFC configuration:
priority 0 1 2 3 4 5 6 7
enabled 0 0 0 0 0 0 0 0
buffer 1 1 1 1 1 1 1 1
tc: 1 ratelimit: unlimited, tsa: vendor
priority: 0
tc: 0 ratelimit: unlimited, tsa: vendor
priority: 1
tc: 2 ratelimit: unlimited, tsa: vendor
priority: 2
tc: 3 ratelimit: unlimited, tsa: vendor
priority: 3
tc: 4 ratelimit: unlimited, tsa: vendor
priority: 4
tc: 5 ratelimit: unlimited, tsa: vendor
priority: 5
tc: 6 ratelimit: unlimited, tsa: vendor
priority: 6
tc: 7 ratelimit: unlimited, tsa: vendor
priority: 7
QoS有两种trust mode:PCP和DSCP。其中PCP是L2层的,使用vlan包头的一部分。而DSCP是L3层的,使用IP包头的一部分。由于我们想要使用RoCEv2,不包含vlan而包含IP,所以自然用DSCP是更合适的。
网卡默认的trust mode是PCP,这里我们把它改成DSCP。
$ sudo mlnx_qos -i ens10f1np1 --trust dscp
DCBX mode: OS controlled
Priority trust state: dscp
dscp2prio mapping:
prio:0 dscp:07,06,05,04,03,02,01,00,
prio:1 dscp:15,14,13,12,11,10,09,08,
prio:2 dscp:23,22,21,20,19,18,17,16,
prio:3 dscp:31,30,29,28,27,26,25,24,
prio:4 dscp:39,38,37,36,35,34,33,32,
prio:5 dscp:47,46,45,44,43,42,41,40,
prio:6 dscp:55,54,53,52,51,50,49,48,
prio:7 dscp:63,62,61,60,59,58,57,56,
default priority:
Receive buffer size (bytes): 0,262016,0,0,0,0,0,0,
Cable len: 7
PFC configuration:
priority 0 1 2 3 4 5 6 7
enabled 0 0 0 0 0 0 0 0
buffer 1 1 1 1 1 1 1 1
tc: 1 ratelimit: unlimited, tsa: vendor
priority: 0
tc: 0 ratelimit: unlimited, tsa: vendor
priority: 1
tc: 2 ratelimit: unlimited, tsa: vendor
priority: 2
tc: 3 ratelimit: unlimited, tsa: vendor
priority: 3
tc: 4 ratelimit: unlimited, tsa: vendor
priority: 4
tc: 5 ratelimit: unlimited, tsa: vendor
priority: 5
tc: 6 ratelimit: unlimited, tsa: vendor
priority: 6
tc: 7 ratelimit: unlimited, tsa: vendor
priority: 7
可以看到,上面一共包含8个Traffic Class(TC),8个priority,以及8个buffer。由于我们的目标只是限速,所以我们不去修改TC,priority,buffer之间的关系。
2. 设置ToS
在RoCEv2模式下,配置一个qp对应哪个Traffic TC的流程如下。
- 在应用层,为每个qp设置一个Type-of-Service(ToS)。
- ToS的高6bit为DSCP,低2bit无所谓。
- 根据上文的映射表将DSCP映射为TC。
ToS在IP包头中的含义在这里:
假如我们想要对TC4进行限速。根据DSCP的映射表,我们可以选取DSCP=32(32到39都行)。因此对应的ToS就是128(128到159都行)。
然后,我们想要把TC4限速为4Gbps。
$ sudo mlnx_qos -i ens10f1np1 --ratelimit=0,0,0,0,4,0,0,0
...
tc: 4 ratelimit: 4.0 Gbps, tsa: vendor
priority: 4
配置成功。
3. 应用层设置ToS
对于ibverb API的使用者,在设置Address Vector的时候,将attr.ah_attr.grh.traffic_class
这一项设置为想要的ToS即可(注意虽然这个参数叫traffic_class
,但它的值不是TC,而是ToS)。
对于RDMA CM的使用者,使用rdma_set_option(cma_id, RDMA_OPTION_ID, RDMA_OPTION_ID_TOS, &your_tos, sizeof(uint8_t))
即可设置ToS。
测试
我们已经在机器A上配置好了限速,现在测一下从机器A到另一台机器B进行RDMA WRITE的吞吐。
在B上运行(这里mlx5_1是网卡的ib名字,使用ibdev2netdev
可以查看)
$ ib_write_bw -d mlx5_1 -x 3
在A上运行
$ ib_write_bw <B_IP> -d mlx5_1 -x 3 --tclass=128
结果
---------------------------------------------------------------------------------------
#bytes #iterations BW peak[MB/sec] BW average[MB/sec] MsgRate[Mpps]
65536 5000 9205.89 450.24 0.007204
---------------------------------------------------------------------------------------
可以发现,确实将平均速度限制到了4Gbps以下。然而,峰值速度貌似是限制不住的(悲)。
而对于其它的ToS:
$ ib_write_bw <B_IP> -d mlx5_1 -x 3 --tclass=0
---------------------------------------------------------------------------------------
#bytes #iterations BW peak[MB/sec] BW average[MB/sec] MsgRate[Mpps]
65536 5000 8501.98 4726.36 0.075622
---------------------------------------------------------------------------------------
速度则不受限制。
| 欢迎来原网站坐坐! >原文链接<