PCIE 通道分配分析 -- 以 Z270 PCH 为例
背景
玩上了 E3,很好奇通道分配情况。使用的主板是 Z270-Dragon, CPU 是 E3 1240v6。
基础知识
PCIE 有很多种规格,为了清晰描述,给出以下方便的定义:
- 物理(插槽)规格:插槽的外形规格。如 PCIE x16, x8, x4, x1, 或者 M.2。
- 电气规格:连接到插槽的 PCIE 通道 (Lane) 数。一个 X16 物理规格的插槽可能只有 x8 的通道,常见于带有多个 X16 的主板上,但是没有那么多通道。
PCIE 在实现上可以有两种,即 CPU 直连
和 PCH 提供
。CPU 直连的通道速度最快,不受其他限制;而 PCH 提供的通道虽然多,总体速度受 DMI Link 的速度限制。(小水管)
PCIE 的通道拆分即指 CPU 直连的 PCIE 通道拆分,涉及到 CPU 相应 CFG 引脚的配置,高端芯片组通过 GPIO 连接到这些引脚来提供动态配置拆分的选项。
PCH 上的 PCIE 信号路径大致如下:
+-----+ DMI +-----------------------------------------------+
| CPU | <=======> | -----+ +------|
+-----+ | | +->| HSIO |
| +------------+ +----------+ / +------|
| | Controller | <-> | HSIO MUX | <---->| HSIO |
| +------------+ +----------+ \ +------|
| ^ +->| HSIO |
| | +------|
| PCH (USB3 Signals, etc) | .... |
+-----------------------------------------------+
这里涉及 Controller,HSIO 等概念,解释如下:
- DMI (Direct Media Interface): 一种高速串行接口,用于在 CPU 和 PCH 之间传输数据,负责传递PCIe、USB、SATA 等多种类型的 I/O 请求
- PCIe Controller: 对于PCIe设备而言,PCIe控制器负责初始化、配置和管理PCIe链路。它决定了如何分配带宽、处理中断、执行电源管理等功能
- HSIO (High-Speed I/O): 高带宽输入输出模块,它是PCH中负责处理高速信号的部分。HSIO模块支持多种高速接口协议,包括但不限于PCIe、USB 3.x 和 SATA
- HSIO MUX (Multiplexer):一个多路复用器,允许从多个源(例如,PCIe控制器、USB控制器等)共享有限数量的HSIO通道
资料获取
E3-1240v6 处理器概览 万恶的 Intel 并不给我们数据手册,只能看看概览了。
200系 PCH 数据手册 一共有两卷,卷 1 是概览,卷 2 是寄存器等详细描述。我们只需要看卷 1 就可以了。
分析
物理&电气规格
观察主板可知:
这块主板一共带有两条 PCIE X16 插槽,4 条 PCIE X1 插槽,两个 M.2 PCIE/SATA Combo 插槽。
其中,PCIEX16_1 是满连接的,和 处理器的 x16 直连对应。
而 PCIEX16_2 是只有一半长度的(即插槽上有针脚的部分),应该对应最大 X8,也就是 2x8 模式。
其余的 PCIE 和 M.2 接口则是由 PCH 提供,需要进一步查看 PCH 的手册确定。
端口规格与连接
X1 插槽
这些 PCIEx1 到底对应 PCH 上的哪些呢?一个办法是查看 dmidecode。运行:
sudo dmidecode -t slot
得到:
详情
# dmidecode 3.6
Getting SMBIOS data from sysfs.
SMBIOS 3.0.0 present.
Handle 0x001B, DMI type 9, 17 bytes
System Slot Information
Designation: PCIEX16_1
Type: PCI Express
Data Bus Width: 16x or x16
Current Usage: Available
Length: Long
ID: 0
Characteristics:
3.3 V is provided
Opening is shared
PME signal is supported
Bus Address: 0000:ff:01.0
Handle 0x001C, DMI type 9, 17 bytes
System Slot Information
Designation: PCIEX16_2
Type: PCI Express
Data Bus Width: 16x or x16
Current Usage: Available
Length: Short
ID: 1
Characteristics:
3.3 V is provided
Opening is shared
PME signal is supported
Bus Address: 0000:ff:1b.4
Handle 0x001D, DMI type 9, 17 bytes
System Slot Information
Designation: PCIEX1_1
Type: PCI Express
Data Bus Width: 1x or x1
Current Usage: Available
Length: Short
ID: 2
Characteristics:
3.3 V is provided
Opening is shared
PME signal is supported
Bus Address: 0000:ff:1c.3
Handle 0x001E, DMI type 9, 17 bytes
System Slot Information
Designation: PCIEX1_2
Type: PCI Express
Data Bus Width: 1x or x1
Current Usage: Available
Length: Short
ID: 3
Characteristics:
3.3 V is provided
Opening is shared
PME signal is supported
Bus Address: 0000:ff:1c.4
Handle 0x001F, DMI type 9, 17 bytes
System Slot Information
Designation: PCIEX1_3
Type: PCI Express
Data Bus Width: 1x or x1
Current Usage: Available
Length: Short
ID: 2
Characteristics:
3.3 V is provided
Opening is shared
PME signal is supported
Bus Address: 0000:ff:1c.5
Handle 0x0020, DMI type 9, 17 bytes
System Slot Information
Designation: PCIEX1_4
Type: PCI Express
Data Bus Width: 1x or x1
Current Usage: Available
Length: Short
ID: 3
Characteristics:
3.3 V is provided
Opening is shared
PME signal is supported
Bus Address: 0000:ff:1c.6
丢给 LLM 分析一下,可知:
PCIEX16_1
- 类型:PCI Express
- 数据总线宽度:16x 或 x16
- 当前使用状态:可用
- 长度:长
- ID: 0
- 特性:提供3.3V电源,开口共享,支持PME信号
- 总线地址:0000:ff:01.0
PCIEX16_2
- 类型:PCI Express
- 数据总线宽度:16x 或 x16
- 当前使用状态:可用
- 长度:短
- ID: 1
- 特性:提供3.3V电源,开口共享,支持PME信号
- 总线地址:0000:ff:1b.4
PCIEX1_1
- 类型:PCI Express
- 数据总线宽度:1x 或 x1
- 当前使用状态:可用
- 长度:短
- ID: 2
- 特性:提供3.3V电源,开口共享,支持PME信号
- 总线地址:0000:ff:1c.3
PCIEX1_2
- 类型:PCI Express
- 数据总线宽度:1x 或 x1
- 当前使用状态:可用
- 长度:短
- ID: 3
- 特性:提供3.3V电源,开口共享,支持PME信号
- 总线地址:0000:ff:1c.4
PCIEX1_3
- 类型:PCI Express
- 数据总线宽度:1x 或 x1
- 当前使用状态:可用
- 长度:短
- ID: 2 (注意:这里ID重复了)
- 特性:提供3.3V电源,开口共享,支持PME信号
- 总线地址:0000:ff:1c.5
PCIEX1_4
- 类型:PCI Express
- 数据总线宽度:1x 或 x1
- 当前使用状态:可用
- 长度:短
- ID: 3 (注意:这里ID也重复了)
- 特性:提供3.3V电源,开口共享,支持PME信号
- 总线地址:0000:ff:1c.6
关注总线地址部分,设备和功能号部分是 1c.x,0x1c = 28,则按照手册[PCH Controller Device IDs]:

可知对应了这几个直连端口。
M.2
由主板说明可知,这些 M.2 插槽可以兼容 SATA 和 NVME(PCIE) 设备。我们查看一下lspci -tv
:
-[0000:00]-+-00.0 Intel Corporation Xeon E3-1200 v6/7th Gen Core Processor Host Bridge/DRAM Registers
+-14.0 Intel Corporation 200 Series/Z370 Chipset Family USB 3.0 xHCI Controller
+-17.0 Intel Corporation SATA Controller [RAID mode]
+-1b.0-[01]--
+-1c.0-[02]--
+-1c.7-[03]----00.0 Realtek Semiconductor Co., Ltd. RTL8111/8168/8211/8411 PCI Express Gigabit Ethernet Controller
+-1d.0-[04]----00.0 SK hynix BC511 NVMe SSD
+-1f.0 Intel Corporation 200 Series PCH LPC Controller (Z270)
+-1f.2 Intel Corporation 200 Series/Z370 Chipset Family Power Management Controller
+-1f.3 Intel Corporation 200 Series PCH HD Audio
\-1f.4 Intel Corporation 200 Series/Z370 Chipset Family SMBus Controller
可知我们的一个盘挂在了 1d.0 上。把 lspci -vvv
的输出丢给 LLM, 可知:
00:00.0 Host Bridge
- 这是系统的核心组件,通常直接连接到CPU,负责管理与内存和其他设备的通信。
00:14.0 USB控制器
- 一个USB 3.0 xHCI控制器,用于提供高速USB接口。
00:17.0 RAID控制器
- 提供RAID功能的SATA控制器。
00:1b.0 PCI桥
- Intel 200系列PCH的第17个PCI Express根端口(Root Port),支持x4宽度,速度可达8GT/s。
00:1c.0 PCI桥
- Intel 200系列PCH的第一个PCI Express根端口,支持x1宽度,速度可达8GT/s。
00:1c.7 PCI桥
- Intel 200系列PCH的第八个PCI Express根端口,支持x1宽度,速度可达8GT/s,并且连接了一个子设备:
- 03:00.0 Ethernet控制器:Realtek的千兆以太网控制器。
- Intel 200系列PCH的第八个PCI Express根端口,支持x1宽度,速度可达8GT/s,并且连接了一个子设备:
00:1d.0 PCI桥
- Intel 200系列PCH的第九个PCI Express根端口,支持x4宽度,速度可达8GT/s,并且连接了一个子设备:
- 04:00.0 NVMe SSD:SK hynix的BC511 NVMe固态硬盘。
- Intel 200系列PCH的第九个PCI Express根端口,支持x4宽度,速度可达8GT/s,并且连接了一个子设备:
00:1f.0 到 00:1f.4
- 这些都是直接连接到PCH的不同类型的控制器,包括LPC控制器、电源管理控制器、HD音频控制器以及SMBus控制器等。
那么很显然,这两个 M.2 就对应上述的两个 x4 宽度的端口,查看数据手册 [PCIe] 节给出的表:

再结合插上的是 M2_1 插槽,可知 M2_1 对应了 RP9 (占用 9-12 Lane),M2_2 对应了 RP17 (占用 17-20 Lane)。
HSIO
PCIE 的实现和物理连接上,还需考虑 HSIO (高速IO) 的分配。查看数据手册 [Flexible I/O]节:

可知具体分配限制。比较搞的地方在于,RP9 (即 M2_1)和 SATA0 是一起的,但是主板上提供的 4 个 SATA 端口又只能对应 SATA0-3,那么如果在 M2_1 上面插入 SATA 的盘,则主板上的 SATA0 端口在理论上不可用。
你可能会观察到,PCH 上带了 GbE,即以太网支持,但是实际应用中却经常用 RTL 的网卡,这是为什么呢?在数据手册的 GbE 部分,明确说明是和 I219 配合使用的,那使用 RTL 的网卡就可以理解为省钱/额外的保护功能目的了。
总结
通过 lspci
和 dmidecode
的信息,结合主板配置和 PCH 数据手册,可以大致得到 PCIE 通道分配的信息。
仍然存在一些疑点,如 PCIEx16_2 的 Bus Address 描述为 0000:ff:1b.4, 并不在直连上。手头上也没有那么多卡来测试 qwq...
Edit: 经过测试,X8的槽也是走 PCH 的,真的奇特,就这带宽还交火,哈哈哈