【RDMA】RoCE网络QoS|应用层设置PFC等级|Tos|Priority|TC

本文详细介绍了RoCE网络中实现服务质量(QoS)的原理和方法,包括硬件层和应用层的流量分类、优先级映射以及调度策略。重点讨论了如何通过设置服务级别(SL)、ToS字段来影响网络流的优先级,并分析了严格优先级、最小带宽保证(ETS)和速率限制等调度策略。此外,还提到了PFC和全局暂停流控制的性能比较,以及Windows系统的配置方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.什么是QoS

2.为什么RoCE网络需要QoS

3.为了实现每个流有不同的优先级,硬件层如何对流量分类

4. 应用层如何对流量分类

5. 应用层对流量的分类是怎么映射到硬件层上的分类

6.映射完成之后硬件是怎么针对优先级对网络流进行调度的 

6.1 严格优先级

6.2 最小带宽保证(Enhanced Transmission Selection增强传输选择, ETS)

6.3 速率限制

Incast和PFC

PFC 和global pause flowcontrol 性能比较

7.额外补充知识

文档


作者:bandaoyu 链接:https://blog.csdn.net/bandaoyu/article/details/115633835

1.什么是QoS

QoS是一种机制,它给一个网络流赋予一个优先级,并且管理它的最低需求(guarantees),极限能力(limitations)和它相比其他网络流的优先级服务。这是通过一个2/3阶段的过程将用户层的优先级映射到一个硬件层流量类(hardware Traffic Class)上实现的。流量类(traffic class)被赋予QoS属性(缓存分配,流控制,排队,调度,随机早期检测,显式拥塞通知等等),并且不同的流按照这些对应的属性被服务。

2.为什么RoCE网络需要QoS

 RDMA最初设计用在运行高性能计算应用的infiniband网络中。Infiniband网络在协议规定上是无损网络,不会产生丢包现象。高性能计算应用通常会针对网络性能优化,因此拥有更友好的网络流量。进而,高性能计算网络对于QoS配置的需求也就更低。在另一方面,数据中心网络面对的是任意变化的流量场景,不同的网络流需要协调服务等级以提高网络效率。这产生更高的QoS要求来解决不同的问题。

为什么需要无损网络:长期以来,HPC(高性能计算)的RDMA都是在Infiniband集群中使用,数据包丢失在此类群集中很少见,因此RDMA Infiniband传输层(在NIC上实现)的重传机制很简陋,既:go-back-N重传,但是现在RDMA的使用更广泛,在其他网络中,丢包的概率大于Infiniband集群,一旦丢包,使用RDMA的go-back-N重传机制效率非常低,会大大降低RDMA的传输效率,所以要想发挥出RDMA真正的性能,势必要为RDMA搭建一套不丢包的无损网络环境,而Qos是确保网络不丢包的手段之一。

go-back-N重传,见2.1 Infiniband RDMA and RoCE:https://blog.csdn.net/bandaoyu/article/details/115620365

3.为了实现每个流有不同的优先级,硬件层如何对流量分类

在IP/Ethernet数据包头部中,有两种方式来对网络包进行分类:

  • 使用VLAN头部的PCP域 (二层)
  • 使用IP头部的DSCP域     (三层)

新的 DSField 的结构( 差异化服务代码点 + 显示拥塞通知 ):(注意DSField=DSCP+ECN)

在这里插入图片描述
IPV4服务类型(TOS)被Differentiated Services Field(DSField)替换_努力不停努力的博客-CSDN博客_ipv4服务类型

IPV4服务类型(TOS)被Differentiated Services Field(DSField)替换_努力不停努力的博客-CSDN博客_ipv4服务类型

IP优先级和DSCP优先级的区别

(IP优先级是RFC1349 在Tos字段上定义的优先级划分,后来不够用又将Tos字段重新定义优先级划分,就是DSCP优先级。所以IP优先级和DSCP优先级是在同一个字段(Tos)的两个不同的优先级定义)

4. 应用层如何对流量分类

        为了满足 '不同应用需要不同等级的网络流' 服务,verbs接口和rdma_cm接口都向应用层提供了设置网络流优先级属性的API。(也就是提供接口修改报文的Tos字段)

类似于tcp/ip套接字中的setsockopt可以设置QoS参数。

5. 应用层对流量的分类是怎么映射到硬件层上的分类

通常是要经过一个两阶段或者三阶段的过程来完成,但这在不同的库接口(verbs和rdma_cm)以及不同版本的RoCE协议下也是不同的。

(创建链接时,RoCEv1 和RoCEv2的选择,见文章:http://t.csdn.cn/rmz6R)

首先,针对不同协议来看:

RoCEv1:

这个协议是将RDMA数据段封装到以太网数据段内,再加上以太网的头部,因此属于二层数据包,为了对它进行分类的话,只能使用VLAN头部中的PCP域来设置优先级值,因此还需要额外开启VLAN功能。当开启VLAN之后,在不同的库中映射过程如下:

  • verbs:
    • 应用在创建QP时,对QP属性中的SL(service level)字段进行设置优先级。
    • 在硬件驱动中,会自动将SL转换成VLAN头部中的PCP域代表的值UP,转换方式:UP = SL & 7,该值只有8种可选值
    • 网络流会根据UP值映射到对应的TC上
  • rdma_cm:
    • 应用通过rdma_set_option函数来设置ToS值,该值只有4种有效值:0,8,24,16,
    • 然后在内核中,将ToS转换成sk_prio,该值也只有4种有效值:0,2,4,6,映射方式固定
    • 最后在硬件驱动中,将sk_prio转换成UP,映射方式可以用户自定义
    • 网络流会根据UP值映射到对应的TC上。  (Linux操作系统中的流量控制器TC(Traffic Control)Linux下TC使用说明_gaopeiliang的专栏-CSDN博客_linux tc 命令)

 实例:基于RoCE v1配置PFC:基于RoCE v1配置PFC_u013431916的博客-CSDN博客

在端主机侧,映射关系为:
ToS -> skb_priority -> Vlan-qos (也记为User Priority,即UP,其值为Vlan tag中PCP的值) -> tc。

在交换机侧,映射关系为:
PCP + DEI -> switch-priority -> ingress Port Group (PG)。其中PG包含对PFC阈值的配置。

本文使用tc 4以及switch-priority 4为例。

RoCEv2:

这个协议是将RDMA数据段先封装到UDP数据段内,加上UDP头部,再加上IP头部,最后在加上以太网头部,属于三层数据包,为了对它进行分类的话,既可以使用以太网VLAN中的PCP域,也可以使用IP头部的DSCP域。对于PCP域的映射过程和上面一致,下面仅解释DSCP域的映射过程:

  • verbs:
    • 应用在创建QP后转换状态时,对QP属性中GRH中的traffic_class字段进行设置优先级。(注意对该属性的修改,需要在特定的转换步骤执行,具体查看ibv_modify_qp的函数说明:ibv_modify_qp() - RDMAmojo RDMAmojo,页面搜索IBV_QP_AV)
    • 在硬件驱动中,IP头部的ToS字段(8bit)会直接被赋值为traffic_class,而DSCP只是ToS字节中的高6位 (值0~63),因此traffic_class到DSCP值的一种简单转换是:traffic_class=DSCP值 <<2 (所以traffic_class=8的设置的DSCP值=8/4=2,如果想设置优先级4,则traffic_class应设置为4*4=16 )更多的转换是:

--tos 字节, DSCP占高6bit, 

所以想给DSCP赋值4,二进制为000100,后2bit为任意值,所以DSCP=4的tos= 000100xx,

所以DSCP=4的tos 可以是10000、10001、10010、10011,即16、17、18、19

想给DSCP赋值16,高6bit为二进制为010000,加后2bit,则为 010000xx,即tos可以是1000000、1000001、1000010、1000011,即64、65、66、67

想给DSCP赋值8,dscp是Tos的高6bit,dscp=8对应的Tos是100000、100001、100010、100011,即32,33,34,35.在程序中,创建QP时,设置attr.ah_attr.grh.traffic_class = 32

(测试发现,不论traffic_class设置多少,都只能修改报文Tos域的高6bit,后2bit与ECN设置有关)

由于映射关系可以修改,所以最准确的映射关系应该用设备商提供的指令查询,如mellonx的

mlnx_qos -i eth0

……
 struct ibv_qp_attr attr;
……
 attr.ah_attr.grh.traffic_class = 0;
 attr_mask |= IBV_QP_AV;  //别忘了attr_mask告诉ibv_modify_qp  ah_attr域要修改(https://www.rdmamojo.com/2013/01/12/ibv_modify_qp/)
……
  rc = i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值