PCIe简介/体系架构/工作原理/资源分配/错误定位

一、PCIe简介

PCIe(Peripheral Component Interconnect Express)是一种用于连接计算机内部硬件组件的高速串行总线标准。与之前的PCI(Peripheral Component Interconnect)总线相比,PCIe具有更大的带宽和速度,能够更好地满足现代计算机的需求。

PCIe总线采用点对点连接,每个设备都直接连接到主板上的PCIe控制器,而不是共享总线。这使得数据传输更快,因为数据不需要在多个设备之间进行共享和调度。

PCIe总线分为多个版本,包括PCIe 1.0、PCIe 2.0、PCIe 3.0和PCIe 4.0等等。每个版本都提供了不同的带宽和速度,以适应不同的硬件需求。同时,PCIe还支持多种不同的插槽大小和配置,以便更好地适应各种不同的设备和组件。

总的来说,PCIe总线是一种可靠、高效和快速的连接方式,它对于现代计算机的性能和功能至关重要。

二、体系结构

PCIe体系架构是指PCIe总线系统中各个组成部分的结构和关系。PCIe体系架构包括以下几个主要组成部分:

  1. PCIe Root Complex:PCIe Root Complex是一个逻辑组件,它位于CPU或南桥芯片组中,负责管理和控制PCIe总线的连接。

  2. PCIe Endpoint:PCIe Endpoint是指连接到PCIe总线上的各种设备或组件,例如图形卡、网卡、存储设备等,它们通过PCIe通信协议与Root Complex通信。

  3. PCIe Switch:PCIe Switch是一种设备,它允许多个PCIe Endpoint设备连接到同一PCIe总线上,提供更大的PCIe总线带宽,同时还可以通过交换机端口进行多设备间的通信。

  4. PCIe Bridge:PCIe Bridge常放在各种外围设备、扩展卡等通用总线设备中,它允许外围设备通过PCIe接口连接到计算机系统中,从而提供更高的性能和带宽。

  5. PCIe Virtualization:PCIe虚拟化是一种技术,它允许多个独立的虚拟机通过PCIe总线访问物理硬件资源,从而实现更高的系统资源利用率和更好的系统管理。

总的来说,PCIe体系架构提供了一种强大的、高效的、可扩展的总线架构,可以支持各种高性能计算和通信应用。

三、层次结构

PCIe层次结构是指PCIe总线系统中不同设备的连接、通信和管理的层次结构。PCIe层次结构包括以下几个层次:

  1. Physical Layer:物理层是PCIe总线系统中最底层的层次,它定义了总线的物理接口特性和电气特性,例如线路驱动能力、电平、时钟频率等。

  2. Data Link Layer:数据链路层是传输数据的中间层,它负责管理和控制数据包的传输、重传、错误检查等,并提供流量控制和拥塞控制。

  3. Transaction Layer:事务层是PCIe总线系统的核心层次,它负责管理和控制PCIe设备之间的事务,包括读写数据、配置寄存器、中断处理等。

  4. Transaction Layer Packet (TLP):事务层数据包是PCIe总线系统中传输数据的基本单位,它包含头部、有效负载和尾部等信息,可以通过PCIe总线传输。

  5. Protocol Layer:协议层是PCIe总线系统中的最高层次,它定义了PCIe总线的通信协议和操作规范,包括逻辑连接、数据传输、错误检查和恢复等。

总的来说,PCIe层次结构是一种复杂的层次化结构,它可以支持各种高性能计算和通信应用,同时也具有较高的可扩展性和灵活性。

四、工作原理

PCIe(Peripheral Component Interconnect Express)总线是一种高速串行总线技术,它使用串行数据传输方式替代了传统的并行数据传输方式,能够提供更高的传输速度和更高的带宽利用率。PCIe总线工作原理如下:

  1. 初始化:当计算机启动时,主板上的BIOS会对系统中的所有PCIe设备进行初始化和配置,为它们分配资源和地址空间。

  2. 链路层协议:PCIe总线使用链路层协议来管理和控制数据的传输。在传输数据前,PCIe设备之间先建立逻辑链路,然后通过链路层协议进行数据传输和控制。

  3. TLP(Transaction Layer Packet):在PCIe总线中,数据传输的基本单位是TLP,可以包括许多不同类型的传输,如读操作、写操作、配置请求、中断请求等。

  4. 数据传输:PCIe总线采用端对端的传输方式,将数据从发送端口传输到接收端口。在传输过程中,PCIe总线可以根据需要进行流量控制和拥塞控制,以确保数据的正确传输和处理。

  5. 中断处理:PCIe设备可以通过中断请求通知计算机主机进行处理。当PCIe设备发生重要事件时,如完成数据传输、出错等,就会通过中断请求向主机发送中断信号,主机收到信号后会中断当前操作,并将控制权交给中断处理程序。

  6. 错误检测和恢复:PCIe总线可以通过CRC校验和其他错误检测机制检测传输过程中的错误,并采取恢复机制避免错误的产生和影响。

总的来说,PCIe总线工作原理是一种高速、高效、可靠的数据传输方式,可以支持各种高性能计算和通信应用,是现代计算机系统中必不可少的一部分。

五、不同版本及传输速率、吞吐量

PCIe(Peripheral Component Interconnect Express)是一种高速串行总线标准,用于连接计算机主板和各种外部设备。PCIe标准目前有多个版本,每个版本都有不同的编码方案、传输速率和带宽。下面对PCIe的版本、编码方案、传输速率、吞吐量和有效带宽进行介绍:

  1. PCIe版本:当前PCIe标准的版本包括PCIe 1.0、PCIe 2.0、PCIe 3.0、PCIe 4.0和PCIe 5.0。每个版本都有不同的传输速率和带宽。

  2. 编码方案:PCIe使用128b/130b编码方案,每个传输字节转换为130个比特位,其中2位用于控制传输,剩下的128位用于数据传输。

  3. 传输速率:PCIe的传输速率是指每个差分对之间传输的比特位数。  PCIe 1.0和2.0的传输速率分别为2.5 GT/s和5 GT/s,PCIe 3.0的传输速率为8 GT/s,PCIe 4.0的传输速率为16 GT/s,PCIe 5.0的传输速率为32 GT/s。

  4. 吞吐量:PCIe的吞吐量是指在单位时间内传输的数据量。PCIe 1.0和2.0的吞吐量分别为250 MB/s和500 MB/s,PCIe 3.0的吞吐量为1 GB/s,PCIe 4.0的吞吐量为2 GB/s,PCIe 5.0的吞吐量为4 GB/s。

  5. 有效带宽:PCIe链路的有效带宽是指在实际传输数据时,可以使用的带宽。PCIe链路的有效带宽可以通过乘以传输速率和编码方案的瑞利系数得出。例如,PCIe 3.0 x16的有效带宽为16 x 8 GT/s x 0.97 = 124.8 GB/s。

需要注意的是,PCIe的版本、传输速率、吞吐量和有效带宽可能会受到其他因素的影响,如主板、扩展卡和驱动程序等。

六、资源分配

在PCIe总线中,每个设备都会被分配一些资源,包括ID资源、Memory资源和IO资源。

  1. ID资源:ID资源包括Vendor ID和Device ID。Vendor ID是标识设备厂商的16位数字,由PCI-SIG组织分配给各个设备厂商。Device ID是标识设备型号的16位数字,由各个设备厂商自行分配。

  2. Memory资源:Memory资源被用于访问设备中的内存,包括Base Address Register(BAR)。每个设备都可以有多个BAR,每个BAR的大小和位置可以通过配置寄存器来进行设置。例如,网络接口卡可以使用Memory资源来存储数据包缓存和DMA操作缓存。

  3. IO资源:IO资源被用于访问设备中的IO端口,包括IO Base Address Register(IO BAR)。每个设备都可以有多个IO BAR,每个IO BAR的大小和位置可以通过配置寄存器来进行设置。例如,声卡可以使用IO资源来存储音频数据。

ID资源、Memory资源和IO资源都有其特定的地址范围和访问方式。在PCIe配置过程中,系统会将这些资源地址映射到内存地址空间或IO地址空间中,以便CPU和设备之间进行数据传输和通信。

ID资源

在PCIe中,设备ID资源包括Vendor ID、Device ID、Subsystem Vendor ID和Subsystem Device ID这四个值。此外,每个PCIe设备还会被分配一个唯一的三元组(Bus Number、Device Number、Function Number),用于唯一标识该设备在PCIe总线上的位置。

  • 总线号(Bus Number):表示该设备所在的PCIe总线号,占用8个比特,范围为0-255。
  • 设备号(Device Number):表示该设备在该PCIe总线上的设备号,占用5个比特,范围为0-31。
  • 功能号(Function Number):表示该设备在该PCIe总线上的功能号,占用3个比特,范围为0-7。

总线号、设备号和功能号组成一个唯一的三元组,用于标识PCIe总线上的设备。对于一个PCIe设备,唯一的三元组由BIOS或操作系统进行初始化和设定,并分配给该设备。系统通过这三个数字可以定位并访问每个PCIe设备。

总之,PCIe设备的ID资源包含Vendor ID、Device ID、Subsystem Vendor ID和Subsystem Device ID,而设备在总线上的位置则由总线号、设备号和功能号组成的三元组唯一标识。这些信息是操作系统识别和管理PCIe设备的关键。

PCIe资源分配是基于PCIe架构和拓扑模型的。PCIe架构和拓扑模型定义了PCIe总线中设备之间的连接方式和通信规则,以及设备如何访问总线和使用总线资源。

PCIe架构模型:

PCIe通过将数据和控制信息分解成多个数据流(称为“数据包”)来传输数据,每个数据包都有自己的头部和尾部。数据包是通过不同类型的通道传输的,通道包括:数据通道(用于发送实际数据)、管理通道(用于发送控制和管理信息)、配置通道(用于读取和写入设备配置信息)。

PCIe拓扑模型:

PCIe拓扑模型将PCIe设备连接到主板上的PCIe总线上。PCIe总线可以是一个物理插槽或一个集成电路,每个总线可以连接多个设备。设备连接到总线上的方式有两种:直接连接和级联连接。直接连接是指将设备插入总线的物理插槽上,级联连接是指通过PCIe桥连接到总线上。

PCIe资源分配原理

PCIe资源分配遵循总线主控方(Bus Master)和从属设备的原则。总线主控方是指可以直接访问总线和总线资源的设备,它们具有控制总线的能力。从属设备则是指不能直接访问总线和总线资源的设备,它们需要由总线主控方进行控制和访问。

PCIe资源分配的过程可以分为以下步骤:

  1. 首先,总线主控方需要对PCIe设备进行初始化和配置,包括设置设备的ID资源、内存地址范围等等。

  2. 然后,总线主控方将内存地址范围分配给从属设备,并为其设置访问权限。

  3. 从属设备可以发送请求来访问已经分配的内存地址空间,总线主控方则会将请求从数据包中分解出来并进行处理,并将响应数据写回到总线上。

总之,PCIe资源分配是通过总线主控方和从属设备之间的交互实现的,总线主控方分配内存地址空间并控制总线资源,从属设备则向总线主控方发送请求并接收响应。PCIe架构模型和拓扑模型为这种交互提供了技术支持和规范。

七、Lane和Link

PCIe链路的带宽是通过多个差分对(Lane)并行工作来实现高速传输的。一个差分对可以传输一条8位的数据,而PCIe链路的总带宽是由Lane数目和传输速率共同决定的。因此,PCIe链路中的X8、X16等术语表示Lane的数量,具体解释如下:

  1. Lane:PCIe链路通过多少个差分对并行传输数据,就称之为多少个Lane。每个Lane上只能传输单极性数据,因此一个Lane是指一个差分对,即一对TX和RX线。例如,PCIe x1链路就使用一个Lane。

  2. Link:PCIe链路由一个或多个Lane组成,因此也可以称为Link。每个Link有一个独立的控制信道,用于控制传输和错误检测。

  3. X8、X16:X表示Link的数量,8和16表示每个Link中的Lane数量。因此,PCIe x8链路拥有8个Lane,而PCIe x16链路拥有16个Lane。

通过增加Lane的数量可以提高PCIe链路的带宽。例如,PCIe x8链路的带宽比PCIe x4链路高,而PCIe x16链路的带宽比PCIe x8链路更高。注意,PCIe链路的Lane数目不一定与插槽大小(如PCIe x8插槽、PCIe x16插槽)相同,因为插槽大小也包括其他物理标准,如插槽长度和插槽物理位置等。

PCIe插槽

PCIe插槽是主板上用来插入PCIe扩展卡的接口。下面介绍PCIe插槽的种类:

  1. PCIe x1插槽:这是最常见的PCIe插槽类型,用于连接具有x1接口的扩展卡,如网络卡、声卡、USB 3.0扩展卡等。

  2. PCIe x4插槽:这种插槽通常用于高速数据传输,如SSD固态硬盘、RAID控制器等。它们具有更高的传输速度和更大的带宽,因此比x1插槽更适合高性能应用。

  3. PCIe x8插槽:这种插槽主要用于连接需要更高带宽的扩展卡,如高性能网卡、视频捕捉卡等。

  4. PCIe x16插槽:这是最快的PCIe插槽类型,通常用于连接高性能图形卡和其他要求更高带宽的扩展卡。如nVidia、AMD等厂家的独立显卡常常需要插入这样的接口。

需要注意的是,PCIe插槽类型和数量取决于主板的型号和制造商。在选购PCIe扩展卡之前,最好先查看主板的插槽类型和数量,以确保能够兼容。

PCIe协议中,有多种不同的编码方案,主要包括以下三种:

  1. 8b/10b编码 8b/10b编码是第一代PCIe协议采用的编码方案,将每8位数据编码为10位,因此传输速率为数据速率的80%。有效带宽的计算方式为:数据宽度 * 信号速率 * 0.8。

  2. 128b/130b编码 128b/130b编码是第二代PCIe协议采用的编码方案,将每128位数据编码为130位,因此传输速率与数据速率接近,约为数据速率的98.5%。有效带宽的计算方式为:数据宽度 * 信号速率 * 0.985。

  3. 64b/66b编码 64b/66b编码是第三代PCIe协议采用的编码方案,将每64位数据编码为66位,因此传输速率为数据速率的97%。有效带宽的计算方式为:数据宽度 * 信号速率 * 0.97。

从带宽利用率和有效带宽计算公式可以看出,采用更高效的编码方案可以提高PCIe总线的带宽和传输效率。但这同时也要求更高的硬件实现和处理能力,因此不同的PCIe设备和应用场景需要根据实际需求来选择和配置编码方案。

八、MSI和MSI-X

MSI全称为Message Signaled Interrupt,是一种通过向MSI寄存器发送消息通知CPU的中断方式。它将中断请求直接发送到CPU,而不需要经过中断控制器。这种方式可以大幅减少CPU和中断控制器之间的通信,从而提高系统的性能。

MSI的工作原理是,设备向PCIe配置空间的中断寄存器中写入中断消息和中断向量,通知主机CPU进行中断处理。主机CPU在收到中断请求后,会向设备发出一个中断确认信号,通知设备可以开始执行中断处理程序。整个过程中,设备和主机CPU之间通过PCIe总线传递中断消息和中断请求,以实现中断机制。

MSI-X全称为Message Signaled Interrupt-Extended,它是一种支持多个中断向量的中断方式。它可以使多个设备同时向主机发送中断请求,并且每个向量都对应着一个中断请求。在处理这些请求时,CPU可以根据中断向量进行区分,以提高中断处理的效率。

与MSI不同,MSI-X使用一个独立的寄存器数组来存储中断消息和中断向量。每个向量都有一个唯一的中断请求ID,并且每个设备可以使用多个向量来发送多个中断请求。在处理这些请求时,CPU可以根据中断请求ID和中断向量进行区分,以提高中断处理的效率。

总之,MSI和MSI-X是一种高效的中断方式,它可以使设备和主机CPU之间实现快速、可靠的消息传递,并能够实时响应设备事件请求,从而提高系统的性能和稳定性。

  1. 中断向量数

在PCIe中的MSI和MSI-X中,中断向量数是由系统提供的。因此,在使用MSI和MSI-X前,需要确认系统是否支持中断向量数。

对于MSI来说,每个设备只有一个中断向量,因此系统能够支持的最大中断向量数就等于系统能够支持的最大设备数量。在很多系统中,MSI支持的最大设备数量为32个。

对于MSI-X来说,每个设备可以支持多个中断向量,因此支持的最大中断向量数就更多。在很多系统中,MSI-X支持的最大中断向量数为2048个。

  1. 中断号约束

在PCIe中,不同的设备对中断号的约束是不同的。对于MSI来说,每个设备使用的中断号必须是唯一的,而且必须是连续的。因此,在使用MSI前需要确认能够分配到连续的中断号。

对于MSI-X来说,每个设备使用的中断号可以是任意的,但是必须在指定的范围内。这个范围由设备驱动程序负责设置,并且必须满足PCIe规范中的要求。

  1. 信息存放位置

在PCIe中,MSI和MSI-X的中断信息被存放在设备的中断寄存器中。这个寄存器通常是PCIe配置空间中的一个特殊寄存器,它包含了中断请求ID、中断向量号以及其他与中断相关的信息。当设备需要向主机发出中断请求时,它会将中断信息写入这个寄存器。主机在收到中断请求后,会根据中断信息进行中断处理。

九、SR-IOV

SR-IOV(Single Root I/O Virtualization)是一种I/O虚拟化技术,它可以让一台物理主机上的单个PCI设备被划分为多个虚拟设备,这样每个虚拟设备都可以独立地分配给虚拟机使用。SR-IOV可以显著提高虚拟机网络I/O的性能和可靠性,同时也可以提高主机上可用设备的数量。

SR-IOV主要由以下几个组件组成:

  1. 物理功能(Physical Function,PF):物理设备的实际逻辑实例,用于管理SR-IOV虚拟设备。每个物理设备上只能有一个PF。

  2. 虚拟功能(Virtual Function,VF):SR-IOV中划分出的虚拟设备。每个VF都有自己的PCIe配置空间和中断寄存器,可以独立进行DMA和中断处理,因此可以被分配给单个虚拟机使用。

  3. VF驱动程序:负责管理VF的设备驱动程序,通过和PF通讯实现虚拟网络设备的配置和管理。

SR-IOV的主要功能包括:

  1. 硬件虚拟化:通过SR-IOV,可以将一台物理设备虚拟化为多个虚拟设备,每个虚拟设备可以独立地分配给虚拟机使用,从而实现了硬件设备的虚拟化。

  2. 性能提升:虚拟机通过VF访问物理设备时,可以通过硬件DMA方式直接访问物理内存,无需通过虚拟机的vCPU来进行中转和复制,因此可以显著提高虚拟机网络I/O的性能和可靠性。

  3. 管理简单:通过SR-IOV,可以将多个虚拟设备集成到单个物理设备中,因此可以大大减少虚拟机管理者对物理设备的管理工作量。此外,VF的配置和管理可以通过物理设备上的PF进行,也可以通过远程管理工具来完成。

十、AER

PCIe AER(Advanced Error Reporting)是一种PCIe总线错误处理机制,它可以帮助系统监测和纠正PCIe总线中的各种错误,以提高系统的可靠性和稳定性。AER支持多种类型的错误响应和错误处理,包括可恢复和不可恢复的错误,以及软件和硬件响应方式。

AER高级错误是指在PCIe总线中发生的一种严重错误,它可能会导致设备崩溃或系统崩溃。AER高级错误包括一些不可恢复的硬件错误,如Ferr错误、Perr错误、Serr错误等,以及一些可恢复的软件错误,如争用错误、超时错误等。

AER高级错误处理机制一般由以下几个部分组成:

  1. 错误报告:PCIe设备在检测到错误时,会将错误信息发送到主机内存中的错误记录结构中,包括错误类型、错误位置、错误原因等信息。

  2. 错误处理:主机操作系统在检测到错误报告时,会根据错误类型和错误位置等信息进行相应的错误处理,包括重置设备、禁用设备等操作。

  3. 错误通知:主机操作系统会将错误信息通知到应用程序或监控程序中,以提供实时的错误监控和错误处理。

AER高级错误处理机制可以提高系统的可靠性和稳定性,但需要系统硬件和软件的支持。在系统设计中,需要考虑AER错误处理机制的实现和配置,以确保系统能够及时、准确地检测和处理PCIe总线中的各种错误。

PCIe AER高级错误根据错误类型和错误来源的不同,可以分类为以下几类:

  1. 可恢复错误(Correctable Error):可恢复错误是指PCIe总线中发生的一种可修复的错误,例如数据传输中的校验错误和超时错误等。这种错误不会影响设备的正常运行,但需要进行相应的错误处理和修复。

  2. 不可恢复错误(Uncorrectable Error):不可恢复错误是指PCIe总线中发生的一种无法修复的错误,例如硬件故障、电气问题等。这种错误可能会导致设备崩溃或系统崩溃,并需要进行相应的设备重置或禁用等操作。

  3. 致命错误(Fatal Error):致命错误是指造成设备或系统崩溃的一种严重错误,例如PCIe总线控制器故障、物理连接问题等。这种错误通常需要进行硬件故障排除和更换等操作。

PCIe AER高级错误消息通常包括以下信息:

  1. 错误类型:指错误的类型,如可恢复错误、不可恢复错误、致命错误等。

  2. 设备ID:指发生错误的PCIe设备的唯一标识符。

  3. 错误状态:指错误的状态码,如Ferr、Perr、Serr等。

  4. 错误位置:指发生错误的位置,如事务ID、端口号、功能号等。

  5. 错误数据:指与错误相关的数据或信息,如数据传输中的错误数据、超时时间等。

PCIe设备和主机操作系统需要共同支持AER高级错误处理机制,以便能够及时、准确地检测和处理各种错误,提高系统的可靠性和稳定性。

十一、lspci命令

lspci命令常用的参数如下:

  • -v:显示设备详细信息,包括设备驱动程序、IRQ、内存地址、I/O地址等。
  • -s <位置>:显示指定位置的设备信息,例如-s 00:01.0表示显示总线号为0、设备号为1、功能号为0的设备信息。
  • -vv:显示更加详细的设备信息,例如PCIe Capabilities,Power Management Capabilities等。
  • -n:显示设备的厂商ID和设备ID。
  • -k:显示设备驱动程序的名称和状态。
  • -D:显示设备中的虚拟设备信息。
  • -t:以树形结构显示设备信息,包括每个设备的父设备和子设备。

例如,执行lspci -v命令会输出每个设备的详细信息,包括设备驱动程序、IRQ、内存地址、I/O地址等:

00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02)
    Subsystem: Red Hat, Inc. QEMU Virtual Machine
    Flags: bus master, fast devsel, latency 0
    Kernel driver in use: agpgart-amd64

其中,第一行是设备的位置信息,在下面的几行中可以看到设备的详细信息,包括子系统、标志、驱动程序等。

执行lspci -s 00:01.0命令会输出指定位置设备的信息:

00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
    Flags: bus master, medium devsel, latency 0
    Kernel modules: i2c_piix4

其中,第一行是设备的位置信息,在下面的几行中可以看到设备的详细信息。

总之,使用lspci命令的不同参数可以输出不同类型的设备信息,方便开发人员和管理员进行PCIe设备管理和维护。

猜你喜欢

转载自blog.csdn.net/songpeiying/article/details/131722272