问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

PCIe基础概念与设备树详解

创作时间:
作者:
@小白创作中心

PCIe基础概念与设备树详解

引用
CSDN
1.
https://m.blog.csdn.net/elton_xiao/article/details/145343357

PCIe(Peripheral Component Interconnect Express)是一种用于连接外设的总线标准,自2003年推出以来,已成为现代计算机系统中CPU与各种外设(如GPU、网卡、USB控制器等)交互的基础。本文将详细介绍PCIe的基础概念与设备树结构,帮助读者理解其硬件架构和设备连接方式。

1. PCIe总体框图

首先,我们先从PCIe的基本概念开始。PCIe的架构主要由五个部分组成:Root Complex,PCIe Bus,Endpoint,Port and Bridge,Switch。其整体架构呈现一个树状结构,如下图所示:

2. Root Complex(RC)

Root Complex是整个PCIe设备树的根节点,CPU通过它与PCIe的总线相连,并最终连接到所有的PCIe设备上。

由于Root Complex是管理外部IO设备的,所以在早期的CPU上,Root Complex其实是放在了北桥(MCU)上,后来随着技术的发展,现在已经都集成进了CPU内部了。下图展示了System Agent部分,其中包含了PCIe Root Complex:

系统中可以存在多个Root Complex。例如,i9-10980XE CPU有4个Root Complex,而i7-9750H CPU则只有一个。在Linux系统中,可以通过lspci命令查看所有Root Complex:

$ lspci -t -v
-+-[0000:c0]-+-00.0  Advanced Micro Devices, Inc. [AMD] Starship/Matisse Root Complex
 +-[0000:80]-+-00.0  Advanced Micro Devices, Inc. [AMD] Starship/Matisse Root Complex
 +-[0000:40]-+-00.0  Advanced Micro Devices, Inc. [AMD] Starship/Matisse Root Complex
 \-[0000:00]-+-00.0  Advanced Micro Devices, Inc. [AMD] Starship/Matisse Root Complex

3. PCIe总线(Bus)

PCIe上的设备通过PCIe总线互相连接。与老式的PCI和PCI-X相比,PCIe有以下两点重要区别:

  1. PCIe采用点对点的连接方式,类似于网络中的交换机,而不是传统的共享总线。
  2. PCIe使用高速串行信号,取代了老式PCI的单端并行信号,解决了频率提升受限的问题。

4. PCIe Device

PCIe上连接的设备可以分为两种类型:

  • Type 0:表示PCIe上的终端设备,如显卡、声卡、网卡等。
  • Type 1:表示PCIe Switch或Root Port,主要用于连接其他PCIe设备。

4.1. BDF(Bus Number, Device Number, Function Number)

每个PCIe设备在系统启动时都会被分配一个唯一的BDF地址,由三部分组成:

  • Bus Number:8位,最多支持256条总线
  • Device Number:5位,最多支持32个设备
  • Function Number:3位,最多支持8个功能

BDF地址通常表示为BB:DD.F格式。例如,可以通过lspci命令查看设备的BDF地址:

$ lspci -t -v
 # [Domain:Bus]
 \-[0000:00]-+-00.0  Advanced Micro Devices, Inc. [AMD] Starship/Matisse Root Complex
         # Device.Function
             +-14.0  Advanced Micro Devices, Inc. [AMD] FCH SMBus Controller

此外,PCIe还支持ARI(Alternative Routing-ID Interpretation)模式,可以将Device Number和Function Number合并为一个8位字段,最多支持256个Function。

4.2. Type 0 Device和Endpoint

所有连接到PCIe总线上的Type 0设备都可以实现PCIe的Endpoint,用于发起或接收PCIe请求和消息。例如,一块双网口网卡可以为每个网口实现一个单独的Endpoint。

4.3. RCIE(Root Complex Integrated Endpoint)

RCIE是指直接连接到Root Complex的集成设备,如内存控制器、集成显卡等。这些设备的Bus Number通常为0。

4.4. Port / Bridge

需要通过插槽连接的设备需要通过PCIe Port连接。Root Complex上的每个Root Port实际上由两个Bridge组成:一个Host Bridge连接到CPU,一个PCI Bridge连接到下游设备。

通过lspci命令可以看到这些桥的存在:

$ sudo lspci -s 80:01.0 -v
80:01.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Starship/Matisse PCIe Dummy Host Bridge
        Flags: fast devsel, IOMMU group 13

$ sudo lspci -s 80:01.1 -v
80:01.1 PCI bridge: Advanced Micro Devices, Inc. [AMD] Starship/Matisse GPP Bridge (prog-if 00 [Normal decode])
        Flags: bus master, fast devsel, latency 0, IRQ 35, IOMMU group 13
        Bus: primary=80, secondary=81, subordinate=81, sec-latency=0
        I/O behind bridge: 0000b000-0000bfff [size=4K]
        Memory behind bridge: f0000000-f10fffff [size=17M]
        Prefetchable memory behind bridge: 0000020030000000-00000200420fffff [size=289M]
        Kernel driver in use: pcieport

4.5. Switch

PCIe Switch内部包含Upstream Port、Downstream Port和虚拟总线,用于连接多个设备。Switch内部的总线是逻辑上的虚拟总线,实际通过交换电路实现信号转发。

5. 小结

通过以上介绍,我们可以看到PCIe设备树的主要部件及其连接方式。下图展示了完整的PCIe设备树结构:

本文介绍了PCIe的基础概念与设备树结构,后续将继续探讨PCIe的配置空间、消息路由等高级主题。

参考资料

  • [1]: PCI Express Base Specification
  • [2]: Thunderbolt™ 3 Technology Brief
  • [3]: USB4™ Specification
  • [4]: Compute Express Link™ (CXL™) Specification
  • [5]: Intel® 3000 and 3010 Chipset Memory Controller Hub (MCH) datasheet
  • [6]: H12DSi-NT6 motherboard manual
  • [7]: fpga4fun - PCI Express 2 - Topology
  • [8]: White Paper: Introduction to Intel® Architecture
  • [9]: Crossbar Switch
  • [10]: Mindshare - An Introduction to PCI Express
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号