Notes about PCIe domain和segment
本文将mark下PCIe domain和segment的相关notes。内容转载自PCIe domain和segment介绍
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 - FFFF |
| Bus | 总线号 | 设备所连接的总线号(总线 0 为起点)。 | 00 - FF |
| Device | 设备号 | 总线上的设备(槽位 / 逻辑设备),最多 32 个。 | 00 - 1F |
| Function | 功能号 | 物理设备上的子功能(例如多功能网卡)。 | 0 - 7 |