【Mellanox命令系列之mlnx_qos设置DSCP】如何绑定流量类型DSCP与网卡硬件队列,为什么设置,如何生效?(--trust=dscp; --dscp2prio set,63,0)

快速回忆

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  
<think>嗯,用户问的是关于CX7网卡性能测试速率不达标的问题,我需要先了解一下CX7网卡的基本情况。首先,CX7可能是Mellanox(现在是NVIDIA的一部分)的ConnectX系列网卡,通常用于高性能计算和数据中心。这类网卡支持高带宽,比如100Gbps或200Gbps,所以速率不达标可能涉及多个方面。 用户可能是IT工程师或者系统管理员,他们在部署或维护网络设备时遇到了性能问题。需要明确测试环境,比如是单机测试还是多节点,用的什么测试工具,比如iperf3、ntttcp还是其他。另外,硬件配置也很重要,比如服务器的PCIe版本是否匹配,因为PCIe 3.0 x16只能支持大约128Gbps,而PCIe 4.0则更高,如果网卡200Gbps,可能需要PCIe 4.0才能充分发挥性能。 接下来要考虑驱动和固件版本。Mellanox网卡通常需要特定的驱动和固件,旧版本可能存在性能问题或bug。用户可能没有更新到最新版本,或者版本不兼容当前的系统。 网络配置方面,MTU设置是否正确?巨帧(jumbo frame)是否开启?如果两端MTU不匹配,会导致分片,影响吞吐量。还有,是否启用了流控(flow control),或者是否有网络拥塞,比如交换机端口配置错误,或者存在其他流量干扰。 CPU和内存也可能成为瓶颈,特别是在高吞吐量下,如果CPU处理能力不足,或者没有足够的IRQ平衡,导致某些CPU核心过载。此外,NUMA架构下,如果网卡和CPU不在同一节点,跨NUMA访问会增加延迟,影响性能。 测试方法是否正确?比如使用单线程测试可能无法达到最大带宽,需要多线程并行。例如,iperf3默认单线程,可能受限于单个CPU核心,使用-P参数启动多个线程。测试时间是否足够长,避免TCP慢启动阶段影响结果。 线缆和光模块的问题也不能忽视,是否使用了兼容的型号,或者线缆有损坏。比如,使用第三方模块可能有兼容性问题,导致速率下降。 系统参数调优,比如调整内核网络参数(如TCP窗口大小、缓冲区大小),或者启用RDMA(RoCE)加速,这需要相应的配置,否则可能无法发挥性能。 虚拟化环境下,比如VMware或KVM,虚拟交换机配置是否正确,是否分配了足够的虚拟CPU,或者有没有启用SR-IOV等直通技术,避免虚拟化开销。 安全软件或防火墙可能也会干扰流量,检查是否有iptables规则或安全组限制。 最后,硬件故障的可能性,虽然较低,但网卡或端口损坏也会导致性能下降,可以尝试更换端口或网卡测试。 总结下来,需要逐步排查硬件、驱动、配置、测试方法等多个方面。用户可能需要一个结构化的排查步骤,先检查硬件连接,再确认驱动和固件,然后调整网络配置和系统参数,最后进行测试验证。可能需要提供具体的命令或配置示例,比如如何更新驱动,如何设置巨帧,或者如何使用多线程测试工具。当</think>使用Mellanox ConnectX-7(CX7)网卡进行性能测试时,若速率不达标,可能涉及多个层面的问题。以下是常见原因及排查步骤,以结构化的方式呈现: --- ### **一、硬件环境检查** 1. **PCIe带宽瓶颈** - **问题**:CX7支持200Gbps(如NVIDIA ConnectX-7 NDR),需PCIe 4.0 x16(理论带宽约64GB/s)。 - **检查**:确认服务器PCIe插槽版本和通道数(如`lspci -vv`查看`LnkSta`字段)。 - **解决**:更换为PCIe 4.0插槽,避免使用x8或x4模式。 2. **线缆光模块** - **问题**:使用劣质/不兼容线缆(如DAC/AOC)或光模块(QSFP56/OSFP)。 - **检查**:替换为官方认证模块,通过`ethtool -m <接口>`读取光模块信息。 - **解决**:确保两端模块类型、速率一致(如两端均为200G NDR)。 --- ### **二、驱动固件** 1. **驱动版本** - **问题**:旧版驱动可能无法发挥性能(如MLNX_OFED需≥5.5)。 - **检查**:`modinfo mlx5_core`查看驱动版本。 - **解决**:从[NVIDIA官网](https://www.nvidia.com/download/index.aspx)下载最新驱动。 2. **固件更新** - **问题**:固件未适配高速率模式。 - **检查**:`mlxfwmanager`查询固件状态。 - **解决**:通过`mstflint`工具升级固件。 --- ### **三、网络配置优化** 1. **MTU巨帧** - **问题**:默认MTU(1500)可能导致小包效率低。 - **解决**:设置MTU=9000(需交换机支持): ```bash ip link set dev <接口> mtu 9000 ``` 2. **流控拥塞管理** - **问题**:误开启流控(Flow Control)导致吞吐波动。 - **检查**:`ethtool -a <接口>`。 - **解决**:关闭流控(按需): ```bash ethtool -A <接口> rx off tx off ``` 3. **RDMA/RoCE配置** - **问题**:未启用RDMA加速(CX7支持RoCEv2)。 - **解决**: - 加载RDMA模块:`modprobe rdma_ucm` - 配置优先流量类型(PFC)和DSCP(需交换机配合)。 --- ### **四、系统调优** 1. **CPU亲和性IRQ平衡** - **问题**:多队列绑定导致CPU竞争。 - **检查**:`cat /proc/interrupts`查看网卡中断分布。 - **解决**:使用`irqbalance`或手动绑定: ```bash for irq in $(grep <接口> /proc/interrupts | awk '{print $1}' | tr -d :); do echo <CPU掩码> > /proc/irq/$irq/smp_affinity done ``` 2. **内核参数优化** - **调整TCP缓冲区**(提升大流量吞吐): ```bash sysctl -w net.core.rmem_max=268435456 sysctl -w net.core.wmem_max=268435456 ``` --- ### **五、测试方法验证** 1. **多线程测试** - **问题**:单线程测试无法占满带宽(如iperf3单线程上限约30Gbps)。 - **解决**:使用多线程(如`iperf3 -P 16`)或专用工具: ```bash # 使用nuttcp(更高效) nuttcp -T 30 -p 5001 -P 32 <目标IP> ``` 2. **跨节点测试** - **问题**:单机本地回环(loopback)测试不真实。 - **解决**:确保测试跨两台物理机,且交换机配置无误(如端口速率、STP关闭)。 --- ### **六、高级排查工具** 1. **性能诊断工具** - **Mellanox工具**:使用`mlx5_core`调试模块,开启性能统计: ```bash devlink dev info pci/0000:03:00.0 ``` - **Perf分析**:通过`perf top`检查CPU是否成为瓶颈。 2. **硬件诊断** - **误码率检查**:`ethtool -S <接口> | grep errors`。 - **NIC内部统计**:`mlx5_fs_dump -p <接口>`查看流表状态。 --- ### **七、虚拟化场景注意** - **SR-IOV配置**:确保VF直通且分配足够资源。 - **DPDK优化**:在NFV场景下,切换至用户态驱动(如绑定VFIO-PCI)。 --- 通过以上步骤逐步排查,多数性能问题可定位。若仍不达标,建议联系NVIDIA官方支持,提供`sysinfo`工具生成的诊断日志。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值