本文将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