跳到主要内容

交换机基础架构与微架构

一、交换机核心架构

基本组成

现代数据中心交换机由以下核心组件构成:

                    +---------------------------+
| 调度器 (Scheduler) |
| iSLIP / PIM 仲裁算法 |
+-------------+-------------+
|
+----------+ +-----------------+-----------------+ +----------+
| 入口端口 |--->| 交换结构 (Crossbar) |--->| 出口端口 |
| | | 输入缓冲区 (VOQ) | | |
| 解析/查表 | | 输出缓冲区 (Output Buffer) | | 队列调度 |
+----------+ +-----------------------------------+ +----------+

缓冲策略分类

策略描述吞吐上限适用场景
Output Queuing (OQ)仅在出口端缓冲100%理论最优,需 N 倍加速比
Input Queuing (IQ)仅在入口端缓冲58.6%简单但有 HOL 阻塞
VOQ每个输入为每个输出维护独立队列~100%数据中心主流
CIOQ混合输入输出缓冲~100%高端交换机

Virtual Output Queuing (VOQ) 详解

VOQ 是现代高性能交换机的核心架构:

输入端口 0                              输出端口
+-- VOQ(0,0) -----------------------> 端口 0
+-- VOQ(0,1) -----------------------> 端口 1
+-- VOQ(0,2) -----------------------> 端口 2
+-- VOQ(0,N) -----------------------> 端口 N

输入端口 1
+-- VOQ(1,0) -----------------------> 端口 0
+-- VOQ(1,1) -----------------------> 端口 1
...

关键特性:

  • 消除 Head-of-Line (HOL) 阻塞
  • 需要 N x N 个虚拟队列 (N 为端口数)
  • 依赖高效调度算法 (iSLIP, PIM 等)
  • 内存开销: O(N^2) 个队列

二、转发模式

Store-and-Forward (存储转发)

完整接收帧后进行 CRC 校验,确认无误后转发。

入口:   [====== 接收完整帧 ======]
|
处理: [CRC校验][MAC查表][QoS分类]
|
出口: [====== 发送帧 ======]

延迟 = T_serialization_in + T_processing + T_queueing
= (frame_size * 8 / BW) + T_crc + T_lookup + T_queue
  • 优点: 完整错误检测,支持速率转换和 QoS
  • 缺点: 延迟与帧大小成正比

Cut-Through (直通转发)

只读取帧头部的目标 MAC 地址 (前 14 字节),立即开始转发。

入口:   [目标MAC][源MAC][=========== 剩余数据 ===========][FCS]
|
处理: [CAM表查找]
|
出口: [目标MAC][源MAC][=========== 剩余数据 ===========][FCS]

延迟 = T_header + T_lookup ~= 100-400 ns (与帧大小无关)
  • 优点: 超低延迟,流水线处理
  • 缺点: 无错误过滤,入口/出口速率必须匹配
  • 数据中心主流方案

模式对比

模式转发前读取典型延迟 (100GbE)错误检测适用场景
Cut-Through14 字节~300-500ns数据中心核心
Fragment-Free64 字节~800nsRunt 帧折中方案
Store-and-Forward完整帧数 us完整 CRC需要 QoS/速率转换
Adaptive动态动态动态错误率波动的网络

实际影响: Cut-Through 在出口端口拥塞时会退化为 Store-and-Forward。


三、iSLIP 调度算法

iSLIP (Iterative Round-Robin Matching) 是数据中心交换机的核心调度算法。

算法流程

每个时间槽执行 1-4 次迭代:

Iteration k (k = 1, 2, ..., max_iterations):

Step 1: Request (请求)
每个输入端口 i 向所有非空 VOQ 的目标输出端口 j 发送请求

Step 2: Grant (授权)
每个输出端口 j 使用 Round-Robin 仲裁器选择一个请求
指针 grant_ptr[j] 指向优先级最高的输入
*仅当授权被接受时*才更新指针

Step 3: Accept (接受)
每个输入端口 i 使用 Round-Robin 仲裁器选择一个授权
接受后 accept_ptr[i] 移动到 (j+1) mod N

指针去同步化

iSLIP 的关键创新: Grant 指针仅在授权被接受时更新。未被接受的授权不更新指针。这使得各输出端口的仲裁器指针逐渐去同步化,大幅减少碰撞。

吞吐量特性

迭代次数吞吐量延迟推荐场景
1 次~63%最低低延迟优先
2 次~99%适中推荐
4 次~99.9%较高高吞吐优先

四、共享缓冲池管理

架构

              +-------------------------+
| Shared Memory Pool |
| (64 MB SRAM) |
+-------------------------+
| | | |
+------+----+----+----+------+
| Dynamic Allocation Logic |
+------+----+----+----+------+
| | | |
Port1 Port2 ... PortN

动态阈值 (DT) 算法

每个 VOQ 的最大可用缓冲:

Static_Reserved = 保底缓冲 (如 128 KB/VOQ)
Shared_Available = Total_Buffer - Current_Usage
Dynamic_Quota = alpha * Shared_Available
Max_Allowed = Static_Reserved + Dynamic_Quota

alpha 参数:
alpha = 1.0: 平均分配
alpha > 1.0: 激进 (允许占用更多共享缓冲,吸收突发)
alpha < 1.0: 保守 (防止单个队列占用过多)

缓冲溢出处理

策略行为适用场景
Tail DropVOQ 满时丢弃新包默认策略
ECN Marking超过阈值时标记 ECN,不丢弃无损网络 (RDMA)
WRED按概率提前丢弃,避免同步丢包TCP 网络

五、流量控制

Credit-Based Flow Control

端口间的精细流控机制,数据中心高速互联常用:

发送端:
credits[neighbor] = neighbor_buffer_depth (初始化)

每发送 1 个 packet:
credits[neighbor] -= 1

每收到 1 个 credit 反馈:
credits[neighbor] += 1

发送条件:
can_send = (credits[neighbor] > 0) and (packet in VOQ)

接收端:
每接收 1 个 packet 并从 buffer 移除:
send_credit_to_sender()

优势: 细粒度控制 (逐包),零丢包保证。

PFC (Priority Flow Control)

支持每优先级独立暂停:

接收端:
优先级 3 的队列将满
|
发送 PFC 帧: PAUSE 优先级 3
|
发送端:
只暂停优先级 3 的流量
其他优先级 (0,1,2,4,5,6,7) 继续发送

详见 02-ai-networking.md 中的 PFC 详解。


六、QoS 机制

流量分类

基于 802.1p 优先级 (VLAN 标签中的 PCP 字段):

PCP 值优先级名称典型应用
7网络控制 (NC)路由协议, LACP
5语音 (VO)VoIP
4视频 (VI)视频会议
3关键应用 (CA)RDMA 数据流量
0背景 (BK)批量下载

队列调度算法

算法特点适用场景
FIFO先进先出,无优先级尽力而为流量
Strict Priority高优先级绝对优先延迟敏感流量 (可能饥饿)
WRR按权重比例分配带宽避免饥饿
WFQ基于包大小和权重的公平性考虑帧大小差异
DWRR解决 WRR 的帧大小问题数据中心常用

七、延迟模型

完整延迟组成

T_total = T_propagation + T_serialization + T_processing + T_queueing

其中:
T_propagation = distance / c # 传播延迟 (光纤中 ~5us/km)
T_serialization = packet_size / BW # 串行化延迟
T_processing = T_lookup + T_switch # 处理延迟 (查表+交换)
T_queueing = f(rho, buffer, traffic) # 排队延迟 (负载相关)

典型值参考

参数10GbE100GbE400GbE
串行化延迟 (64B)51.2ns5.12ns1.28ns
串行化延迟 (1KB)819ns81.9ns20.5ns
串行化延迟 (9KB MTU)7.37us737ns184ns
典型处理延迟300ns-1us300ns-1us300ns-1us

排队论近似

M/M/1 模型 (通用分析):

利用率:        rho = lambda / mu  (必须 < 1)
平均队列长度: L = rho / (1 - rho)
平均等待时间: W = 1 / (mu - lambda)

M/D/1 模型 (固定包长):

平均等待时间:   W = 1/mu * (2-rho) / (2*(1-rho))
相比 M/M/1: W_MD1 / W_MM1 ~= 0.5 (rho->1 时)

M/M/1/K 模型 (有限缓冲,用于 VOQ 建模):

丢包概率:   P_loss = (1-rho) * rho^K / (1-rho^(K+1))

注意: 排队论模型仅用于快速估算。Cycle 级建模将使用状态机模拟替代这些近似公式。