【RoCE】Flow Control

概览

RoCE可以实现lossless无损网络环境,在二层网络上做到可靠网络传输,从而对原本在光纤网络环境下的应用在以太网环境下提供相同的服务,而不必对应用逻辑和上层协议更改。实现无损的方法有Global Pause, PFC, Dropless Receive Queue。

1.什么是802.3x Flow Control(Global Pause)?

以太网标准(802.3)设计时是不可靠的网络。不保证网络包会到达目的地像上层协议(如TCP)设计的将会到达目的地一样。后来,IEEE 802.3x 流控制标准为那些在上层一些不能保证可靠性的应用制定了一套标准。它能够接收从接收方发给发送方的缓存回馈(buffer feedback,例如overflow)。暂停动作(XOFF)是一个由接收方发给发送方的控制帧,告诉它接收缓存空间出现压力并且在不久可能会溢出。发送方立刻停止发送任何新的数据包予以回应,直到接收方准备再次接收它们为止。这个暂停帧包含一个timeout值。发送方会在这个超时范围内等待,或者直到收到一个XON控制消息后,再开始发送。IEEE 802.3x存在一个基本的缺点:一旦链路被暂停了,发送方就不能再产生任何新的包。结果,在一个端口上使用Global Pause流控制时,以太网链路不能负载需要不同QoS行为的多条网络流。也就是说,它会在该端口上暂停类型任何包括高优先级的网络流。不仅如此,如果这条链路出现在网络中的两个交换机上时,这个暂停动作可能会阻塞那些不需要暂停的服务器之间的流,导致大面积瘫痪。

2.什么是802.1Qbb Priority Flow Control(PFC)?

IEEE 802.1Qbb PFC将基本的IEEE 802.3x扩展成8个类别。它使得需要流控制的应用和不需要流控制的应用可以在同一条链路上共存。PFC对8种不同类型的流都做了定义,可以达到流控制效果。在2层网络的情况下,PFC使用VLAN标签(IEEE 802.1q)中的PCP位来区分八种不同类型的网络流,使得它们可以享受到独立的流控制。

[注意:PFC和Global Pause不能同时运行在同一个网络接口上,二者只能存其一]

3.什么时候使用PFC,它和QoS的关系又是什么呢?

当应用需要无损网络环境时(也就是说当应用使用的上层网络协议不保证可靠性传输时),PFC应该被启用以防止网络丢包,这通常是针对从光纤网络迁移到以太网上的应用。

当网络上存在多条网络流,而且这些网络流需要有差别的服务时(比如延迟敏感),应该启用QoS特性。可见PFC与QoS并无直接关系,但是他们可以应用到同一个网络队列上。

4.PFC具体在硬件上怎么实现的?

每个网卡硬件上有8个硬件发送队列,用于接收从各个CPU上的软件发送队列中的数据包,这些队列命名为Traffic Class,分别为TC0,TC1,...,TC7。而PFC策略可以通过mlnx_qos命令来对每个TC进行设置,因此可以细粒度的对每个TC启用PFC,使得上层应用可以同时选择有流控制和没有流控制的网络服务。

5.什么是Dropless Receive Queue?

无丢包接收队列可以在当软件接收队列过载时,让驱动通知固件。这种情况发生在当软件接收队列的处理速度比硬件接收队列的处理速度慢时。当启用这种特性后,在接收队列满载时,新接收的网络包不会被立刻丢掉。固件会累积这些包,并且假设软件会很快放置新的WQEs。如果过了一个固定的时间段后,新的接收WQE仍然没有放置,缓存溢出计数器会增长,暗示网络数据包已经被丢掉了。这种特性默认是禁用的。如果要启用该特性,要确保上述的流控制特性也得启用了一个。

启用方式:ethtool --set-priv-flags <interface> dropless_rq on, 关闭方式是off

查看信息:ethtool --show-priv-flags <interface>
 

<think>嗯,用户想了解RDMA和RoCE之间的区别。首先,我需要确认自己对这两个概念的理解是否正确。RDMA(远程直接内存访问)是一种技术,允许计算机直接从另一台计算机的内存中读取或写入数据,而无需操作系统的介入。这样可以减少延迟和CPU开销,对吧?而RoCE(RDMA over Converged Ethernet)应该是在以太网上实现RDMA的技术,可能分为RoCEv1RoCEv2两个版本。 接下来,用户可能想知道它们之间的主要区别。我需要从多个方面来比较,比如网络层、协议依赖、部署场景、配置复杂性以及兼容性。例如,RoCEv1是基于以太网链路层的,而RoCEv2则使用UDP/IP协议,这样可以在三层网络上运行,可能更适合大规模的数据中心环境。此外,RoCE需要支持无损以太网,可能需要PFC和ECN等流控机制,而InfiniBand可能不需要这些,因为它有自己的链路层控制。 还要注意用户提到的引用内容,比如引用3提到RDMA绕过了内核,使用Verbs API,而RoCE作为RDMA的一种实现方式,应该也是基于这个API的。同时,引用2提到了安装RDMA驱动和库,可能说明RoCE在部署时需要特定的软件支持,而InfiniBand可能需要不同的硬件设备。 需要区分RoCE与其他RDMA实现,比如InfiniBand和iWARP。iWARP是在TCP上实现的RDMA,而RoCE是在以太网上。RoCEv2支持路由,而RoCEv1只能在二层网络中使用。这些点都是用户可能关心的差异。 另外,用户的问题可能涉及到应用场景,比如高性能计算常用InfiniBand,而云环境可能更倾向于使用RoCE,因为可以利用现有的以太网设施。同时,配置方面,RoCE可能需要更多的网络配置,比如PFC,而InfiniBand有自己的管理机制。 最后,要确保回答结构清晰,分点列出差异,并引用提供的资料来支持观点。可能还需要生成相关问题,比如如何配置RoCE网络,或者RDMA的应用场景有哪些,以帮助用户进一步探索。</think>### RDMA与RoCE的区别 #### 1. **技术定义与目标** - **RDMA(Remote Direct Memory Access)** 是一种网络技术,允许计算机直接从另一台计算机的内存中读写数据,无需经过操作系统内核和CPU干预,从而降低延迟和CPU负载。其核心目标是实现零拷贝(Zero-Copy)和内核旁路(Kernel Bypass)[^3]。 公式示例:数据传输延迟优化为 $T_{\text{RDMA}} = T_{\text{network}} + T_{\text{DMA}}$。 - **RoCE(RDMA over Converged Ethernet)** 是RDMA技术的一种实现方式,基于以太网协议栈传输RDMA操作。分为两个版本: - **RoCEv1**:基于以太网链路层(Layer 2),仅支持同一子网内通信。 - **RoCEv2**:基于UDP/IP协议(Layer 3),支持跨子网路由[^1]。 #### 2. **协议依赖与网络层** | 特性 | RDMA(广义) | RoCE | |-------------------|-----------------------|---------------------------| | 底层协议 | 多种实现(InfiniBand、iWARP、RoCE) | 以太网(IEEE 802.3) | | 网络层支持 | 依赖具体实现 | RoCEv1(L2),RoCEv2(L3) | | 流控机制 | InfiniBand原生流控 | 依赖PFC(Priority Flow Control)[^2] | #### 3. **部署场景** - **RDMA via InfiniBand** 专为高性能计算(HPC)设计,需专用InfiniBand网卡和交换机,支持超低延迟(微秒级)和高吞吐量。 - **RoCE** 基于以太网,兼容现有数据中心网络设备,适合云环境和企业级存储(如NVMe over Fabrics)[^1]。 #### 4. **配置复杂性** - **RDMA/InfiniBand** 需要专用硬件(HCA卡)和InfiniBand网络架构,驱动安装需匹配内核版本。 - **RoCE** 依赖无损以太网(Lossless Ethernet)配置,需启用PFC和ECN以避免丢包,IP地址需绑定到RDMA设备[^1]。 #### 5. **兼容性与API** - **API支持** 两者均需使用InfiniBand Verbs API,但RoCE需通过以太网适配层映射到Verbs接口。 - **应用移植** 传统基于Socket的应用程序需重写为Verbs API才能利用RDMA/RoCE。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值