QoS in RoCE
QoS in RoCE
首页分类标签留言关于订阅2018-03-22 | 分类 Network | 标签 RDMA RoCE ECN PFC
Overview
TCP/IP协议栈满足不了现代IDC工作负载(workloads)的需求,主要有2个原因:(1)内核处理收发包需要消耗大量的CPU;(2)TCP不能满足应用对低延迟的需求:一方面,内核协议栈会带来数十ms的延迟;另一方面,TCP的拥塞控制算法、超时重传机制都会增加延迟。
RDMA在NIC内部实现传输协议,所以没有第一个问题;同时,通过zero-copy
、kernel bypass
避免了内核层面的延迟。
与TCP不同的是,RDMA需要一个无损(lossless)的网络。例如,交换机不能因为缓冲区溢出而丢包。为此,RoCE使用PFC(Priority-based Flow Control)
带进行流控。一旦交换机的port的接收队列超过一定阀值(shreshold)时,就会向对端发送PFC pause frame
,通知发送端停止继续发包。一旦接收队列低于另一个阀值时,就会发送一个pause with zero duration
,通知发送端恢复发包。
PFC对数据流进行分类(class),不同种类的数据流设置不同的优先级。比如将RoCE的数据流和TCP/IP等其它数据流设置不同的优先级。详细参考Considerations for Global Pause, PFC and QoS with Mellanox Switches and Adapters
Network Flow Classification
对于IP/Ethernet,有2种方式对网络流量分类:
- By using PCP bits on the VLAN header
- By using DSCP bits on the IP header
详细介绍参考Understanding QoS Configuration for RoCE。
Traffic Control Mechanisms
对于RoCE,有2个机制用于流控:Flow Control (PFC)
和Congestion Control (DCQCN)
,这两个机制可以同时,也可以分开工作。
- Flow Control (PFC)
PFC是一个链路层协议,只能针对port进行流控,粒度较粗。一旦发生拥塞,会导致整个端口停止pause。这是不合理的,参考Understanding RoCEv2 Congestion Management。为此,RoCE引入Congestion Control
。
- Congestion Control (DCQCN)
DC-QCN
是RoCE使用的拥塞控制协议,它基于Explicit Congestion Notification (ECN)
。后面会详细介绍。
PFC
前面介绍有2种方式对网络流量进行分类,所以,PFC也有2种实现。
VLAN-based PFC
- VLAN tag
基于VLAN tag的Priority code point (PCP,3-bits)定义了8个Priority.
- VLAN-based PFC
In case of L2 network, PFC uses the priority bits within the VLAN tag (IEEE 802.1p) to differentiate up to eight types of flows that can be subject to flow control (each one independently).
- RoCE with VLAN-based PFC
HowTo Run RoCE and TCP over L2 Enabled with PFC.
## 将skb prio 0~7 映射到vlan prio 3
for i in {0..7}; do ip link set dev eth1.100 type vlan egress-qos-map $i:3 ; done
## enable PFC on TC3
mlnx_qos -i eth1 -f 0,0,0,1,0,0,0,0
例如:
[root@node1 ~]# cat /proc/net/vlan/eth1.100
eth1.100 VID: 100 REORDER_HDR: 1 dev->priv_flags: 1001
total frames received 0
total bytes received 0
Broadcast/Multicast Rcvd 0
total frames transmitted 0
total bytes transmitted 0
Device: eth1
INGRESS priority mappings: 0:0 1:0 2:0 3:0 4:0 5:0 6:0 7:0
EGRESS priority mappings:
[root@node1 ~]# for i in {0..7}; do ip link set dev eth1.100 type vlan egress-qos-map $i:3 ; done
[root@node1 ~]# cat /proc/net/vlan/eth1.100
eth1.100 VID: 100 REORDER_HDR: 1 dev->priv_flags: 1001
total frames received 0
total bytes received 0
Broadcast/Multicast Rcvd 0
total frames transmitted 0
total bytes transmitted 0
Device: eth1
INGRESS priority mappings: 0:0 1:0 2:0 3:0 4:0 5:0 6:0 7:0
EGRESS priority mappings: 0:3 1:3 2:3 3:3 4:3 5:3 6:3 7:3
参考HowTo Set Egress Priority VLAN on Linux.
- 问题
基于VLAN的PFC机制有2个主要问题:(1)交换机需要工作在trunk模式;(2)没有标准的方式实现VLAN PCP
跨L3网络传输(VLAN是一个L2协议)。
DSCP-based PFC
通过使用IP头部的DSCP
字段解决了上面2个问题。
DSCP-based PFC
DSCP-based PFC requires both NICs and switches to classify and queue packets based on the DSCP value instead of the VLAN tag.
- DSCP vs TOS
The type of service (ToS) field in the IPv4 header has had various purposes over the years, and has been defined in different ways by five RFCs.[1] The modern redefinition of the ToS field is a six-bit Differentiated Services Code Point (DSCP) field[2] and a two-bit Explicit Congestion Notification (ECN) field.[3] While Differentiated Services is somewhat backwards compatible with ToS, ECN is not.
详细介绍参考:
PFC机制的一些问题
RDMA的PFC机制可能会导致一些问题:
- RDMA transport livelock
尽管PFC可以避免buffer overflow
导致的丢包,但是,其它一些原因,比如FCS错误,也可能导致网络丢包。RDMA的go-back-0
算法,每次出现丢包,都会导致整个message的所有packet都会重传,从而导致livelock
。TCP有SACK算法,由于RDMA传输层在NIC实现,受限于硬件资源,NIC很难实现SACK算法。可以使用go-back-N
算法来避免这个问题。
- PFC Deadlock
当PFC机制与Ethernet的广播机制工作时,可能导致出现PFC Deadlock
。简单来说,就是PFC机制会导致相应的port停止发包,而Ethernet的广播包可能引起新的PFC pause
依赖(比如port对端的server down掉),从而引起循环依赖。广播和多播对于loseless
是非常危险的,建议不要将其归于loseless classes
。
- NIC PFC pause frame storm
由于PFC pause
是传递的,所以很容器引起pause frame storm
。比如,NIC因为bug导致接收缓冲区填满,NIC会一直对外发送pause frame
。需要在NIC端和交换机端使用watchdog
机制来防止pause storm
。
- The Slow-receiver symptom
由于NIC的资源有限,它将大部分数据结构,比如QPC(Queue Pair Context)
和WQE (Work Queue Element)
都放在host memory。而NIC只会缓存部分数据对象,一旦出现cache miss
,NIC的处理速度就会下降。
ECN
ECN with TCP/IP
ECN是一个端到端的拥塞通知机制,而不需要丢包。ECN是可选的特性,它需要端点开启ECN支持,同时底层的网络也需要支持。
传统的TCP/IP网络,通过丢包来表明网络拥塞,router/switch/server
都会这么做。而对于支持ECN的路由器,当发生网络拥塞时,会设置IP头部的ECN(2bits)标志位,而接收端会给发送端返回拥塞的通知(echo of the congestion indication
),然后发送端降低发送速率。
由于发送速率由传输层(TCP)控制,所以,ECN需要TCP和IP层同时配合。
rfc3168定义了ECN for TCP/IP
。
ECN with IP
IP头部有2个bit的ECN标志位:
- 00 – Non ECN-Capable Transport, Non-ECT
- 10 – ECN Capable Transport, ECT(0)
- 01 – ECN Capable Transport, ECT(1)
- 11 – Congestion Encountered, CE.
如果端点支持ECN,就数据包中的标志位设置为ECT(0)
或者ECT(1)
。
ECN with TCP
为了支持ECN,TCP使用了TCP头部的3个标志位:Nonce Sum (NS)
,ECN-Echo (ECE)
和Congestion Window Reduced (CWR)
。
ECN in RoCEv2
RoCEv2引入了ECN机制来实现拥塞控制,即RoCEv2 Congestion Management (RCM)
。通过RCM,一旦网络发生拥塞,就会通知发送端降低发送速率。与TCP类似,RoCEv2使用传输层头部Base Transport Header (BTH)
的FECN
标志位来标识拥塞。
实现RCM的RoCEv2 HCAs必须遵循下面的规则:
(1) 如果收到IP.ECN为11
的包,HCA生成一个RoCEv2 CNP(Congestion Notification Packet)包,返回给发送端; (2) 如果收到RoCEv2 CNP
包,则降低对应QP的发送速率; (3) 从上一次收到RoCEv2 CNP
后,经过配置的时间或者字节数,HCA可以增加对应QP的发送速率。
- RCM的一些术语
Term | Description |
---|---|
RP (Injector) | Reaction Point - the end node that performs rate limitation to prevent congestion |
NP | Notification Point - the end node that receives the packets from the injector and sends back notifications to the injector for indications regarding the congestion situation |
CP | Congestion Point - the switch queue in which congestion happens |
CNP | The RoCEv2 Congestion Notification Packet - The notification message an NP sends to the RP when it receives CE marked packets. |
- RoCEv2的ECN示例
- ECN的配置
Refs
一些关于PFC的文献
- RDMA over Commodity Ethernet at Scale
- Network Considerations for Global Pause, PFC and QoS with Mellanox Switches and Adapters
- Understanding QoS Configuration for RoCE
- HowTo Run RoCE and TCP over L2 Enabled with PFC
- Revisiting Network Support for RDMA
- RoCE v2 Considerations
一些关于ECN的文献
- Explicit Congestion Notification
- Understanding RoCEv2 Congestion Management
- Understanding DC-QCN Algorithm for RoCE Congestion Control
- Congestion Control for Large-Scale RDMA Deployments
- Annex A17: RoCEv2
- RoCEv2 CNP Packet Format Example
QoS in RoCE的更多相关文章
- QoS in RoCE (zz)
QoS in RoCE 首页分类标签留言关于订阅2018-03-22 | 分类 Network | 标签 RDMA RoCE ECN PFC Overview TCP/IP协议栈满足不了现代I ...
- RoCE、softRoCE与iWRAP
RoCE - RDMA over Converged Ethernet 以太网在全球互联的广域网中毫无异议的老大,但在高带宽.低延时的专有网络领域却明显混不开.伴随网络融合概念兴起,IETF发布了DC ...
- 提升网速的路由器优化方法(UPnP、QoS、MTU、交换机模式、无线中继)
在上一篇<为什么房间的 Wi-Fi 信号这么差>中,猫哥从微波炉.相对论.人存原理出发,介绍了影响 Wi-Fi 信号强弱的几大因素,接下来猫哥再给大家介绍几种不用升级带宽套餐也能提升网速的 ...
- java.lang.ClassCastException: org.slf4j.impl.Log4jLoggerFactory cannot be cast to ch.qos.logback.classic.LoggerContext问题原因及解决方法
一.错误信息 java.lang.ClassCastException: org.slf4j.impl.Log4jLoggerFactory cannot be cast to ch.qos.logb ...
- H3C qos 简单配置
qos 有三种服务模型 Best-Effort service(尽力而为服务模型) Integrated service(综合服务模型,简称Int-Serv) Differentiated servi ...
- rabbitmq qos prefetch count的设置与作用
因为原来使用了MQ作为rpc机制,随着客户交易量越来越大,很多服务器推送行情的压力很大,最近打算重写为批量模式,又重新看了下qos和prefetch设置的作用以确定优化的具体细节. 消费者在开启ack ...
- 实时视频应用之QoS关键技术分析
转自:http://www.aiweibang.com/m/detail/104476372.html?from=p 随着WebRTC标准的逐步推广,实时音视频通讯技术受到越来越多公司和技术人员的关注 ...
- [QoS]cisco3560限速配置案例-收集于网工泡泡
网络中常用到这些:CISCO和H3C-MAC过滤+端口限速+端口镜像+端口隔离 不同的方式不同的思想:嘎嘎 其他各个厂商的限速链接:http://pan.baidu.com/s/1hrIMoSG 密码 ...
- QOS
QoS控制原理 · 基于设备的QoS保障技术——CAC· 基于优先级设置的QoS保障技术· 基于减小抖动的QoS保障-Jitter BufferIP传输在时延.抖动.丢包率方面的性能不及TDM传输,而 ...
随机推荐
- springmvc+mybatis的增删改查入门
先到官网了解mybatis的语法:https://mybatis.org/mybatis-3/zh/sqlmap-xml.html 前端用了thymeleaf和vue.js,效果图和demo地址:ht ...
- netcore使用EFcore(第一个实例)
说明:搭建netcore 使用efcore入门教程,跟着这个教程,傻瓜都可以成功!O(∩_∩)O哈哈~,咱们开始吧: 首先介绍下环境: vs2017, netcore2.2, EntityFramew ...
- 微信小程序自定义组件——接受外部传入的样式类
https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/wxml-wxss.html 外部样式类 有时, ...
- JavaScript获取页面元素的常用方法
1.通过标签获取元素,返回一个数组 var li = document.getElementsByTagName('li');//标签获取元素 li[0].innerHTML;// 查看获取元素的内容 ...
- CVE-2019-11604 Quest KACE Systems Management Appliance <= 9.0 XSS
CVE-2019-11604 Quest KACE Systems Management Appliance CVE-2019-11604 Quest KACE Systems Management ...
- kubernetes 应用快速入门
使用kubectl进行增.删.查.改等常用操作 查看kubectl命令帮助 kubectl -h kubectl controls the Kubernetes cluster manager. Fi ...
- [#Linux] CentOS 7 配置JDK后,eclipse无法启动,提示jdk路径错误。
解决方案:在eclipse的目录下创建一个jre文件夹,在jre文件夹里创建一个jdk的bin目录的链接 1.进入到eclipse目录下,右键在终端打开. 2.创建jre目录:mkdir j ...
- Json:Restful
JArray & JObject JArray与JObject在json的应用:无需定义相应的类对象,直接解析 JArray jarr = JArray.Parse(jsonStr); //数 ...
- WinServer-SMTP服务
摘要 SMTP服务是用来发送邮件的,常用于代码中发送邮件,不能接收.本章介绍SMTP服务的安装,配置. 搭建F5负载均衡集群注意事项: 1.集群不能与exchang在同网段,否则发不出邮件. 2.AP ...
- Linux 之 文件
文件名称 在linux中,windows概念中的文件夹和文件是没有区别的,都是统称为文件. 1.Linux中文件的名称大小写是敏感的 2.名称最多可以为255个字符 3.除了正斜线以外,都是有效字符 ...