以太网存储网络的拥塞管理连载方案(一)

描述

本章重点介绍不使用 TCP 而使用无损以太网网络的存储协议,如 FCoE、RoCE 和 RoCEv2。第 8 章 "TCP 存储网络中的拥塞管理 "主要介绍在有损以太网网络中使用 TCP 传输的存储协议,如 iSCSI 和 NVMe/TCP。

以太网流量控制

以太网流量控制有两种类型

1.  链路级流量控制(LLFC):LLFC 可在直接连接的设备之间对链路上的所有流量进行流量控制。LLFC 是一项 IEEE 标准(IEEE 802.3x)。

2.基于优先级的流量控制 (PFC):PFC 可在直接连接的设备之间对特定流量类别进行流量控制,而其他流量类别则在无流量控制的情况下继续运行。PFC 也是 IEEE 标准(IEEE 802.1Qbb)。

LLFC 类似于光纤通道 B2B 流量控制机制,它对链路上的所有流量进行流量控制(第 2 章 "了解光纤通道 Fabric 中的拥塞",光纤通道流量控制部分)。相反,当光纤通道链路使用多个虚拟链路或电路(VL 或 VC)运行时,PFC 类似于 ER_RDY(或 VC_RDY)流量控制机制(第 6 章 "在光纤通道 Fabric 中防止拥塞",了解虚拟链路一节)。在光纤通道 Fabric 中,所有流量都需要无损行为,因此所有 VL 都启用了流量控制,而在以太网网络中,只有部分流量类别受流量控制,其他类别的流量则不受流量控制。这有助于在同一以太网链路上实现有损和无损行为。

如第 1 章 "无损网络 "一节所述,以太网流量控制(或一般无损网络)并不能保证不丢帧。当帧因比特错误而损坏时,以及当拥塞严重时帧在缓冲区中长时间滞留时,仍然会丢弃帧。这些细节将在后面的 "通过丢弃帧恢复拥塞 "一节中解释。

以太网流量控制如何工作?

以太网使用一种称为暂停帧的特殊帧进行流量控制。暂停帧的内容、发送时间和发送频率允许直接连接的发送方调整传输速率,以避免接收方缓冲区超限。这就避免了因接收方缺乏空闲缓冲区而造成的数据包丢失,从而实现了无损网络。

暂停时间

暂停帧有一个称为quanta的字段,用于表示必须停止帧传输的持续时间(称为暂停时间)。quanta值范围在 0 到 65535 之间(16 位最大值为 0xFFFF)。要计算暂停时间,可将quanta值乘以在链路上传输 512 比特所需的时间。无论链路的运行速度如何,这一方案都有助于实现一致的执行。它还能确保最大暂停时间随着链路速度的增加而减少,这是适应高速链路上更快传输速率的需要。

如下式所示,要将暂停quanta转换为秒,需要将其乘以 512,再除以每秒比特的端口速度。

Pause time in seconds = (Pause quanta x 512) / Port speed in bits per second

例如,在 10 GbE 链路上,单个暂停帧的最大暂停时间为 3.355 ms((65535 x 512)/(10 x 109))。当 10 GbE 端口收到quanta值为 0xFFFF 的暂停帧时,可停止传输 3.355 毫秒。同样,100 GbE 链路的最大暂停时间为 0.355 ms。

数据流接收器在发送非零quanta的暂停帧后,可通过两种方式请求数据流发送器重新开始传输:

1. 等待最后发送的暂停帧所代表的持续时间。例如,10 GbE 端口只需等待 3.355 毫秒。

2. 发送新的零quanta暂停帧,要求数据流发送方立即恢复传输。因此,零quanta的暂停帧也被称为恢复帧或解除暂停帧。

在以下两个条件下,因收到quanta为非零的暂停帧而处于 "暂停 "状态的数据流发送方将立即恢复传输:

1. 暂停帧中指定的持续时间结束。例如,10 GbE 端口在接收到quanta为 65535 的暂停帧 3.355 毫秒后。

2.它接收到quanta设为零的暂停帧。同样,这也可以称为 "恢复 "或 "取消暂停 "帧。

这意味着暂停帧具有双重用途。非零quanta的暂停帧会停止或暂停流量,而零quanta的暂停帧则会启动或恢复流量。

接下来,让我们了解一下这些暂停帧是何时发送的。

何时发送暂停帧?

图 7-1 显示了交换机-1 的两个端口之间的速度不匹配情况,这两个端口以 10 GbE 连接目标-1,以 1 GbE 连接主机-1。交换机-1 为无损流量分配缓冲区,并将这些缓冲区组织到入口无丢弃队列中。为简单起见,假设只有一种流量类别需要无损行为,则只显示一个无丢弃队列。 

接收器

Figure 7-1 Ethernet flow control with Pause Threshold and Resume Threshold

当 Target-1 开始以 10 Gbps 的速度传输无损流量时,Switch-1 只能以 1 Gbps 的速度向 Host-1 传输。流量速率的差异会导致帧过多,从而开始消耗交换机-1 上不丢帧队列的缓冲区。当交换机-1 的缓冲区填满超过阈值(称为暂停阈值)时,它会向目标-1 发送一个非零quanta的暂停帧。目标-1 收到该暂停帧后,会在一个特定的时间间隔内停止传输流量,该时间间隔称为暂停时间(如上一节所述)。因此,Switch-1 的缓冲区利用率不会进一步增加,而是随着向 Host-1 的传输继续进行而开始下降。

最终,当 Switch-1 的缓冲区利用率低于恢复阈值时,Switch-1 会发送一个零quanta的暂停帧,这是目标-1 恢复流量传输的信号。如果在发送第一个非零quanta的暂停帧后的暂停时间内,Switch-1 的缓冲区利用率没有降至恢复阈值以下,它将继续发送更多非零quanta的暂停帧,以停止或暂停来自目标-1 的传输,直到 Switch-1 的缓冲区利用率降至恢复阈值以下。

目标-1 最终会恢复传输,要么是因为最后一个非零quanta的暂停帧中指定的持续时间已过,要么是因为它收到了一个零quanta的暂停帧。但目标-1 较快的传输速率再次导致交换机-1 上的不丢弃队列被填满,并很快超过了暂停阈值。这时,交换机-1 再次向目标-1 发送非零quanta的暂停帧,同样的事件重复发生。

最后,交换机-1 的 "暂停阈值 "和 "恢复阈值 "之间的紧密配合以及 "暂停帧"(非零quanta)和 "未暂停帧"(零quanta)的发送实现了以太网流量控制。

请注意以下几点:

1. 图 7-1 中的以太网流量控制会导致入口端口(连接到 Target-1)和出口端口(连接到 Host-1)之间的速率均衡。如果在此状态下对链路进行监控,Host-1 链路上就不会有暂停帧流过,而许多暂停帧会从 Switch-1 流向 Target-1。

2. 如果不启用图 7-1 中的流量控制,交换机-1 将丢弃目标-1 的任何多余帧。这将使其成为一个有损网络。

3.  虽然quanta值的范围在 0 到 65535 之间,但大多数产品(包括 Cisco MDS 交换机、Nexus 交换机和 UCS)都将其设置为最大可能值 65535。将时间quanta设置为较小值将要求接收器预测准备接收更多帧的持续时间。这种预测的实现比较复杂。大多数产品将暂停时间量值设置为最大值 65535,然后在准备好接收流量时发送取消暂停帧(时间量值为 0),从而使实现简单易行。由于这些原因,Cisco MDS 交换机、Nexus 交换机和 UCS 不允许配置暂停quanta值。

4. 如果认为在发送非零quanta的暂停帧时,流量会在quanta所代表的时间内停止,那是不正确的。通常情况下,非零quanta的暂停帧之后很快就会出现取消暂停或恢复帧。流量暂停的最长时间实际上就是暂停和取消暂停帧之间的时间。在 10 GbE 链路上,这可能是 0.05 微秒(接收 64 字节暂停帧的时间),也可能是 3.355 毫秒或介于两者之间的任何时间。如果缓冲区利用率仍高于暂停阈值,则可在根据实施情况确定的时间(小于量子所代表的时间)后发送另一个非零quanta的暂停帧。这个暂停帧会 "延长 "流量暂停的时间。

5. 暂停帧不会抢先传输已经开始的帧。

6. 暂停阈值也称为 XOFF 阈值,恢复阈值也称为 XON 阈值。XOFF 和 XON 中的 X 是传输的首字母缩写。由于暂停帧的流动方向与流量相反,因此 XOFF 阈值与停止流量有关,而 XON 阈值与重启/恢复流量有关。一般来说,XOFF 表示 "暂停流量",XON 表示 "取消暂停流量"。在排除拥塞问题时,请记住这一细节,因为 XOFF 和 XON 术语也可能被使用。

入口和出口队列

Cisco Nexus 9000 交换机采用出口缓冲架构。这意味着出口端口上会保留队列。

只有对于不丢弃类,才会为所有可以接收不丢弃类流量的入口端口预留额外的缓冲区。如图 7-1 所示,除了出口队列外,不丢弃流量还被排入入口队列(具有暂停阈值和恢复阈值)。

在拥塞期间,首先出口队列会开始填满。对于有损流量,如果这些出口队列已满,任何新传入的帧都会被丢弃。

但是,对于无损流量,在不丢弃出口队列满之前,会对入口队列施加内部反向压力(具有暂停阈值和恢复阈值)。这样,任何新进入的流量都会占用入口队列,而不会被丢弃。如前所述,通过发送暂停帧来控制入口队列的利用率。

这些入口队列有暂停阈值和恢复阈值,与出口队列的主动队列管理(AQM)机制(如加权随机早期检测(WRED))不同。可以使用 NX-OS 命令 show queuing interface 显示 Cisco Nexus 9000 交换机端口上的入口和出口队列。

在 Cisco Nexus 交换机上,所有流量都要经过出口队列处理,因此,AQM 与有损和无损流量相关。第 8 章 "交换机缓冲区管理 "一节介绍了出口队列的处理和 AQM 机制。本章主要关注入口队列(具有暂停阈值和恢复阈值)的处理。了解两个队列(出口队列和入口队列)的处理至关重要,因为如前所述,只有在出口队列填满后才会使用入口队列。因此,监控出口队列的使用情况也是显示拥塞的一个关键指标。有关详细信息,请参阅第 8 章队列深度监控和微爆发检测一节。

入口无损队列的位置

无损以太网网络中的所有端口都有入口无损队列。为简单起见,图 7-1 仅显示了一个位置的入口无损队列,但实际上所有端口都有入口无损队列。

1.图 7-1 显示了交换机-1 上用于接收目标-1 流量的入口无损队列。利用该无损队列可控制向目标-1 发送暂停帧。

2. 交换机-1 上也有类似的入口无损队列,用于接收来自主机-1 的流量。利用该无损队列可控制向 Host-1 发送暂停帧。

3. 目标-1 创建一个或多个入口无损队列,用于接收来自交换机-1 的流量。利用该无损队列可控制向 Switch-1 发送暂停帧。

4. 主机-1 创建一个或多个入口无损队列,用于接收来自交换机-1 的流量。利用该无损队列可控制向 Switch-1 发送暂停帧。

每个端口的输入无损队列数

通常情况下,一个无损流量类的每个端口需要一个无损队列。也可根据使用情况创建多个无损队列,如通过同一链路传输 FCoE 和 RoCE 流量。多个无损队列有各自的 "暂停阈值 "和 "恢复阈值"。设备上无损队列的最大数量取决于其功能。例如,Cisco Nexus 9000 交换机最多支持三个无损队列。但根据链路的最大帧大小和长度,还需要考虑更多因素。这些限制之所以适用,是因为无损队列需要预留缓冲区,而每个设备的缓冲区空间都是有限的。请参考您环境中设备的文档,但总的来说,要了解这些限制并制定相应的计划。

实施差异和本书的范围

有些实现(尽管不太常见)会在没有拥塞的情况下持续发送quanta为零的暂停帧。换句话说,即使缓冲区利用率低于恢复阈值,它们也会发送取消暂停帧。这样做是不必要的,因为只需一个 "取消暂停 "帧就足以恢复流量,除非中间发送一个非零quanta的 "暂停 "帧,否则没有必要连续发送。虽然这种实现方式并不违反标准,但由于无法分别报告暂停和解除暂停帧,也无法报告流量暂停的持续时间(TxWait/RxWait),因此这种不必要的操作几乎无法进行拥塞检测。有关这些指标的更多详情,请参阅后面的 "拥塞检测指标 "部分。此外,大量连续发送的 "取消暂停 "帧可能会导致明显的链路利用率,因为这些帧实际占用了带宽。这种类型的实施超出了本书的范围。本书中讲解的大多数拥塞检测和故障排除技术都不适用于此类实施。

本书主要介绍只发送一个(或几个)取消暂停帧(零quanta)来恢复流量,并且在缓冲区利用率低于恢复阈值时不连续发送取消暂停帧的实现。这是最常见的实施类型,包括 Cisco MDS 交换机、Nexus 交换机和 UCS。本书仅介绍这种实施方式。

以下是 Cisco MDS、Nexus 和 UCS 的实现详情:

1.  当超过暂停阈值时,发送一个具有最大暂停quanta的暂停帧。

2. 如果缓冲区利用率高于 "恢复阈值",则在 50%的最大暂停时长到期后,发送下一个具有最大暂停时长的暂停帧。

3. 如果缓冲区利用率低于恢复阈值,则发送一个零quanta的暂停帧(取消暂停)。随后不再发送零quanta的暂停帧。如果该暂停帧损坏或丢失,流量将在前一个暂停帧所传达的暂停时间结束后恢复。

很明显,思科的实现是仅在必要时发送暂停帧。这种发送 "暂停帧 "的保守方法为通过计算 "暂停帧 "的数量来检测拥塞奠定了基础,如第 9 章中详细介绍的 UCS 流量监控 (UTM) 应用程序所使用的方法。

暂停阈值和恢复阈值

本节将解释暂停阈值和恢复阈值对正确的headroom和footroom缓冲区大小的重要意义。如图 7-1 所示。

缓冲区(队列)大小取决于设备的能力。每个启用 PFC 的端口都必须预留缓冲区。因此,队列大小是设备总缓冲空间和启用 PFC 端口数量的函数。

暂停阈值

如前所述,当流量接收器的缓冲区(队列)利用率超过暂停阈值时,它就会发送一个非零quanta的暂停帧。

恢复阈值

如前所述,当流量接收器的缓冲区(队列)利用率低于恢复阈值时,它就会发送一个零quanta的暂停帧(取消暂停)。

暂停阈值必须大于恢复阈值。整个缓冲区(队列)的大小必须足够大,以满足暂停阈值和恢复阈值之间的足够差值。

Headroom

缓冲区(队列)大小与暂停阈值之间的空间称为headroom。

暂停阈值应足够小于最大缓冲区大小(或队列大小),以保持足够的headroom。headroom不足可能导致数据包丢失。暂停阈值也不能太低。如果出现这种情况,发送方会过早暂停,而headroom仍未使用,这可能会导致链路利用率低于预期。

由于流量接收器必须保持足够的 "headroom "来容纳,因此它必须在暂停阈值处而不是在其缓冲区完全耗尽时(图 7-1)发送具有非零quanta的暂停帧:

发出的数据帧已经在物理线路上

发送方已计划发送且不能中断的数据帧。

暂停帧从流量接收方到流量发送方的序列化和传播所造成的延迟。

随着距离的增加,流量接收器必须增加其headroom,因为可能会有更多的帧在传送中,而且暂停帧到达流量发送器所需的时间也会更长。但缓冲区是有限的资源,因此无损以太网链路的最大支持距离取决于其端点的能力。当时可用空间无法容纳的输入数据包会被丢弃。这偏离了无损网络的行为。充足的headroom应避免出现这种情况。

Footroom

低于恢复阈值的缓冲空间称为footroom。

恢复阈值应大于零,以保持足够的空间,从而在 "解除暂停 "帧到达流量发送方、设备恢复传输以及这些帧到达时,无损队列中有足够的帧。如果恢复阈值过低,在发送 "解除暂停 "帧和接收流量之间的一段时间内,无损队列将是空的。这可能会导致链路利用率低于预期。

配置缓冲区大小、暂停阈值和恢复阈值

在大多数实际应用中,数据中心内短距离链路不需要更改缓冲区(队列)大小、暂停阈值和恢复阈值。大多数产品(包括 Cisco MDS 交换机、Nexus 交换机和 UCS)都会根据链路的支持长度(如 100 米)默认配置测试值。有关详细信息,请参阅产品文档。

Cisco Nexus 9000 交换机的默认缓冲区大小和阈值足以满足 100 米长电缆的需要。如果需要更改这些值,例如用于长度超过 100 米的电缆,如例 7-1 所示,可使用 Cisco Nexus 交换机上的 pause buffer-size 命令更改阈值。不同类型的设备可能会根据其缓冲区可用性和架构使用不同的值。因此,例 7-1 仅用于一般理解,在未查阅产品文档的情况下,请勿直接使用这些值。

Example 7-1  在 Cisco Nexus 9000 交换机上配置缓冲区大小、暂停阈值和恢复阈值。

policy-map type queuing INPUT_Q

class type queuing RDMA

pause buffer-size 120000 pause-threshold 46000 resume-threshold 32000

In Example 7-1:

1. 命令 pause buffer-size 中的值以字节为单位。

2. 缓冲区大小(120,000 字节)是队列大小。暂停阈值为 46,000 字节,恢复阈值为 32,000 字节。

3. 缓冲区大小和暂停阈值之间的差值就是headroom(120,000 - 46,000 = 74,000 字节)。如前所述,如果headroom不足,当时无法容纳的入口数据包就会被丢弃。

4. 恢复阈值是footroom(32,000 字节)。如前文所述,headroom不足可能导致链路利用率低于应有水平。

5. 根据最大帧大小,这些阈值的配置应至少容纳最低数量的帧。默认的以太网有效载荷为 1500 字节,因此在计算报头后,帧大小为 1522 字节。但存储流量通常需要更大的帧大小。例如,FCoE 帧最多可达约 2300 字节。RoCE 帧最大可达约 2 KB 或 4 KB。以太网巨型帧最大可达 9216 字节。在例 7-1 中,74,000 字节的净空可容纳约 8 个 9216 字节的全尺寸巨型帧,尽管并非所有帧的大小都相同。

如例 7-2 所示,使用命令 show queuing interface 验证 Cisco Nexus 9000 交换机上无损队列的 "暂停阈值"、"恢复阈值 "和 headroom。

Example 7-2  验证 Cisco Nexus 9000 交换机上的缓冲区大小、暂停阈值和恢复阈值。

switch# show queuing interface ethernet 1/1

Ingress Queuing for Ethernet1/1

-----------------------------------------------------

QoS-Group# Pause

Buff Size       Pause Th      Resume Th

-----------------------------------------------------

7              -            -            -

6              -            -            -

5              -            -            -

4              -            -            -

3         120000        46000        32000

2              -            -            -

1              -            -            -

0              -            -            -

 PFC 的长途链路

长距离无损以太网链路的使用不如短距离链路普遍。大多数使用短距离 SFP 的数据中心内链路都在几百米以内。支持无损以太网的设备应该有足够的缓冲区来处理这些数据中心内链路。但是,如果遇到启用了 PFC 的长距离以太网链路,请验证端点的支持情况,并按照供应商的指导增加缓冲区大小、暂停阈值和恢复阈值。

如前所述,Cisco Nexus 9000 交换机的默认缓冲区大小、暂停阈值和恢复阈值足以满足 100 米电缆长度的要求。更改配置后,Cisco Nexus 93180YC-FX 通过 10 千米链路支持 FCoE。对于任何其他使用情况和更长的距离,请遵循官方文档。

一般概念是,所有无损网络都有距离限制,因为随着距离的增加,它们需要额外的缓冲区。光纤通道和无损以太网都是如此。对于光纤通道,需要增加 B2B 信用点的数量,这与物理缓冲区直接相关。对于以太网上的 PFC/LLFC,在暂停阈值(headroom)以上和恢复阈值(footroom)以下必须有足够的缓冲空间。

缓冲区不足对光纤通道和无损以太网的影响是不同的。在光纤通道中,B2B 缓冲区不足会导致链路利用率低于预期,因为流量发送方大部分时间都在等待缓冲区。在使用 PFC 的无损以太网中,会产生两种影响。首先,如果headroom不足,那么数据包可能会在无损流量类中丢弃。其次,如果footroom不足,其结果类似于光纤通道中缺乏 B2B 信用额度,从而导致性能不佳,因为在有少量停顿的情况下,链路永远达不到预期的流量速率。




审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分