PFC 在依靠简单廉价兼容性而成功的以太网上弄巧成拙,但有 101 种优化它的方法,但代价是交换机越来越复杂。以太网的基因是简单廉价,这体现在以太帧的结构上,以太帧结构决定了交换机的能力上限,这是核心。核心认知不够,交换机玩出花也解决不了问题。
不光依赖交换机,而让每一个数据包都分担一些拥塞控制的责任,100 种新的流控,拥塞控制机制就出来了,本文介绍一种随意想到的另一个 PFC,这里的 P 不是 Priority 优先级的意思,而是 Path,即 Path-aware Flow Control。
本质上,它是一种 “横竖一颠倒,柳暗花明” 的方法论指导下的想法,既然端信息不够用,那就用网络信息。
为了最小化时延,数据中心传输经由交换机跳数不会太多,无论传统三层结构,还是 Spine-Leaf,VL2,几乎都是 2~3 跳可达,用 16bit 做 id 唯一标识一台交换机就 ok 的,不够就 17~18bit(不纠结),6~8 个 16bit 存一路上所有的 path 是 ok 的,一共消耗不了多少空间,反正比 TCP 少得多:
下图是一个解释:
在最短路径优先以及规则拓扑(不规则拓扑没考虑过,不代表不行)的假设下,每个交换机收到数据帧:
- 递增 curr_index;
- 若 path_list 的 curr_index 为空或与实际 node id 不一致,update 它为当前 node 实际 id;
- 若处在 pause 状态,比对 path_list2 中 curr_len 开始直到 pause 帧的 path_len 是否与 pause 帧的 path_list 一致,若一致,pause,不一致,放行。
主机协议收到数据帧:
- 保存 path_list,待有去往 sender 的数据发送时,reply path_list;
如此配合,便轻易实现了不连累无关受害流,同时交换机上也省去了复杂的 hash 运算,流分类等操作,直接一个 and 操作完事。
收益是源抑制信息以最快的速度到达 sender,代价是简单修改了协议。
这种方法实现了传输协议和网络紧耦合,这几乎是彻底提高性能的唯一正确途径,而源自 TCP/IP 的传输协议和网络解耦合的 XX over Ethernet(oE) 几乎不可能彻底提高性能,原因正在解耦实际上是一种丢失信息的行为。oE 的成功之处在于它已经足够好,而不是它超级棒。足够好的意思是,与 IB 相比时延,吞吐性能肯定要差一点,但差得不多,但在简单,兼容性,廉价方面,它却有非常大的优势。
与 oE 的 PFC 相比,Path-aware FC 没有扩展性问题,任何上层协议都可以被包装在该协议中进行传输,而 oE PFC 若要更精细地控制每一条数据流,需要支持一种新的非 TCP/IP 传输协议时,便要扩展模块增加对 hash 字段的检索和计算,比如那些没有所谓五元组的协议。
也可以把本文描述的方法看做是 yet another 标签算法。另外,还有一种 “换 hash 种子” 的算法用来支持 oE PFC 优化,后面再说吧。
浙江温州皮鞋湿,下雨进水不会胖。