1. PCIe Switch概述:什么是PCIe Switch、Switch在系统中的作用、与Root Complex和Endpoint的关系
各位同学好,我是老温。今天咱们开始聊PCIe Switch,这是整个PCIe拓扑里最核心的部件之一。说实话,我刚开始接触PCIe时,总觉得Switch就是个简单的“分线器”,后来踩了不少坑才明白——它远比想象中复杂。
1.1 什么是PCIe Switch
PCIe Switch,说白了就是一个智能的PCIe数据交换设备。它内部有多个端口,每个端口都可以连接一个PCIe设备。它的核心任务就是:把数据从一个端口转发到另一个端口。
嗯,这里要注意,Switch不是简单的“复制粘贴”。它内部有路由逻辑、流量控制、虚拟通道管理这些复杂机制。我曾在项目中遇到过一个问题:两个Endpoint同时向Root Complex发数据,结果Switch内部缓冲区爆了,导致整个系统卡死。后来才发现是Switch的VC配置没调好。
核心要点:PCIe Switch是一个多端口、可扩展的交换设备,它实现了PCIe协议的完整事务层、数据链路层和物理层功能。
1.2 Switch在系统中的作用
Switch在系统里扮演什么角色?我总结了三件事:
- 扩展端口数量:Root Complex的端口有限,一个Switch可以挂多个Endpoint
- 隔离流量域:不同端口之间的流量可以互相隔离,互不干扰
- 提升带宽利用率:通过虚拟通道和仲裁机制,让多个设备共享链路带宽
你想想看,如果没有Switch,一个服务器只能接几个PCIe设备。有了Switch,你可以接几十个NVMe SSD、GPU、网卡,这就是它的价值所在。
个人经验:我在做存储服务器时,用了一个PCIe Gen4 Switch接了16块NVMe SSD。如果不做VC隔离,一块盘做格式化时,其他盘的IO延迟会飙升到几百微秒。后来配置了独立的VC,延迟稳定在10微秒以内。
1.3 与Root Complex和Endpoint的关系
这三者的关系,我用一张图来说明:
这张图展示了典型的PCIe拓扑结构。Root Complex是“老大”,它连接CPU和内存。Switch是“中间人”,负责把Root Complex的命令转发给各个Endpoint。Endpoint就是“干活的人”,比如SSD存数据、GPU算图形、网卡收发网络包。
我举个例子你就明白了:
- Root Complex:就像公司的CEO,发号施令
- Switch:就像部门经理,把CEO的指令分派给各个员工
- Endpoint:就像一线员工,具体干活
为什么会这样设计?因为CPU的PCIe端口有限,而且每个端口需要复杂的物理层逻辑。如果让CPU直接连几十个设备,芯片面积和功耗都受不了。Switch就是来解决这个问题的。
避坑指南:我曾经在一个项目中,把Switch的上行端口配置成了x4,结果Root Complex只支持x8。虽然能工作,但带宽只有一半。后来我学乖了,设计前一定先确认Root Complex和Switch的端口宽度匹配。
1.4 Switch的内部架构
Switch内部其实是个“小交换机”。它包含:
| 组件 | 功能 | 我的经验 |
|---|---|---|
| 端口逻辑 | 每个端口独立处理物理层、数据链路层、事务层 | 端口之间完全隔离,一个端口出问题不影响其他 |
| 内部路由 | 根据地址或ID决定数据转发到哪个端口 | 路由表配置错了,数据就跑到别的地方去了 |
| VC管理 | 管理多个虚拟通道,实现QoS | 这是最容易被忽视的部分,但影响很大 |
| 仲裁器 | 决定哪个端口的数据优先发送 | 仲裁策略选错了,高优先级流量会被堵住 |
嗯,这里要特别说一下VC管理。每个端口可以有多个虚拟通道,每个VC都有自己的缓冲区。你可以把VC想象成高速公路上的车道——普通数据走慢车道,实时数据走快车道。这样即使普通数据堵车,实时数据也能畅通无阻。
小技巧:如果你在做视频采集卡项目,记得把视频流配置到VC1,控制命令配置到VC0。这样即使视频数据量很大,控制命令也能及时响应。我试过不配置VC,结果调整分辨率时画面卡了半秒钟。
1.5 实际应用场景
PCIe Switch在哪些地方最常见?我列几个:
- 服务器:连接多个NVMe SSD、GPU、网卡
- 存储阵列:扩展端口数量,连接几十块硬盘
- 嵌入式系统:连接FPGA、DSP、视频采集卡
- 测试设备:连接多个PCIe设备进行压力测试
我记得有一次做服务器项目,客户要求接24块NVMe SSD。Root Complex只有4个端口,每个端口只能接一个NVMe。怎么办?加一个PCIe Switch,一个上行端口接Root Complex,6个下行端口各接4块SSD(通过Bifurcation拆分)。完美解决。
好了,这一章就讲到这里。PCIe Switch的基本概念、作用和拓扑关系,你应该已经清楚了。下一章我们深入聊聊Switch的端口配置和Bifurcation,这是实际项目中经常遇到的技术点。
公众号:蓝海资料掘金营,微信deep3321