[RoCE]网络QoS总结

 1.什么是QoS

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

2.为什么RoCE网络需要QoS

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

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

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

  • 使用VLAN头部的PCP域
  • 使用IP头部的DSCP域

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

为了满足不同应用需要不同等级的网络流服务,verbs接口和rdma_cm接口都向应用层提供了设置网络流优先级的QoS属性API。

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

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

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

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

  • 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上
  • RoCEv2: 这个协议是将RDMA数据段先封装到UDP数据段内,加上UDP头部,再加上IP头部,最后在加上以太网头部,属于三层数据包,为了对它进行分类的话,既可以使用以太网VLAN中的PCP域,也可以使用IP头部的DSCP域。对于PCP域的映射过程和上面一致,下面仅解释DSCP域的映射过程:
    • verbs:
      • 应用在创建QP时,对QP属性中GRH中的traffic_class字段进行设置优先级。
      • 在硬件驱动中,IP头部的ToS字段会直接被赋值为traffic_class,而DSCP只是ToS中的高6位,因此traffic_class到优先级的转换是:traffic_class=有效优先级值 * 4
      • 最终根据DSCP值到TC的映射表来将网络流映射到对应的TC上
    • rdma_cm:
      • 应用通过rdma_set_optin函数来设置ToS值
      • 在硬件驱动中,根据设置的ToS到DSCP值的映射表,将ToS转换成DSCP值
      • 最终根据DSCP值到TC的映射表来将网络流映射到对应的TC上

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

根据应用对网络流设置的优先级,最终将网络流映射到不同的TC上,而这些TC可以人为配置调度策略,网卡根据不同的调度策略来从不同的TC中向链路上发送数据。

一个流量类(TC)可以被赋予不同的服务质量属性,分别有:

  • 严格优先级(Strict Priority)
  • 最小带宽保证(Enhanced Transmission Selection, ETS)
  • 速率限制(Rate Limit)

6.1 严格优先级

具有严格优先级的TC比其他非严格优先级的流具有更高的优先级,在同是严格优先级的TC中,数字越大优先级越高。网卡总是先服务高优先级TC,仅当最高优先级的TC没有数据传输时才会去服务下一个最高优先级TC。使用严格优先级TC可以改善对于低延迟低带宽的网络流,但是不适合传输巨型数据,因为会使得系统中其他的传输者饥饿。

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

ETS利用提供给一个特定的流量类负载小于它的最小分配的带宽时剩余的时间周期,将这个可用的剩余时间差提供给其它流量类。

服务完严格优先级的TCs之后,链路上剩余的带宽会根据各自最小带宽保证比例分配给其它的TC。

6.3 速率限制

速率限制对一个TC定义了一个最大带宽值,这与ETS不同。

7.额外补充知识

管理sk_prio到UP映射的工具是:tc_wrap.py

管理UP到TC映射的工具是:mlnx_qos 

管理不同TC调度算法的工具是:mlnx_qos

在启用不同的分类方式时需要对交换机和网卡设置trust mode值:pcp, dscp 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏开源优测

基于Excel参数化你的Selenium2测试

前言 今天我们就如何使用xlrd模块来进行python selenium2 + excel自动化测试过程中的参数化进行演示说明,以解决大家在自动化测试实践过程中...

2946
来自专栏非典型程序猿

你不知道的gRPC反向代理

可用性、可靠性和扩展性是衡量后台服务的基本标准,HTTP反向代理,是任何一个提供大型Web服务后台所必备的,用以提高服务的这些基础参数,且通过支持到负载均衡而进...

2K11
来自专栏MasiMaro 的技术博文

Windows程序设计学习笔记(一)Windows内存管理初步

学习Windows程序设计也有一些时间了,为了记录自己的学习成果,以便以后查看,我希望自己能够坚持写下一系列的学习心得,对自己学习的内容进行总结,同时与大家交流...

671
来自专栏生信技能树

生信菜鸟团博客2周年精选文章集(6)三个最基础生信软件教程

其实我现在已经不写软件教程了! fastqc对原始测序reads质控 NCBI的blast++软件使用说明书 SRA工具sratoolkit把原始测序数据转为...

46311
来自专栏Python中文社区

Django 博客教程(三):创建应用和编写数据库模型

專 欄 ❈追梦人物,Python中文社区专栏作者。电子科技大学计算机学院研究生,从事大数据分析研究方向。主要使用 Python 语言进行相关数据的分析,熟练使...

2089
来自专栏开源优测

基于Excel参数化你的Selenium2测试

前言 今天我们就如何使用xlrd模块来进行python selenium2 + excel自动化测试过程中的参数化进行演示说明,以解决大家在自动化测试实践过程中...

2804
来自专栏linux驱动个人学习

Linux分页机制之概述--Linux内存管理(六)

在虚拟内存中,页表是个映射表的概念, 即从进程能理解的线性地址(linear address)映射到存储器上的物理地址(phisical address).

3841
来自专栏机器之心

资源 | Parris:机器学习算法自动化训练工具

3519
来自专栏沃趣科技

Oracle并行基础

Oracle并行基础 概述 ? Oracle企业版有一项非常厉害的技术:并行查询,也就是说一个语句可以雇佣多个服务器进程(parallel slaves也叫PX...

4707
来自专栏ericzli

Jetson TX1上安装Tensorflow Serving遇到的问题总结

本文的目的是分享在TX1上安装Tensorflow Serving时遇到的主要问题,避免重复踩坑。

3713

扫码关注云+社区

领取腾讯云代金券