文章目录
快速回忆
mlnx_qos -i enp65s0f0np0 #查询当前配置
mlnx_qos -i enp65s0f0np0 --trust=dscp #将网卡的qos模式设置为dscp,默认是pcp
mlnx_qos -i enp65s0f0np0 --dscp2prio set,63,0 #添加:告诉硬件网卡,将dscp为63的报文映射到硬件优先级队列0
mlnx_qos -i enp65s0f0np0 --dscp2prio del,63,0 #删除
mlnx_qos -i enp65s0f0np0 --prio2buffer 1,0,2,3,4,5,6,7 #将表示优先级0,配置buf1; 优先1配置buf0。参数是priid,设置到buffer的存储寄存器上,配置的是prio的值。如命令所示是从prio到buf。buf顺序省略依次来
mlnx_qos -i enp65s0f0np0 --prio_tc 1,0,2,3,4,5,6,7 #将tc0设置prio1.设置到tc的寄存器上,指定的prio值。使用的时候用某个tc0,从这里读取对应的prio值。然后查询prio对应的buf是哪个。如命令所示是prio到tc。tc顺序省略依次来
仲裁的核心是优先级。运行时候用dscp得到优先级,用优先级得到buf决定存哪儿,用优先级得到tc决定有什么pipline处理。
关键图:
1. 背景要点
RDMA的ROCeV2报文基于IP报文。
IP报文通过IP头部的TOS(Type of service)字段(也叫DS:Differentiated Services,参考下图报文)对包流量分类,提供报文的差异化质量服务QOS。TOS字段总的一个Byte 8个bits,前6bits是DSCP字段(差异化服务代码点Differentiated Services Code Point是3层IP网络进行网络流量分类和流量控制)。后2个bit是ECN(显式拥塞通知Explicit Congestion Notification,是用来进行拥塞管理的,数据包从端-交换机-端流程中,流经交换机如果出现交换机拥塞(准确讲是超过交换机配置的认为拥塞的水位线)后,会将该IP报文的ECN字段标记为11,表示数据传输中出现了拥塞,当端侧收到被标记ECN的报文后,接收端会发送一个CNP报文给发送端,以控制发送端进行拥塞控制,进行降速。 ECN字段00表示不支持,01或者10表示支持并未发生拥塞,11表示出现拥塞。如果出现11既表示链路有拥塞,也表示这个报文被正常报文传输慢些到达)
为什么要提供差异化质量服务?是针对不同的业务流量,比如会议中的语音和视频,语音更需要保障实时性,那么语音和视频就需要使用不同的优先级传输。优先级传输在网卡、交换机等流量传输主体中都是通过假设是走IP报文,那么就可以用IP报文中的TOS字段来标记。假设语音TOS字段是10,视频是20。然后全链路交换机配置10字段的优先级更高,就算交换机数据包巨大,TOS=10的报文也将高优先级传输,从而保证服务质量。
Mellanox中IP的TOS字段有两种模式,一种是基于IP的DSCP+ECN模式,一种是基于VLAN的PCP(Priority Code Point)模式。DSCP是软件实现,PCP在交换机上支持硬件加速)
他们的历史参考:
时期1:RFC791 3bit优先级
时期2:IP层支持RFC1394 ToS(服务类型)
时期3:DSCP(区分服务代码点)在RFC2474 引入,支持更广泛和通用以及更多(64分类)
时期4:支持加急转发的RFC2598,让线路租用成为可能
时期5:再到 RFC2697,将DSCP增强进行进一步分类,支持白金、金银铜服务级别的转发
2. Mellanox网卡如何设置dscp对应的硬件队列
所谓设置dscp对应的硬件队列,实际上是告诉网卡收发等模块,不同的dscp的报文在什么硬件队列中处理进行流量分类,也会根据这个dscp来定义流量控制。
DSCP总的6个bits,支持2^6=64种,也就是可以将报文classify到64种。这些DSCP分类,业界又分为白金、金牌、银牌铜牌服务(参考801.1p)
2.1 将dscp绑定到网卡的硬件队列
2.1.1 命令用法
2.1.1.1 查询当前网卡中dscp对应的硬件优先级队列
mlnx_qos -i enp65s0f0np0
效果:(dscp模式的)
2.1.1.2 设置mellanox网卡使用dscp模式
mlnx_qos -i enp65s0f0np0 --trust=dscp