Matt Jones
摘要:新一代设计和产品的更新开始倾向于PCIe,以利用采用PCIe作为本地接口的现成的处理器、外设和交换解决方案的丰富生态系统。本文讨论表明,嵌入式和通信应用市场是PCIe发明的旁路扩展的一部分,而相关规范和支持产品的形式必须通过创新来满足这些市场的需求。
关键词:PCIe总线;嵌入式;通信;多播
PCIe(PCI Express)的定义是提供增强的、可扩展的性能,缓解信号完整性和并行总线历史扩展带来的电路板布局问题。要求很高的台式和企业计算及存储应用对这种升级的互连标准的需求非常迫切。而这种需求促使PCI特别兴趣小组(PCI-SIG)和元器件供应商调整初始规范和系统解决方案,以满足新出现的这些应用需求。凭借基于充分满足上述需求规范的目标产品形式,高量产服务器和存储市场的早期采用者将PCIe作为芯片与芯片之间互连事实上的标准,以加速和拓宽应用。
尽管PCIe具有强势的动力并普遍存在于计算与存储应用当中,PCIe在嵌入式和通信应用方面却一直受到极大限制。
PCIe规范是一个树状拓扑结构,由一个单主干和众多分支组成,非常适合在单一计算复合体及其相关本地I/O之间的有效连接。这一非常适用于服务器和存储应用的结构无法在多主系统中轻松实现系统互连。先进通信和嵌入式系统常常具备分布式计算和智能的特点,随着时间的推移还可适合PCI和PCI-X结构,以支持这种架构。采用PCIe作为主系统互连需要规范的扩展,以支持优化的资源利用率、有效的数据传输和共享,以及多主系统中点与点之间系统一致性方面的构建。
PCIe生态系统中的PCIe规范扩展正在进行,以满足嵌入式和通信应用的需求。这项工作正在挑剔的眼光下取得进展,确保在不给广大用户群增加任何负担或对现有生态系统或使用模式做出任何改变的情况下,获得所需的功能扩展。2008年5月,基于对PCIe基本规范2.0版的工程变更通知(ECN),PCI-SIG为PCIe标准加入了多播功能。这一新增的功能为分布式系统单元间数据的移动和共享提供了强大的功能,同时为PCIe在要求很高的嵌入式和通信应用中的主系统互连的应用扫除了一大障碍。PCIe多播可优化系统资源,有助于实现多个系统单元的有效数据传输,缩短延迟并提高一致性。重要的是,由于扩展了现有的PCIe规范,而且不增加负担,不需要修改现有生态系统或使用模式,PCIe多播方案可以实现重要的系统优势。
多播的系统优势
多播是将量化数据包同时传输到一组目的地,同时通过防止任何不必要的数据复制,有效管理资源和系统带宽的方法。在应用于嵌入式和通信应用的分布式或复制智能系统中,多播功能为发送同时引导时间或复位命令等任务和图像提供了一个有效的一对多的数据分配机制,从而缩短复位排序和系统宕机,以及关键路由和政策控制信息的同步更新时间,确保系统数据的一致性。
如图1所示,通过多播将相同的数据传输给多个接收人,能够降低开销,实现系统资源的优化。在这个非常简单的模型中,对比不支持多播的PCIe交换器与支持多播的PCIe交换器。支持多播功能的系统或交换器可以利用一个由交换器管理的一个多播处理替代4个顺序环路处理,从而使发起的CPU更方便地继续其他任务,实现更有效的资源利用率。这种效率可以使系统计算资源承担额外任务而充分提升性能,或者凭借所需的较低性能或较少的计算资源而节省系统成本和功耗。
除了系统资源优化外,将环路单播处理转换成一个多播处理器,可以缩短传输延迟,提高系统点与点之间的一致性。参照图1中简单的模型,假设数据的顺序传输按编号发生,那么相对第一个端点而言,第四个端点是过时的,直到所有过程完成。在单主系统中,这样的差距相对较小,因为大部分数据由一个主机传输,在进一步动作之前,将会完成四个处理描述。然而,在分布式智能和点对点流量系统中,这种由重复单播处理带来的差距会产生潜在的数据排序问题,因为包可能在相对不同的时间传输到每个端点,而非环路单播包的每个端点。假设通过环路发送至端点的信息是将路由表更新到通信系统包处理线卡的每四个网络处理单元(NPU),那么每个端点路由表的更新都会基于顺序传输和完成来增加延迟,随之产生的差距允许线卡等待更新,路由根据此刻过时的表继续接收包。
另外,多播数据可带来整个系统较好的链路利用率,通常可以消除增强的性能所带来的瓶颈,或实现配置更小、更有效使用的链路,以节省功耗,降低电路板设计的复杂性。基于上述定义的PCIe多播协议只有在分支被占用才会进行数据备份。图2描述了通过一对PCIe交换器可能拥有多个层级PCIe互连结构。如图左侧所示,将相同的环路单播数据发送到端点1、2、3和4,会导致同一数据多次通过链路1和4。图右侧的系统利用PCIe多播功能,只需为每个需要逻辑复制数据的链路传输一次数据即可。
PCIe多播方案
最初讨论的那样,PCIe标准快速和广泛的采用带来了一个丰富的生态系统和曾依赖以前规范版本的巨大用户群。因此,正如其他提议的扩展一样,PCIe多播绝不能给现有生态系统或使用模式造成负面影响或增加负担。尤其是,PCIe多播不需要对现有主联合体、端点或新处理层数据包(TLP)格式进行硬件修改。功能性的优化取决于这些限制条件。PCIe多播是一个基于地址的多播功能,利用了一部分通用PCIe存储空间和一个简单的编程模型,可以将存储器滞后写入TLP的标准PCIe发送至多达64个多播组(MCG)中的多个接收者。虽然一个MCG可以包括0或1个成员,然而只有当MCG数大干2时系统才能获益。因此,PCIe交换器(或系列交换器)必须用于提供发起者和MCG成员间的互连。多播流量可以由PCIe层级的任何器件发起,并传输给连接具有多播能力结构的交换器端口的许多参与者。每个端口具有多播能力结构的交换器可以在其任何端口之间传输多播包。主联合体和端点可以从多播能力结构中获益,但如上所述,这是这些器件的可选功能。
如图3所示,下列系统列举不会受多播功能影响。从多播窗口基址开始,系统软件通过在PCIe存储空间打开一个多播窗口来设置多播地址空间。利用该基址,多播窗口可以设置成相邻的地址范围。这些地址范围可能将多达64个支持MCG的每个端口划分成大小相同的子区间。多播窗口的大小没有实际限制(即多播窗口可达263个字节)。多播窗口组的数目可以设置在1-64之间。
系统中支持多播的PCIe器件必须具有多播能力结构,使每个PCIe功能实现多播。在PCIe交换器中,要求每个传输或接收多
播数据的交换器端口都必须在共相应的虚拟PCI至PCI桥内支持多播能力结构。在每个多播能力结构内,同等配置的控制寄存器可以保持如下信息:多播窗口基址、MCG数目和MCG窗口大小。另外,每个能力结构都保持一个独立配置,并维持64位控制矢量。这些控制位可以激活或禁用来自MCG的0~63的TLP接收,因而支配了每个MCG中每个PCIe功能的关系。在器件工作过程中,寄存器和控制位可以随时读写。
多播PCIe TLP的传输和路由与单播TLP相比略有变化。图4为PCIe交换器基本功能图,充分描述了这些差别。接收主发送的TLP时,入站端口的地址解码决定TLP是一个多播TLP(从逻辑上讲,这是初始处理成为多重处理的地方)。没有错误的解码多播TLP转发到交换器的虚拟PCI总线。单播流量有不同的路由规则,取决于TLP是在P2P桥的初级还是次级接收的。与单播流量不同,多播TLP是对称转发,而不必考虑P2P桥是否连了上行或下行端口。
所有连接到虚拟PCI总线的端口(即P2P桥功能)都可以接收多播TLP,检查地址中MCG的ID,防止多播接收矢量的位状态。基于每个MCG,多播接收矢量显示是否允许P2P桥功能向其目的地转发TLP。这将有助于交换器上每个P2P桥功能以每组为基础对多播TLP接收者进行寄存。
一旦交换器内的P2P桥功能接收了多播TLP,就会在TLP上执行出站处理。多播TLP的出站处理将取决于连接在P2P桥的交换器端口上的链路组件能力。图5显示了PCIe交换器到PCIe交换器传输的多播能力结构的链路组件的情况。TLP是在没有修改的情况下由远程路由转发的。不过,如上文所述,PCIe端点不需要实现多播能力结构来接收多播TLP。为了支持不具有多播功能的端点,系统软件必须保证端点的基址寄存器覆盖一部分多播地址范围,或者PCIe交换器必须使用随意指定的多播覆盖机制。
由于确保端点功能地址范围覆盖的工作和多播地址范围给系统设计者造成的负担,以及每个产品SKU可能需要一个唯一的代码库,定义明确的交换器方案需要在每个交换端口的多播能力结构实现多播覆盖功能,以优化灵活性并利用现有的可用端点。如图6所示,地址覆盖功能机制可以用于重映射来自多播窗口到端点基址寄存器(BAR)窗口接收的多播TLP地址。地址覆盖是由交换器端口执行的。每个交换器端口可以配置不同的地址覆盖值,从而独立映射到伴随每个端点的BAR窗口。支持32位和64位地址之间的转换(例如,多播区域可以位于4GB边界以上,而端点BAR可以在4GB边界以下,反之亦然。)
结论
为了满足要求很高的台式、企业及存储应用的需求,PCIe标准已成为芯片与芯片之间互连事实上的接口,具有丰富的生态系统和高量产基础的终端应用。为满足这些早期高量产应用的需求,该规范和早期产品形式已进行了调整来满足其核心需求。随着其他终端应用和使用模式的出现,该规范和生态系统正扩展其应用的服务宽度。PCIe多播功能的最新进展为多主嵌入式和通信系统实现了必要的扩展,优化的资源利用率,通过降低系统延迟提高了性能,完成了点与点之间的有效和一致的数据传输。以挑剔的眼光看,为了不给现有PCIe生态系统或用户群增加负担,扩展的功能要求不对主或端点硬件,以及TLP格式做任何改变。基于地址的PCIe多播方案具有简单的编程模型,能够以PCIe交换器激活,提供比之前的双播等专有方案更加优越的功能和灵活性。