想象你在管理一座大型物流园区,成百上千个仓库(服务器)之间需要日夜不停地搬运集装箱(数据)。传统运输方式很笨重:货车把货从 A 仓库拉到总部分拣中心(CPU),工作人员登记、重新分拣、再次装车(内核协议栈),再由另一辆货车运到 B 仓库。货物每转一次手,总部分拣中心就多一分拥堵,整个园区的运力被死死卡在“人最多”的环节上。如今出现了一种先进模式——RDMA(远程直接内存访问):持证货车(RDMA 网卡)直接开进 A 仓库的货架(内存),装上货后沿着专用公路直达 B 仓库的货架,全程不经总部分拣中心。货物不再绕路,车速更快,整条物流链畅通无阻。 然而,铺好一条“数据高速专线”只是开始。如何让货车排班更合理?车道怎么分配才不会堵死?堵车时如何快速疏导?园区道路怎么规划才不绕远?这就是 RDMA 性能调优要解决的问题。它决定了你的 AI 训练集群是“十辆货车满负荷狂奔”,还是“一辆车亮着警示灯龟速爬行”。本文从零讲起,用“直通物流”的故事带你理解 RDMA 的内核旁路、零拷贝、拥塞控制与拓扑调优,让你面对千卡集群时不再手足无措。

岗位关联

掌握 RDMA 性能调优,是 AI 算力工程师的核心竞争力——大模型训练、分布式推理、HPC 并行计算都依赖 RDMA 网络的每一微秒。能把它调好,你就在稀缺算力面前多了一份不可替代的底气。

目录
  1. 可视化演示
  2. RDMA基础概念
  3. 性能评估指标
  4. 关键参数配置
  5. 拥塞控制策略
  6. 拓扑与路由
  7. 问题诊断调优
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

本节配有交互动效(进入视口后自动加载,约 3KB)。

RDMA基础概念

物流园区的“直通专线”听起来美好,但它凭什么能绕过总部分拣中心?秘密在于三种特权:第一,货车(RDMA 网卡)拥有园区的直接进出权,不需要把货交给分拣中心再转手——这叫内核旁路;第二,货物可以从 A 仓库的货架直接被搬上货车,不用先在分拣台复制一份——这叫零拷贝;第三,分拣中心的工作人员(CPU)完全不用参与装货卸货,全程由货车司机自己搞定——这叫 CPU 卸载。有了这三件法宝,货物才能真正做到“入库即走、直达终点”。

把这个比喻落到技术上:传统 TCP/IP 传输中,数据要经过“应用缓冲区→内核缓冲区→网卡→对端内核→对端应用”的多次拷贝,每一次拷贝都是一次 CPU 参与的中转。而 RDMA 网卡通过硬件直接访问主机内存,把数据从发送端应用内存搬到接收端应用内存,中间不再经过内核协议栈。目前主流的 RDMA 实现方案有三种:InfiniBand(专属高速公路网,设备昂贵);RoCE(把 RDMA 跑在普通以太网上,性价比高,v2 版本使用 IP 路由);iWARP(利用 TCP 实现 RDMA,兼容性好但性能受限)。

由于绕开了 CPU 和内核,RDMA 的时延可以压缩到微秒级。我们用一个简单的公式来理解 RDMA 单次传输的延迟来源:

回到物流场景:RDMA 就像给园区开了“货车直达通道”,省去总部分拣中心这道最拥挤的关卡。理解了这个底层机制,你才会明白为什么后面所有的调优工作,都是为了让“专线更宽、货车更快、路上不堵”。

trdma=tnic+tlink+tmem\displaystyle t_{rdma} = t_{nic} + t_{link} + t_{mem}
这个公式说明:RDMA 延迟只剩网卡处理、链路传播、内存访问三部分,中间不再有内核协议栈的“中转排队”。
  1. 总延迟构成RDMA 一次数据传输的端到端延迟等于网卡处理开销、链路传播时间和内存访问时间之和。
    trdma=tnic+tlink+tmem\displaystyle t_{rdma} = t_{nic} + t_{link} + t_{mem}
  2. 网卡处理项网卡负责解析数据包头、DMA 搬运,通常只有 1~3 微秒。
    tnic=t解析+tDMA\displaystyle t_{nic} = t_{解析} + t_{DMA}
  3. 链路传播项数据在光纤或铜缆中飞行的时间,与两点间距离成正比,通常在亚微秒到几微秒。
    tlink=dv\displaystyle t_{link} = \frac{d}{v}
  4. 内存访问项网卡把数据写入接收端内存所需时间,与数据大小和内存带宽相关。
    tmem=sBmem\displaystyle t_{mem} = \frac{s}{B_{mem}}

性能评估指标

一条物流专线修好后,怎么判断它跑得好不好?不能只看货车数量,要综合看三个数字:单车能拉多少吨(带宽)、单件货从发货到签收要多久(时延)、一分钟能卸多少件(报文吞吐率)。这三个数字相互制约:路太宽但装卸慢,吞吐照样上不去;单件速度快但车装不满,总运力也不理想。RDMA 网络性能评估同样需要一套指标体系。

带宽(Bandwidth)衡量网卡每秒能传输的数据总量,常见的有 25Gbps、100Gbps、400Gbps,这是链路能力的上限,好比公路的设计时速。时延(Latency)衡量一个数据包从发送到接收的往返时间,RDMA 通常追求微秒级延迟,这直接影响大模型训练中每步迭代的等待时间。报文吞吐率(PPS)衡量每秒能处理的报文数量,尤其在传输大量小包时,PPS 往往比带宽更先触顶——就像卸货区人手不够,车再多也白搭。

实际调优中,我们更关心的是能跑出多少,而不是理论上限。带宽利用率就是最直观的指标:

物流管理者会每天盯着“车辆满载率”这个指标——如果专线上十辆车只有三辆装满,问题不在路,而在调度。同样,RDMA 调优第一步永远是测准指标:用 perftest 工具跑带宽和时延测试,把实测值与标称值对比,差距超过 10% 就要警惕。记住:指标不会说谎,它只是等待你去解读。

U=B实际B标称×100%\displaystyle U = \frac{B_{实际}}{B_{标称}} \times 100\%
如果一对节点实测带宽只有标称的 60%,说明链路或协议存在瓶颈,需要进一步定位。
  1. 实际带宽用工具(如 ib_write_bw)实测得到的一对节点间稳定传输速率,单位 Gbps。
    B实际=D总T耗时\displaystyle B_{实际} = \frac{D_{总}}{T_{耗时}}
  2. 标称带宽网卡和交换机协商出的链路额定速率,例如 100Gbps 网卡对应 100Gbps 标称。
    B标称=100 Gbps\displaystyle B_{标称} = 100\ \text{Gbps}
  3. 利用率计算实际带宽除以标称带宽再乘以 100%,得到链路被有效利用的比例。
    U=B实际B标称×100%\displaystyle U = \frac{B_{实际}}{B_{标称}} \times 100\%

关键参数配置

物流专线修好了,接下来要安排装卸规则:每个仓库开几个装卸口(QP 队列对)、装卸口的等待队伍排多长(队列深度)、货物地址提前办什么进场手续(内存注册)、每搬一批货要不要呼叫一次管理层(中断)。这些参数看似细节,却直接决定了专线的实际效率。

QP(Queue Pair,队列对)是 RDMA 通信的核心通道,每个 QP 包含一个发送队列和一个接收队列,好比仓库的一个“进货口”和一个“发货口”。QP 数量太少,并发连接不足;数量太多,又会占用大量内存并拖慢查找速度。配套的 CQ(完成队列)用来记录每次传输是否完成,类似“签收单登记簿”,它的深度必须足以容纳所有 QP 的完成事件。内存注册(MR)则要求应用提前把需要通信的内存区域“锁定”并登记到网卡,相当于给仓库地址做安保预审,避免传输出错。中断调节(Interrupt Moderation)则是把大量细碎的中断合并成批次处理,避免 CPU 被频繁打断。

CQ 深度配置有一个经验公式:完成队列条目数大致等于所有 QP 收发队列深度之和的两倍,确保最坏情况下登记簿不会写满:

回到物流园区的比喻:装卸口太少,货车全堵在门口;登记簿太薄,签收单会丢。调优的关键参数从来不是越大越好,而是“刚好匹配你的并发规模”。优秀的运维工程师,会像老练的调度员一样,根据实际业务量反复调整这些数字,让每个装卸口都不空闲,每本登记簿都不写满。

Mcq=2×Nqp×Dqp\displaystyle M_{cq} = 2 \times N_{qp} \times D_{qp}
CQ 太少会丢完成通知,QP 太浅则降低流水线吞吐——两者都要给足余量。
  1. QP 总数确定设集群中需要建立的队列对数量为 N_qp,来自并发连接规模。
    Nqp=并发连接数\displaystyle N_{qp} = \text{并发连接数}
  2. 队列深度配置每个 QP 的发送/接收队列深度设为 D_qp,通常 128~1024 之间。
    Dqp=27∼210\displaystyle D_{qp} = 2^{7} \sim 2^{10}
  3. CQ 深度计算完成队列需要覆盖所有 QP 收发两侧的完成事件,因此乘以 2。
    Mcq=2×Nqp×Dqp\displaystyle M_{cq} = 2 \times N_{qp} \times D_{qp}

拥塞控制策略

再宽的专线,遇到早高峰也会堵车。RDMA 网络中,成百上千条数据流同时涌向同一台交换机,就会形成拥塞。更麻烦的是,RDMA 的可靠传输机制不擅长处理丢包——丢一个包可能引发大量重传,性能断崖式下跌。所以,必须有一套“智能交通管制系统”提前预警、及时疏导。

这套系统叫 DCQCN(数据中心量化拥塞通知),它的工作流程很像城市快速路的“电子路牌”:交换机监测到队列长度超过阈值时,给数据包打上一个 ECN 标记(相当于路牌显示“前方拥堵”);接收端收到带标记的包后,把拥塞信号反馈给发送端;发送端收到反馈,立刻降低发送窗口(减少车流量)。没有收到 ECN 标记时,发送端则缓慢提升窗口,一点点试探路上能容纳多少车。

DCQCN 的核心是“乘性减窗、加性增窗”算法。当收到拥塞反馈时,当前窗口乘以一个小于 1 的因子快速缩小;当道路畅通时,窗口逐步缓慢增加。公式如下:

交通管制的精髓在于“提前预警、快速响应”。ECN 就是路牌上的黄色警示灯,DCQCN 就是收到警示后的减速规则。调优时,你需要根据集群规模和流特征调整 α 和 ECN 阈值:α 太大,车流量忽高忽低不稳定;α 太小,拥塞消退太慢。在 AI 训练场景中,数百个 GPU 节点同时通信,拥塞控制参数差之毫厘,训练速度就谬以千里。

Wnew=Wold×(1−α2)\displaystyle W_{new} = W_{old} \times \left(1 - \frac{\alpha}{2}\right)
DCQCN 让发送端在拥塞时“果断刹车”,在畅通时“温和加油”,把网络稳定维持在接近满载但不掉包的平衡点。
  1. 当前窗口发送端当前允许同时在途的数据量 W_old,单位可以是报文数或字节数。
    Wold=当前拥塞窗口\displaystyle W_{old} = \text{当前拥塞窗口}
  2. 降窗因子α 是配置的步长参数(典型值 0.1~0.5),决定收到 ECN 后窗口收缩的幅度。
    α=0.1∼0.5\displaystyle \alpha = 0.1 \sim 0.5
  3. 新窗口更新窗口乘以 (1 - α/2),实现“乘性减窗”,拥塞越严重缩得越多。
    Wnew=Wold×(1−α2)\displaystyle W_{new} = W_{old} \times \left(1 - \frac{\alpha}{2}\right)

拓扑与路由

物流园区再大,路网规划不合理,货车照样绕远路。RDMA 网络的拓扑结构决定了数据从 A 到 B 最多能走几条路、每条路多宽。现代 AI 集群普遍采用 Fat-Tree(胖树) 拓扑:像一棵倒置的树,下层是服务器接入交换机,中层是汇聚交换机,顶层是核心交换机,且越往上层链路越宽,保证任何一对节点之间都有足够带宽。

Fat-Tree 最吸引人的特性是“对分带宽”——把网络从中间切一刀,两边之间能同时传输的数据总量。如果构建一个 k 元 Fat-Tree(每台交换机有 k 个端口,单端口速率为 S),那么对分带宽公式为:

拓扑定了,还要解决“怎么走”的问题。ECMP(等价多路径)让网络像地图 App 一样把流量分散到多条平行路线上,避免“一条路堵死、一条路空着”。此外,将不同业务(如训练流量、存储流量)放到不同 VLAN 或子网中实现网络隔离,相当于让货车、客车、危险品车各走各的专用道,互不干扰。拓扑调优的最终目标是:让每条链路利用率均衡,让每个数据包都有“最优路线”可走。

Bbis=(k2)2×S\displaystyle B_{bis} = \left(\frac{k}{2}\right)^{2} \times S
对分带宽越大,任意两点间的“物流通道”越宽,发生拥堵的概率越低。
  1. k 元定义k 表示每台交换机的端口数,k 越大,网络规模和对分带宽都越大。
    k=交换机端口数\displaystyle k = \text{交换机端口数}
  2. 核心交换机数量k 元胖树顶层有 (k/2)² 台核心交换机,它们构成全网的“最宽路段”。
    Ncore=(k2)2\displaystyle N_{core} = \left(\frac{k}{2}\right)^{2}
  3. 对分带宽计算核心交换机数量乘以单端口速率,得到网络横截面的总带宽。
    Bbis=(k2)2×S\displaystyle B_{bis} = \left(\frac{k}{2}\right)^{2} \times S

问题诊断调优

再精密的系统也会出故障。当物流效率突然下降时,你会怎么做?第一步看今天的发货量(带宽)是不是低了,第二步查是不是某个环节堵住了(丢包、队列溢出),第三步翻明细记录(计数器)找线索。RDMA 性能调优也是同样的套路:发现问题→定位瓶颈→确认根因→针对性调整。

一个非常实用的诊断工具是 perftest 套件,其中的 ib_write_bw 和 ib_read_lat 分别测试写带宽和读时延,是 RDMA 工程师的“体温计”和“血压计”。当性能不达标时,常见的排查路径是:先用工具确认“是否真的慢”,再对比标称值定位是发送端、链路还是接收端的问题,然后检查网卡计数器是否出现丢包、CRC 错误,最后查看交换机侧的 ECN 标记是否过多。

排查网络问题时,有一个核心概念必须理解:带宽延迟积(BDP)——即“这条管道里最多能容纳多少在途数据”:

调优不是玄学,而是一套可重复的方法论。就像经验丰富的物流经理听到“最近送货变慢了”,不会先换车,而是查道路、查装车、查签收流程——RDMA 工程师面对训练变慢,也应先跑标准测试、看计数器、分层定位,而不是盲目改参数。当你拿着 perftest 数据、对分带宽和 BDP 三把“尺子”,任何网络疑难杂症都能被一步步拆解。

BDP=B带宽×RTT往返时延\displaystyle BDP = B_{带宽} \times RTT_{往返时延}
如果发送窗口小于 BDP,链路就喂不饱;如果接收缓冲区小于 BDP,数据就只能被丢弃。
  1. 链路带宽B_带宽 是管道每秒可通过的数据量,例如 100Gbps。
    B带宽=100 Gbps\displaystyle B_{带宽} = 100\ \text{Gbps}
  2. 往返时延RTT 是数据包从发送端到接收端再返回的耗时,RDMA 场景下通常几十微秒。
    RTT=t发送+t处理+t返回\displaystyle RTT = t_{发送} + t_{处理} + t_{返回}
  3. 在途容量两者相乘得到管道内最大可容纳的数据量,决定窗口和缓冲区下限。
    BDP=B带宽×RTT\displaystyle BDP = B_{带宽} \times RTT

AI 应用场景

大模型训练集群的网络保障

阶段:训练基础设施优化

解决的问题:千亿参数大模型训练采用张量并行、数据并行等策略,每迭代一步都要进行海量 AllReduce 通信。传统 TCP 网络时延高、CPU 占用大,导致 GPU 大量时间在“等数据”;RDMA 专线 + 合理调优后,通信时间可压缩 3~5 倍,GPU 利用率显著提升。

具体案例:某团队训练 1750 亿参数模型时,通过调整 QP 数量与 CQ 深度、开启 DCQCN 拥塞控制、并确认 Fat-Tree 拓扑对分带宽充足,将 1024 卡集群的 AllReduce 时间从 42 秒以上降到 11 秒,单步迭代时间缩短近三成。

分布式存储系统的带宽挖潜

阶段:数据读写链路调优

解决的问题:AI 训练前需要从分布式存储(如 Ceph、Lustre)加载海量数据集。传统存储网络瓶颈在 CPU 协议栈,读大文件时带宽利用率低;RDMA 直通内存后,存储节点间数据搬运绕过 CPU,让小文件和大文件都能跑满链路标称带宽。

具体案例:一个自动驾驶数据平台使用 RoCEv2 网络承载 Ceph 存储流量,通过配置内存注册池、调整中断聚合,并利用 ECMP 做多路径负载均衡,将 4K 小文件读取的 IOPS 提升了 2.1 倍,大文件读带宽达到线速的 92%。

HPC 科学计算的时延压榨

阶段:并行计算通信优化

解决的问题:分子动力学、天气模拟等 HPC 应用对节点间通信时延极度敏感,微小的延迟波动都会被放大成整体计算时间的增加。RDMA 的微秒级时延和确定性传输,让海量小消息在高频同步中也能保持稳定。

具体案例:某超算中心对 MPI 通信库进行 RDMA 优化,将消息延迟从 TCP 下的 12 微秒压到 1.8 微秒,同时配合拓扑友好的路由策略,使一个 2048 核的流体力学模拟任务性能提升约 1.6 倍。

Python 演示

python50 行
# -*- coding: utf-8 -*-"""简易RDMA拥塞控制窗口模拟器。模拟多流共享瓶颈链路时DCQCN的动态降窗与加性增窗。"""import math  class Flow:    """模拟一条RDMA流,维护拥塞窗口cwnd"""     def __init__(self, flow_name, init_cwnd, rtt_ms):        self.flow_name = flow_name        self.cwnd = init_cwnd        self.rtt_ms = rtt_ms        self.sent_count = 0     def apply_ecn(self, alpha):        """收到ECN标记:乘性减窗"""        self.cwnd *= (1.0 - alpha / 2.0)     def normal_growth(self, step):        """未拥塞:加性增窗"""        self.cwnd += step  def simulate(total_time_ms, bottleneck_rate, alpha=0.5, add_step=0.1):    """模拟多流共享瓶颈链路时的拥塞窗口演化"""    flows = [        Flow("流A", init_cwnd=8.0, rtt_ms=2),        Flow("流B", init_cwnd=8.0, rtt_ms=3),        Flow("流C", init_cwnd=8.0, rtt_ms=4),    ]    history = []    for t in range(0, total_time_ms, 1):        total_demand = sum(f.cwnd / f.rtt_ms for f in flows)        ecn = total_demand > bottleneck_rate        for f in flows:            if ecn:                f.apply_ecn(alpha)            else:                f.normal_growth(add_step)            f.sent_count += 1        history.append((t, [round(f.cwnd, 2) for f in flows], ecn))    return history  if __name__ == "__main__":    hist = simulate(200, bottleneck_rate=6.0)    last = hist[-1]    print("时间: {}ms  窗口: {}  是否拥塞: {}".format(last[0], last[1], last[2]))    ecn_cnt = sum(1 for _, _, e in hist if e)    print("拥塞占比: {:.1f}%".format(100.0 * ecn_cnt / len(hist)))
目的:用 Python 复现 DCQCN 的“乘性减窗/加性增窗”机制,观察多条 RDMA 流在共享瓶颈链路下窗口如何动态收敛,避免网络崩溃。
  1. self.cwnd *= (1.0 - alpha / 2.0)核心降窗逻辑:收到 ECN 拥塞信号后,窗口按比例收缩,对应 DCQCN 的乘性减窗。
  2. self.cwnd += step畅通环境下的加性增窗:每次 RTT 小幅抬升窗口,试探链路余量。
  3. total_demand = sum(f.cwnd / f.rtt_ms for f in flows)把所有流的“在途数据密度”求和,与瓶颈速率对比判断是否拥塞。
  4. ecn = total_demand > bottleneck_rate当总需求超过瓶颈链路容量时,触发 ECN 标记,等价于交换机队列超阈值。
  5. history.append((t, [...], ecn))记录每个仿真时刻的窗口演化,方便后续可视化分析。

常见误区

误区我刚接触 RDMA 调优,总想着把队列对数量和完成队列深度都调到最大,觉得参数越大越不容易出问题,性能一定更快。

正解QP 和 CQ 并非越大越好。每个 QP 都要占用网卡和内存资源,QP 过多会耗尽内存并降低查找效率;CQ 过深同样浪费内存。正确做法是根据实际并发连接数推导 CQ 深度,参照 M = 2 × N × D 留出余量即可,就像装卸口不是越多越好,多了反而占地方。

为何常见:初学者的直觉是“资源给足总没错”,却没意识到 RDMA 的性能瓶颈往往不在资源总量,而在资源的合理匹配与 CPU 的查找效率。

误区我觉得数据包丢了就丢了,RDMA 有可靠传输机制,重传一下就好,不用太在意丢包率,反正功能上不会出错。

正解RDMA 的重传代价远高于 TCP。一个丢包可能触发大量报文重传,拥塞像滚雪球一样放大,导致带宽利用率从 90% 瞬间跌到 30%,训练任务停滞。RoCE 网络尤其依赖“无损”链路,调优的目标是“尽量不丢包”,而不是“丢包后能恢复”。

为何常见:受 TCP 时代“丢包检测+重传”思维惯性影响,容易忽视 RDMA 的高吞吐场景对丢包的极端敏感性。

误区我只看 ib_write_bw 跑出来的带宽数字,觉得只要带宽接近线速,RDMA 网络就没问题,不用关心延迟和 PPS。

正解带宽只是网络能力的一个维度。AI 场景中大量短消息的同步延迟同样是性能关键;小包海量场景下,PPS 才是先触顶的瓶颈。必须同时评估带宽、时延与报文吞吐率,综合判断。就像物流园区不仅看总运力,还要看单件时效和卸货效率。

为何常见:带宽数字直观、好测、容易理解,而延迟抖动和 PPS 需要更细致的测试手段,容易被人忽略。

误区我以为只要买了支持 DCQCN 的交换机,拥塞控制就自动生效了,主机网卡端不需要额外配置,反正算法在交换机侧运行。

正解DCQCN 是“交换机 + 网卡”的双端协议:交换机负责打 ECN 标记,但真正执行拥塞窗口调整的是主机端网卡。发送端必须启用相关参数并合理配置 α 和阈值,整条链路才能联动。主机不管,等于路牌立了但司机不看,照样堵。

为何常见:人们习惯把网络问题归结为设备问题,忽略了 RDMA 是端到端的协同机制,主机端的参数同样决定拥塞控制的成败。

误区我想验证 RDMA 网络性能时,直接用 iperf 或 ping 测带宽和时延,觉得都是测网络,用什么工具差别不大。

正解iperf 测的是 TCP 协议栈性能,根本走不到 RDMA 通路;ping 测的是 ICMP 时延,同样不反映 RDMA 实况。必须使用 perftest 套件(ib_write_bw、ib_read_lat 等),它们直接基于 IB 动词接口发起 RDMA 操作,测出的才是真实有效的 RDMA 带宽和延迟。

为何常见:许多工程师从 TCP 网络转过来,习惯用熟悉的工具,不理解测试工具必须匹配待测协议栈,导致测出的“性能差”其实是工具用错了。

面试题

Q1. RDMA 相比传统 TCP/IP 传输最本质的架构差异是什么?

单选题 · easy

  • A.带宽更高,网卡速率更快
  • B.数据绕过内核协议栈直达应用内存← 正确答案
  • C.使用光纤介质进行传输
  • D.增加了重传机制保证可靠

答案:B。RDMA 的核心是内核旁路 + 零拷贝,让网卡直接读写应用内存,省去内核中转。带宽高、用光纤、有重传都不是它区别于 TCP 的本质。就像专线货车直达仓库,而不是经过总部分拣中心再出发。

Q2. RDMA 单次传输延迟由哪三部分构成?

单选题 · easy

  • A.网卡处理、链路传播、内存访问← 正确答案
  • B.磁盘读取、CPU 拷贝、内核调度
  • C.交换机转发、路由计算、MAC 寻址
  • D.序列化、排队、中断响应

答案:A。RDMA 延迟公式 t = t_nic + t_link + t_mem,网卡处理头部解析与 DMA、链路传播与距离相关、内存访问是写入对端内存。CPU 拷贝和内核调度正是 RDMA 想要去掉的部分,因此 B 错。

Q3. 实测一对 100Gbps RDMA 节点带宽为 85Gbps,带宽利用率是多少?

单选题 · easy

  • A.15%
  • B.85%← 正确答案
  • C.100%
  • D.8.5%

答案:B。利用率 = 实际带宽 / 标称带宽 × 100% = 85 / 100 × 100% = 85%。15% 是损失率而非利用率;100% 是标称值而非实测结果;8.5% 是小数位错误。带宽利用率是调优中最直接的体检指标。

Q4. DCQCN 拥塞控制中,发送端收到 ECN 反馈后如何调整拥塞窗口?

单选题 · mid

  • A.立即清零,停止发送
  • B.按因子乘性减窗,如 W × (1 - α/2)← 正确答案
  • C.保持不变,等待更多信号
  • D.增加窗口,尝试冲过去

答案:B。DCQCN 采用“乘性减窗、加性增窗”:收到 ECN 后窗口乘以小于 1 的因子快速收缩,畅通时逐步增加。A 清零会导致吞吐骤降;C 不响应无法消解拥塞;D 增加窗口会加剧拥塞。

Q5. 在 k 元 Fat-Tree 拓扑中,对分带宽的计算公式是?

单选题 · mid

  • A.k × S
  • B.k² × S
  • C.(k/2)² × S← 正确答案
  • D.(k/2) × S

答案:C。k 元 Fat-Tree 顶层有 (k/2)² 台核心交换机,每台提供端口速率 S,因此对分带宽为 (k/2)² × S。A 是一台核心交换机的容量;B 高估了;D 只算了一层的一半,都不符合胖树结构。

Q6. 带宽延迟积(BDP)表示什么含义?

单选题 · mid

  • A.链路能容纳的最大在途数据量← 正确答案
  • B.网卡处理一个包所需时间
  • C.数据包在光纤中的传播速度
  • D.交换机转发表的最大条目数

答案:A。BDP = 带宽 × 往返时延,表示数据在链路上“飞行”时能同时容纳的总数据量。它是配置发送窗口和接收缓冲区的依据。B 是处理时延、C 是光速常量、D 是交换机转发表容量,均与 BDP 无关。

Q7. RDMA 网络中下列哪个场景最容易导致性能断崖式下降?

单选题 · hard

  • A.网络带宽利用率达到 50%
  • B.交换机出现微突发丢包← 正确答案
  • C.CQ 深度设置为 QP 深度的三倍
  • D.内存注册区域小于传输数据量

答案:B。RDMA 对丢包极其敏感,一次丢包可能引发大量重传和拥塞崩溃。利用率 50% 尚有充足余量;CQ 深度三倍是合理配置;内存区域小于传输量会报错而非断崖,且这属于配置错误。丢包是运维中最常见的性能杀手。

Q8. 下列哪些属于 RDMA 网络的关键性能评估指标?

多选题 · mid

  • A.带宽利用率← 正确答案
  • B.端到端延迟← 正确答案
  • C.报文吞吐率 PPS← 正确答案
  • D.交换机风扇转速

答案:ABC。带宽、时延、PPS 是 RDMA 性能三大指标:带宽反映运力上限、时延反映单件时效、PPS 反映装卸效率。风扇转速是硬件健康指标,不直接反映网络性能。

Q9. RDMA 性能调优中,哪些做法有助于缓解网络拥塞?

多选题 · mid

  • A.启用 DCQCN 并合理设置 α 参数← 正确答案
  • B.使交换机正确打 ECN 标记← 正确答案
  • C.无限增大发送窗口
  • D.采用 ECMP 多路径负载均衡← 正确答案

答案:ABD。DCQCN、ECN 标记、多路径均衡都能消解拥塞。无限增大发送窗口反而会加剧瓶颈链路压力,让拥塞更严重,因此 C 错误。拥塞控制是端到端的协同,需要主机和交换机配合。

Q10. 定位 RDMA 网络性能瓶颈时,下列哪些步骤是合理的?

多选题 · hard

  • A.用 perftest 跑带宽和时延基准测试← 正确答案
  • B.直接调大所有 QP 参数再观察
  • C.检查网卡丢包和 CRC 错误计数器← 正确答案
  • D.用 BDP 核对窗口和缓冲区配置← 正确答案

答案:ACD。正确方法是“先测试、再定位、后调参”:perftest 建立基线,计数器找丢包证据,BDP 校验窗口配置。盲目调大所有参数正是初学者常见误区,可能让问题更隐蔽,因此 B 不合理。