PCIe Segment(段)是一个硬件层面的概念,指一组完全独立的PCIe总线域;而PCIe Domain(域)是Linux内核在软件层面为每个Segment分配的编号。
·PCIe Segment:是硬件概念。它代表一个完全独立的PCIe总线树,由独立的Root Complex(根复合体)管理。不同Segment之间的地址空间和配置空间是互相隔离的。多Segment常见于大型服务器,用于突破单个总线域只能有256个总线的限制。
·PCIe Domain:是Linux内核中的软件表示。内核使用域号来区分不同的硬件Segment。因此,可以在Linux的lspci -t命令的输出中看到“Domain: Bus: Device. Function”的格式,这个Domain号实际上对应的就是硬件Segment。
Segment和Domain的核心区别在于:一个Segment是物理上独立的总线树,而一个Domain则是内核给这个树分配的软件编号。举个例子,如果一台服务器有4个物理的PCIe Segment,在Linux中我们就会看到4个Domain(通常编号为0、1、2、3)。
一个系统中的每个PCIe 设备使用Domain: Bus: Device. Function来唯一标识,具体含义与取值范围如下:
| 标识符 | 名称 | 含义 | 范围 |
|---|---|---|---|
| Domain | 域号 | 区分不同主机/根复合体(Host Bridge)。 | 0000 - |
| Bus | 总线号 | 设备所连接的总线号(总线 0 为起点)。 | 00 - FF |
| Device | 设备号 | 总线上的设备(槽位 / 逻辑设备),最多 32 个。 | 00 - |
| Function | 功能号 | 物理设备上的子功能(例如多功能网卡)。 | 0 - |
lspci -t的输出以根(Root Complex)为起点,用 +-、| 等字符表示树状连接关系。
- 0000:00:根节点(域 0000,总线 00)。
+- 0000:00:07.1-[04]---+:00:07.1 是一个桥接器(Bridge),它创建了下游 次级总线(secondary bus),编号为 [04](或区间 [04-0b])。
0000:04:00.0、0000:04:00.1:这些是桥接器 00:07.1 管理的下游设备(在次级总线 04 上)。
区间 [05-06] 表示该桥接器管理一个连续的下游总线范围(05到06),常见于switch或多级桥接。
参考:
1. 《PCI Express体系结构导读》
2.深入解析 lspci:5 分钟读懂 PCI/PCIe 拓扑与链路状态(LnkCap / LnkSta)
220