PCIe互联技术的架构及应用

223 篇文章 0 订阅
223 篇文章 0 订阅

4d50d88df4ce866761e707a08c27394f.jpeg

 

全面探索PCIe:从基本架构到高效应用

   

PCIE介绍

1、概述  

PCI Express,或简称为PCIe,是一种高速、高带宽的串行互连技术,专为连接计算机主板上的各类外设设计,如显卡、声卡、网卡、固态硬盘控制器等。它是对传统PCI总线技术的卓越升级,自2000年代中期起,逐渐取代了PCI和AGP等旧有线技术,确立了新的行业标杆。以下是PCIe技术的几个核心特性:
1. 高速传输:PCIe采用点对点的连接方式,无需共享总线,数据传输速度快,最高可达每秒32GB。
2. 双向传输:PCIe支持双向传输,可同时进行输入和输出操作,提高设备性能。
3. 热插拔:PCIe设备支持热插拔,即在系统运行时插入或移除设备,不会对系统造成影响。
4. 扩展性强:PCIe接口数量灵活,可根据需求增加或减少,满足不同设备的连接需求。
5. 兼容性好:PCIe兼容现有的PCI和AGP设备,方便用户升级。
6. 节能环保:PCIe设备功耗低,有利于降低能耗,符合绿色环保理念。

物理层与电气规范

PCIe采用点对点的串行连接,每个通道(Lane)可单向传输数据。通道数范围从1到更多,通常以“x16”、“x4”等表示,代表16或4个通道。这种设计让数据传输更高效,满足不同需求。

•速度: 每代技术的速度不断演进,PCIe 1.0提供2.5GT/s(Gigatransfer per second)每个lane,而PCIe 4.0已达到16GT/s,PCIe 5.0更是达到32GT/s。速度乘以通道数和编码效率(大约8b/10b编码)转化为实际带宽。

PCIe 6.0提供了每通道64 GT/s(Gigatransfers per second)的原始传输速率,是PCIe 5.0的两倍。对于最常见的x16配置(16通道),理论最大带宽可达到1256GB/s,而x32配置则高达512GB/s。    

f1f209e734bc82807d097040986ac54a.jpeg

逻辑层

全双工通信:PCIe实现双向数据流,即发送与接收同步进行,打破PCI的半双工局限。先进错误检测与纠正:内置纠错机制,保障数据完整无缺。

•热插拔:支持热插拔,可以在系统运行时添加或移除设备。

总线架构

Root Complex:作为PCIe总线的起始点,Root Complex通常被集成在主板南桥芯片内,负责设备配置和通信的管理。

•Endpoint:设备,如显卡或网卡,是Endpoint,直接连接到总线上。

应用与兼容性

•版本兼容:各版本的PCIe卡可适配相应槽口,但速度受最低版本限制。例如,PCIe 4.0卡在3.0槽中,仅能达到3.0的速度。

未来趋势

随着技术发展,PCIe继续演进,如PCIe 6.0在速度和能效上再次大幅提升,同时支持更多新特性,如更灵活的拓扑结构和低功耗电,为下一代高性能计算、数据中心和AI、图形处理等应用奠定基础。

PCIe 7.0(Peripheral Component Interconnect Express 第七代)的具体规范尚未正式公布或被广泛讨论。技术标准的迭代通常随着行业需求、技术进步和市场趋势的发展而推进,考虑到PCIe 6.0的推出时间及规格,预计PCIe 7.0在未来几年内不太可能成为讨论的焦点。然而,基于技术发展的趋势和前几代PCIe的演进,我们可以推测PCIe 7.0可能包含的特征或改进方向:

"PCIe每代升级,带宽显著提升。PCIe 6.0已达64 GT/s每通道。展望未来,PCIe 7.0有望实现翻倍至1256 GT/s每通道的高速传输,满足大数据量、高性能应用的需求。"

"2. 高效节能:技术进步使新版本产品更注重能效,如精细电源管理和低功耗设计,满足绿色计算与移动设备需求。"

"3. 卓越的兼容性与前瞻性:既保留前代设备的完美对接,又引入新机制,确保新旧设备在新标准下均能释放卓越性能。”

4. 卓越的物理层和信号技术:为实现更高的数据速率,我们需要更先进的信号传输、编码技术,以及优化的噪声抑制和干扰管理,确保信号的稳定与完整。

5. 拓扑结构与互连灵活性:持续优化,支持更复杂系统设计,如多主机-设备连接、高级切换和路由技术。适应大型数据中心及高性能计算架构需求。

6. 安全与管理:我们强化了数据保护,引入硬件级安全防护,并配备更智能的系统管理和诊断工具,以应对不断升级的安全挑战和满足维护需求。

          

2、PCIe总线的层次结构  

PCIe总线采用串行连接方式,并使用数据表Packet进行数据传输。

c9e17925d4a7f1f63efdeebe6dc02e04.jpeg

          

5e2b4830adb48f8b3fdfd253f602bc56.jpeg

接收端的数据需要通过物理层、数据链路层和事务层,最终到达核心层。


          

2.1、事务层  

事务层对PCIe总线进行管理,主要采用与PCI总线兼容的总线事务方式。这些事务通过Switch等设备转发至其他PCIe设备或RC。同时,RC也能通过这些总线事务来访问PCIe事务。

de942d0cd626e913f9bf049fdc5b0272.jpeg

事务层负责从PCIe设备核心层接收数据,封装为TLP后发送至数据链路层。同时,它也从数据链路层接收报文,并将其转发至PCIe设备的核心层。

2.2、数据链路层  

数据链路层保证来自发送端事务层的报文可靠、完整地发送到接收端的数据链路层。

事务层报文在穿越数据链路层时,将携带Sequence Number前缀和CRC后缀。数据链路层通过ACK/NAK协议,确保信息传递的可靠性。

adc60e59bf792c7b0f871b1e6e304445.jpeg

2.3、物理层  

物理层,PCIe总线的基础,将各类PCIe设备紧密相连。它为设备间的数据交换提供传输媒介,确保数据传送的可靠性,营造稳定的物理环境。

PCIe总线的物理层构建了LTSSM(链路训练与状态机)状态机。通过此状态机,PCIe链路能有效地管理自身的连接状态,执行链路训练、恢复以及电源管理等关键任务。

              

3、PCIe总线的拓扑结构  

一个层次结构实例,包含RC、多个I/O设备端点、Switch及PCI Express至PCI/PCI-X桥接器。所有这些组件都通过PCI Express总线紧密相连,构建了一个高效运行的系统。

          

0b50670da2e5fdc567c50f55ae1dd7f8.jpeg

1、RC——Root Complex

将PCIe总线端口、存储器控制器等外部设备接口统一集成为Root Complex(RC),实现高效简洁的设备连接。

2、Switch

PCIe链路必须使用Switch扩展PCIe链路后,才能连接多个设备。    

在PCIe总线中,Switch由一个上游端口和2-n个下游端口组成。

在一个Switch中可以与RC直接获间接相连的端口为上游端口。

下游端口一般与EP相连,或者连接下一级Switch继续扩展PCIe链路。

0cdc192c932c30f69d6d2172a135e37a.jpeg

Switch的核心由众多PCI-to-PCI桥构成,每个上游和下游端口都对应一个虚拟PCI桥。因此,Switch的端口数量直接决定了其内部的虚拟PCI桥和PCI桥配置空间的数量。

          

              

          

50a7d09c55ac0f0f24387bb7f0402483.jpeg

Switch需解决PCIe总线的QoS问题,对不同优先级的数据报文进行差异化处理。通过多通路VC技术,为数据报文设定3位TC(Traffic Class)标签,实现8种优先级分类。让每一份数据,都能得到应有的重视。

3、基于VC和端口的仲裁机制

探索Switch的奥秘:Egress端口,数据的出发站,承载着信息的离开;Ingress端口,数据的归宿地,见证着信息的进入。这就是Switch的核心,简洁而深邃。

为了解决Switch中的冲突,必须处理端口仲裁和路由选择问题。当来自不同入口的报文同时到达同一出口时,需要进行端口仲裁。

三种端口仲裁方式:

一是Hardware-fixed仲裁测量。采用固化的RR仲裁方法。    

二是WRR仲裁策略,加权的RR仲裁策略。

"Time-Based WRR仲裁策略,即基于时间片的WRR策略,将PCIe总线划分为若干时段。每个端口占用一个时段,根据其使用时段的长短进行权重分配。此策略旨在实现公平高效的带宽管理。”

b110524ba9894903bb1fc03a598d6798.jpeg

VC仲裁,即基于虚拟通道的数据报文仲裁,根据各通道的利用情况做出裁决。PCIe总线设定了三种仲裁机制:严格的优先级仲裁,循环轮询仲裁以及加权循环轮询仲裁。这三大机制确保了数据传输的高效稳定。

          

4、PCIe 四种地址空间  

3e68eaee841fba7824413abf9ce7b510.jpeg

          

4.1. 配置空间  

每个PCIe功能都配备了4KB的配置空间。前256字节遵循PCI标准,而余下的部分则属于PCIe扩展配置空间。这为设备提供了丰富的定制和扩展可能性,以满足各种高级应用需求。

PCIe配置空间如下图所示,地址范围为0x000~0xfff。    

88ea5c2f3d66b0d04ecc766b881d17b6.jpeg

软件通过配置空间,实现设备状态的精准控制与实时检查。PCI兼容配置,支持CAM或ECAM访问;而PCIe扩展配置,仅能通过ECAM访问。

PCIe Enhanced Configuration Access Mechanism (ECAM),是实现在内存空间中直接访问PCIe配置空间的创新机制。它将PCIe的配置空间映射到内存,让内存访问变得更加便捷高效。

4.2. IO空间  

PCIe具备与需使用I/O空间的传统设备兼容的I/O能力。然而,未来的PCIe规范修订版可能会限制其I/O空间的使用。

4.3. memory空间  

探索memory的地址空间,即MMIO空间,32位平台可达4GB。此内存空间与主存(Main Memory)截然不同,两者概念各异。

下图揭示了一种通用的内存与I/O映射机制。其规模受系统可用地址范围(通常由CPU的可寻址能力界定)的影响。在PCIe架构中,支持的内存地址最大可达64比特。图中所展示的仅是端点(EP)声明使用的MMIO和IO,然而,这种能力并非EP独有。对于Switch和RC来说,这同样是一种常见的功能,它们内部也存在可以通过MMIO和IO地址访问的设备特定寄存器。这一特性使得设备间的通信更为高效,进一步优化了系统性能。

ebb86e96167a50def4b774493e3460f7.jpeg   

图4-1揭示了PCIe设备所声明的两种MMIO类别:可预取MMIO(P-MMIO)和不可预取MMIO(NP-MMIO)。可预取空间具备两个鲜明的特性,明确且重要。

·允许写合并(Write merging is allowed)

X86通过独立编址,将内存操作与外设IO操作进行分离,实现了内存空间和IO空间的明确划分。相较之下,ARM则采用统一编码的方式。

52eac4d6ff472ff4b6c7e691c29f0341.jpeg

4.4. message空间  

Message Space,专为满足设备间及设备与系统软件之间的异步通讯需求而设计。它用于传输控制、状态变更通知、错误报告等非数据传输目的的通讯,是PCIe架构实现高级功能和管理控制的核心机制。以下是Message Space的主要特点:

功能与用途:

错误报告系统:该系统主要处理两类错误,即不可纠正的错误和可纠正的错误。具体包括Link、Completer错误、Poisoned TLP和Flow Control Protocol等。这些错误信息会通过Message Space传递给系统软件进行相应的处理。我们的目标是确保系统的稳定运行,减少错误发生的可能性。

电源管理:利用Message Space实现设备状态变更通知(包括进入或退出低功耗模式)及电源状态请求等电源管理事件的传递和命令执行。

3. 热插拔管理:设备插入或移除时,通过Message Space实时通知系统,确保操作系统安全、高效地响应,实现设备配置的无缝切换。

4. 虚拟化助力:借助Message Space,在支持的虚拟化环境中传递SR-IOV设备直通和虚拟功能配置等控制信息。

实现方式:

引入Message Signaled Interrupts的PCIe,革新了传统的INTx中断线。这一机制通过Message Space,实现了中断信息的高效传输,让数据处理更加流畅。让我们一起迎接这个创新的PCIe时代,开启高效稳定的计算新篇章。

优化后:Message Headers是PCIe TLP(事务层数据包)的一部分,它负责标记并定向Message Space的事务。这就像网络中的GPS,确保信息准确无误地找到目的地。

结构造与控制:

访问和使用Message Space通常由Root Complex或Switch管理,确保了系统层面的统一控制和高效处理设备间的通讯。同时,它也支持系统软件(如驱动、OS)实时响应和控制设备状态。

PCIe Message Space,作为PCIe架构的关键通道,确保设备管理、错误报告、电源管理及热插拔等操作的流畅进行。它极大地提升了系统层面的控制力和灵活性,是不可或缺的重要组件。            

          

PCI Express(PCIe)的基地址寄存器(BAR),是配置空间的关键元素,它决定PCIe设备如何映射到系统内存或I/O空间。这一机制实现了直接内存访问(DMA)和中断处理。以下是关于BAR的详尽解读:

基本概念

位置:PCIe设备配置范围0x10至0x24(共6个),配备最多6个BAR寄存器,界定设备地址空间大小与类型。

"BAR类型:可选择内存映射(Memory Mapped)或I/O映射,由BAR寄存器的最低位决定。"

工作流程

2. 地址分配:系统写入全1(或全F)至每个BAR,以确定设备所需空间。设备回应实际大小,据此进行地址分配。

4. 类型:BAR0主要应用于内存映射,其余BARs则可服务于配置空间、I/O或扩展ROM映射等需求。

高级特性    

•虚拟化:SR-IOV允许BAR虚拟化,设备直通或分割,提升虚拟机的I/O性能。

•电源管理:BARs还与设备电源状态关联,控制何时可访问地址空间。

总结

PCIe Base Address Register,作为设备与系统资源间的纽带,确保数据传输的高效性。随技术发展,其功能和灵活性持续增强,能支持更多高级应用,如大内存映射、虚拟化及高性能I/O。

          

5.1 整体说明(General)  

在系统中,每个设备的地址空间需求各异。例如,某设备需通过IO地址空间访问256字节的内部寄存器/存储,而另一设备则需通过MMIO访问16KB的内部寄存器/存储。灵活满足各类设备需求,实现高效运行。

PCI设备无法自行决定其内部位置的访问地址,这一决策权归于系统软件,如BIOS和操作系统内核。因此,设备需向系统软件提供一种方式,以便确定其地址空间需求。一旦软件掌握了设备的地址空间需求,并确认其可满足,便会为设备分配一段可用的地址范围及相应的地址空间类型(IO、NP-MMIO、P-MMIO)。

这些都是通过配置空间Header中的基地址寄存器BARs(Base Address Registers)来完成的。如图 4‑2所示,一个Type 0 Header拥有6个可用的BAR(每个大小为32bit),而一个Type 1 Header只拥有2个BAR。Type 1 Header是存在于所有Bridge设备中的,这意味着每个Switch端口和RC端口都会拥有1个Type 1 Header。Type 0 Header只存在于非Bridge设备中,例如EP。关于这里的一个例子可以参阅图 4‑3。    

          

1262230dbf6f4f99c2ae84aeeeae7aeb.jpeg

图 4‑2配置空间中的BARs

系统软件首要任务是确定设备地址空间的规模与类别。设备设计者需了解内部寄存器/存储的总规模,以供IO或MMIO访问。同时,他们还需掌握寄存器访问方式对设备工作的影响(如读取操作是否产生副作用)。这将决定设备应采用无副作用的可预取MMIO,还是具有副作用的不可预取MMIO。获取这些信息后,设备设计者通过固定BARs的低位bit来指示所需地址空间的大小和类型。

BARs的高阶比特位可供软件写入。一旦系统软件通过检查BARs的低阶比特位,确定了设备所需的地址空间规模和类别,便会将分配给该设备的地址范围基址写入BAR。由于一个EP(使用Type 0 Header)拥有6个BARs,它最多可请求6个独特的地址空间。然而,实际场景中请求6个不同地址空间的情况并不常见。大多数设备通常会请求1至3个不同的地址范围。

并非所有BARs都必须实施。若设备无需使用全部BAR映射其内部寄存器,过剩的BARs将被固定为全0,以此向软件传达这些BARs未实现的信息。

一旦BARs完成编程,设备内的内部寄存器或本地内存便可通过该地址范围实现访问。当设备检测到一个请求事务的地址映射至其对应的BAR时,它会自动接收此请求,因为该设备正是请求的目标对象。

ec380926766fc65fd6f7e446d0d3343f.jpeg

图4‑3 PCIe设备中对Type 0、Type 1 Header的用法

          

5.2 BAR示例1——32bit内存地址空间请求  

图4-4揭示了构建BAR的基步骤,本例中,请求了一块4KB大小的不可预取内存(NP-MMIO)。图中展示了BAR配置过程中的三个关键节点。精简而专业,引领您深入理解BAR设置的精髓。

\1. 在图 4‑4中的(1),我们可以看到BAR处于未初始化的状态。设备的设计者已经将低位bit固定为一个数值,来指示需要的memory的大小和类型,但是高位bit(可写可读的)则仍然是用X来表示,这代表它们的值还未知。系统软件将会首先把每个BAR都通过配置写操作来将可写入的bit写为全1(当然,被固定的低位bit不会受到配置写操作的影响)。在图 4‑4的(2)中展示的BAR就是处于第二阶段的样子,除了被固定的低位bit以外,所有的bit都被写为1。

全1操作的目标是确定最低可写入比特(least-significant writable bit),也就是那个指示所需地址空间大小的比特位置。以本例为例,最低可写入的比特位于第12位,因此这个BAR需要请求2的12次方(即4KB)的地址空间。反之,如果最低可写入的比特位于第20位,那么这个BAR就需要请求2的20次方(即1MB)的地址空间。通过这种方式,我们可以精确控制和管理地址空间的需求。

在软件将BARs中所有可写bit都设为1后,会从BAR0开始按序读取每个BAR的数值,以确定各BAR所需的地址空间大小和类型。表4-1详细列出了本例中对BAR0配置读的结果。

在流程的尾声,系统软件为BAR 0分配一个地址范围。因为软件已经掌握了BAR 0所需的地址空间规模和类别。图4-4(3)描绘了BAR位于第三阶段的样貌,此时系统软件已将一块地址区域的起始地址写入BAR 0中。在本示例中,这个起始地址被设定为F900_0000h。

至此,BAR 0配置已成功完成。一旦软件激活命令寄存器(Command register,偏移地址04h)中的内存地址译码(memory address decoding),该设备将接受所有位于F900_0000h至F900_0FFFh范围内的4KB memory请求。让我们共同见证这一创新技术为我们的生活带来的便捷与高效!

e216e57f17d2acaaa421cd37b34b54e4.jpeg

表 4‑1对BAR 0写入全1后再读取BAR 0时的结果    

ba0a83fc84d376c578dee735052931e5.jpeg

图 4‑4设置建立32bit不可预取内存的BAR

5.3 BAR示例2——64bit内存地址空间请求  

在上一个示例中,我们探讨了通过BAR 0来申请不可预取内存地址空间(NP-MMIO)。现在,请参阅图4-5,我们将看到BAR 1和BAR 2如何协同工作,以申请一块64MB的可预取内存地址空间。

这里采用了两个连续的BAR,原因在于该设备支持使用64位地址进行内存空间请求。这意味着,如果需要,软件分配给它的地址空间可以超越4GB的边界(虽然并非必要)。由于地址长度为64位,因此必须同时使用两个连续的BAR。

跟上面一样,将BAR在配置过程中分为3个节点:

1. 在图 4‑5中的(1),我们可以看到一对BAR都处于未初始化的状态。设备的设计者已经将低位BAR(在本例中为BAR 1)中的低位bit固定为一个数值,来指示需要的memory的大小和类型,但是高位BAR(BAR 2)中的bit则都是可读可写的,没有被固定。系统软件的第一步就是把每个BAR都通过配置写操作来将可写入的bit写为全1。在图 4‑5的(2)中展示的BAR就是处于第二阶段的样子,除了BAR 1中被固定的低位bit以外,所有的bit都被写为1。

2. 如上一个例子所述,系统软件已经评估过BAR 0。因此软件的下一步就是读取下一个BAR(BAR 1),并对其进行评估,以此来确定设备是否正在请求更多的地址空间。一旦BAR 1被读取,软件就会发现设备正在请求更多的地址空间,并且所请求的地址空间类型为可预取内存地址空间(P-MMIO),这个地址空间可以被分配为64bit地址范围的任何一个位置。由于这个地址空间请求支持64bit地址,那么下一个连续相连的BAR(本例中为BAR 2)就会被当做是BAR 1的高32bit。因此软件也会读取BAR 2的内容。然而,软件并不会对BAR 2进行像对BAR 1一样的低位bit的评估,因为软件仅仅是将BAR 2简单的当做BAR 1发起的64bit地址请求的高32bit。表 4‑2中总结了本例中对两个BAR都写入全1后再进行配置读的读取结果。

3. 这个过程中的最后一步就是系统软件为这一对BAR分配一个地址范围,因为对于软件来说现在已经知道了这一对BAR请求的地址空间的大小和类型。图 4‑5的(3)中展示了这两个BAR处于第三阶段的样子,软件已经通过两次配置写操作将分配的地址区域的64bit起始地址写入BAR 1与BAR 2的组合体中。在本例中,高位BAR的bit 1(BAR pair的bit 33)被置为1,低位BAR的bit 30(也是BAR pair的bit 30)也被置为1,这表示其实地址为2_4000_0000h。两个BAR中所有其他的可写bit都已被清零。    

至此,BAR Pair(即BAR 1和BAR 2)的配置已圆满完成。一旦软件激活命令寄存器(Command register,位于偏移地址04h)中的内存地址译码,该设备将能够响应所有位于2_4000_0000h至2_43FF_FFFFh区间(总计64MB)的memory请求。

254d13e48d99e9589838b66f763becbf.jpeg

图 4‑5设置建立64bit可预取内存的BAR    

d6faea7677ff0c8441d32d298e87843e.jpeg

表 4‑2将两个BAR都写入为全1后的读取结果

5.4 BAR示例3——IO地址空间请求  

在前述示例基础上,假设当前Function仍需IO空间。如图4-6所示,请求的BAR(本例中为BAR 3)配置过程中划分为3个节点。

在图4-6的(1)部分,我们可以看到BAR 3处于初始状态。系统软件已将所有BAR写入全1(仅影响可写的bit,不可写部分不受影响),并对由BAR 0、BAR 1和BAR 2组成的BAR Pair进行了评估。现在,软件将继续检查设备是否还需要通过BAR 3来请求更多地址空间。图4-6的(2)部分展示了BAR 3被写入全1后的状态。

在解析了BAR 3的内容后,软件能准确识别出该地址空间请求所需的是256byte大小的IO地址空间。接着,软件会为设备分配一个相应的IO地址空间范围,并将此范围的起始地址写入BAR 3。如图表4-6中的状态(3)所示,BAR 3已完成起始地址的写入。以本例来说,设备的起始地址为16KB,因此bit 14被设定为1,即基地址为4000h,其余高位bit则清零。

至今,BAR 3的配置已圆满完成。一旦软件激活命令寄存器(位于偏移地址04h)中的IO地址译码,该设备将全面接受并响应位于4000h-40FFh(256字节范围)内的IO事务。

5168dadd2b6593536ada45fb2ea26f5a.jpeg

图 4‑6 IO BAR的设置建立

cfc91fd7df7907bc0ed4d3d864389ac2.jpeg

表 4‑3 IO BAR被写入全1后再读取的读取结果    

5.5 所有的BARs都必须按顺序被评估  

在解析了前三个案例后,我们清晰地看到,软件需按顺序评估BARs:从BAR 0到BAR 1,再到BAR 2,最后是BAR 3。

大多数时候,Function并不需要启用全部的6个BAR。即使是在我们上面举的例子中,也仅仅是使用了6个BAR中的4个。如果上面例子的基础上并不需要继续请求更多的地址空间,那么设备的设计者需要将BAR 4和BAR 5的所有bit都强制固定为全0。这样的话,即使软件也对BAR 4和BAR 5用配置写来写入全1,BAR 4和BAR 5的值(全0)也不会受到配置写的影响。在对BAR 3进行完评估(evaluate)之后,软件需要继续去评估BAR 4。一旦软件检测到BAR 4中没有bit被置为1(因为BAR 4的所有bit都被强制固定为0),软件就知道这个BAR并没有被使用,然后继续去评估下一个BAR(也就是BAR 5)。

尽管软件可能发现某个BAR未被使用,但所有BAR仍需全面评估。在PCI或PCIe规范中,并未规定首个请求地址空间的BAR必须为BAR 0。设备设计者可按需选择BAR 4作为首个地址空间请求的BAR,同时将BAR 0至BAR 3和BAR 5的所有位强制固定为0。这一做法进一步强调了软件需按顺序评估Header中的每个BAR。

5.6 大小可变的BARs(Resizable BARs)  

在PCIe协议的2.1版本中新加入的一个特性,支持改变BAR中所请求的地址空间的大小,这种特性是通过在扩展配置空间内定义一个新的能力结构(Capability Structure)来实现的。新的Capability Structure使得Function能够公布(advertise)它可以操作的地址空间的大小,然后让软件根据实际可用的系统资源来选用Function所公布的地址空间大小中的某一种。例如,如果一个Function理想情况下要拥有2GB的可预取内存地址空间(Prefetchable Memory Address Space),但是它也可以只使用1GB、512MB或者256MB的P-MMIO进行操作,假如说系统软件无法容纳更大的、大于256MB的地址空间请求,那么系统软件应该就只能使Function请求256MB的地址空间。    

          

6、pcie inbound和outbound关系  

PCIE设备与系统内存交互时,outbound代表从CPU到设备的数据传输方向;而inbound则表示从设备到RC(CPU端)的数据传输路径。当CPU读写RC端的寄存器时,这属于偏上系统的操作范畴,不归类为inbound或outbound。

d594e768637679d8cc849e4bbf92022f.jpeg

              

7、SR-IOV  

PCI Express (PCIe) Single Root I/O Virtualization (SR-IOV) 是一种技术,允许一个PCIe设备(如网络适配器、GPU等)呈现为多个独立的逻辑设备,即虚拟功能(Virtual Functions, VFs),以供多个虚拟机(VMs)或容器直接访问,而无需通过软件模拟层(如hypervisor)。这项技术在提升I/O性能、降低虚拟化环境中的I/O延迟方面发挥重要作用。SR-IOV标准允许在虚拟机之间高效共享PCIe设备,并且共享是在硬件中实现的,可以获得与硬件一致的I/O性能。物理功能(Physical Function,PF),PF 包含SR-IOV功能结构,用于管理SR-IOV功能。PF是PCIe功能的全集,可以像任何PCIe设备一样被发现、管理和处理。PF 拥有完全配置资源,可以用于配置或控制PCIe设备。虚拟功能(Virtual Function,VF),与PF关联的一种功能。VF是一种轻量级的 PCIe功能,可以与物理功能及与同一物理功能关联的其他VF共享一个或多个物理资源。VF仅允许拥有用于其自身行为的配置资源。

fb127f9f8a10c9181fdcc2359641469b.jpeg   

SR-IOV技术,实现虚拟机间PCIe设备的高效共享,提升设备性能。每个SR-IOV设备可拥有数百个与主功能PF关联的虚拟功能VF,实现I/O硬件虚拟化,直接访问硬件,绕过Hypervisor。此技术降低硬件成本,通过硬件资源共享,减少适配器数量,降低功耗。同时,简化布线需求,减少交换机端口,实现运维成本和开销的全面节省。SR-IOV,是您追求高效、节能、经济的理想选择。

核心概念

SR-IOV的每个物理设备都至少配备一个PF,这是完全配置的PCIe功能。它管理资源分配、配置和初始化,包括VFs的生成与删除。这确保了设备的高效运行,提升了性能与稳定性。

2. Virtual Function (VF): VFs,轻量级功能从PF中剥离。每个VF独享PCIe配置空间,可分配至独立虚拟机或应用。虽不具完整配置力,但提供必要数据传输功能,降低资源占用和管理开销。

VFs实现虚拟机与硬件的直接交互,跳过了hypervisor的I/O堆栈,有效降低了I/O处理延迟,加速数据传输。对于高性能计算、网络密集应用和图形加速等场景,这一优势至关重要。

工作原理

管理员通过PF进行硬件配置,为各虚拟机创建并分配VFs。每个VF在虚拟环境中如PCIe设备般独立,拥有自己的ID和中断。SR-IOV技术确保VF资源(如内存、中断)的隔离,避免单一VF资源过度消耗影响其他VF或系统性能。

驱动无缝对接:虚拟机内的驱动直接与VF通信,无需模拟层介入,大大提升效率。关键在于,驱动必须能直连VF交互。

优势与应用场景

优化后:适用于追求极致I/O性能的环境,如数据中心、云计算、高性能计算集群等,同样适合金融交易系统与游戏服务器。

注意事项

•兼容性:并非所有PCIe设备都支持SR-IOV,需要硬件和驱动的支持。

    

-对此,您有什么看法见解?-

-欢迎在评论区留言探讨和分享。-

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

科技互联人生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值