一、概述
PCI-X 在硬件和软件上与 PCI 具有向后兼容性,同时提供了更高的性能和效率。它使用与 PCI 相同的连接器格式,因此 PCI-X 设备可以插入 PCI 插槽,反之亦然。而且,PCI-X 采用相同的配置模型,因此在 PCI 系统上运行的设备驱动程序、操作系统和应用程序也可以在 PCI-X 系统上运行。
为了在不改变 PCI 信号模型的情况下实现更高的速度,PCI-X 引入了一些改进来优化总线时序。首先,PCI-X 实现了锁相环(PLL)时钟发生器,这些时钟发生器可以在内部生成相移时钟,使输出稍早驱动,输入稍晚采样,从而改善了总线时序。其次,PCI-X 的输入信号在目标设备的输入引脚处通过寄存器(锁存器)进行处理,从而缩短了建立时间。这些手段节省了时间,增加了总线上信号传播的时间预算,从而支持更高的时钟频率。
二、典型的PCI-X模型
一个基于Intel 7500服务器芯片组的系统示例如图1-15所示。该系统中的MCH芯片包含三个高性能的Hub Link 2.0端口,这些端口连接到三个PCI-X Hub 2桥接器(P64H2)。每个桥接器支持两条PCI-X总线,这些总线可以运行在最高133 MHz的频率下。Hub Link 2.0能够满足PCI-X流量的高带宽需求。
需要注意的是,这里依然存在与66 MHz PCI相同的负载问题,这意味着为了支持更多设备,需要使用大量的总线,导致解决方案相对昂贵。不过,带宽相比过去有了显著提高。尽管负载问题依然存在,PCI-X的高频率和较高的带宽为系统提供了更快的性能。
三、PCI-X 事务
图1-16展示了一个PCI-X突发内存读取事务的示例。需要注意的是,PCI-X在第一个数据阶段后不允许插入等待状态(Wait States)。这是因为在事务的属性阶段(Attribute phase),传输大小已经提供给了目标设备,因此目标设备准确知道所需传输的数据量。
此外,大多数PCI-X总线周期是突发传输(burst),数据通常以128字节为块进行传输。这些特点使得总线利用率更高,同时设备的缓冲区管理也更加高效,从而大大提升了整体系统的性能和传输效率。这种设计减少了总线上的延迟和不确定性,使得数据传输更加顺畅。
四、PCI-X 特性
4.1 分离事务模型(Split-Transaction Model)
分离事务模型(Split-Transaction Model)是PCI-X为提高总线效率而引入的一种改进模型。在传统的PCI读取事务中,总线控制器(Bus Master)发起对目标设备的读取请求。如果目标设备无法立即完成该请求,它可以通过等待状态(Wait States)来保持总线,或者在延迟事务过程中发出重试(Retry)。与此不同,PCI-X总线通过分离事务处理这些情况。
在分离事务模型中,发起读取请求的设备称为请求方(Requester),而完成请求的设备则称为完成方(Completer)。当完成方无法立即响应请求时,它会记录事务的详细信息(包括地址、事务类型、字节数和请求方ID),并发出一个分离响应(split response)信号。这意味着请求方需要将该事务放入队列中,结束当前的总线周期,并将总线释放到空闲状态,以便其他事务可以使用总线。
在等待数据的同时,请求方可以执行其他操作,比如发起新的请求,甚至是向同一个完成方发出新的请求。完成方在收集到所请求的数据后,会通过总线仲裁重新获取总线的控制权,发起一个分离完成(split completion)事务,并返回请求的数据。此时,请求方会认领分离完成的总线周期,并从完成方接收数据。分离完成看起来类似于系统中的写事务。
这种分离事务模型之所以可行,是因为在事务的属性阶段(Attribute phase),请求方不仅说明了所请求的数据量,还标明了自身的Bus:Device编号,从而使得完成方能够准确地将数据返回给正确的设备。虽然完成整个数据传输需要两个总线事务(读取请求和分离完成),但在这期间总线可以处理其他事务,而请求方无需通过重试来轮询设备是否准备好数据。
分离事务模型显著提高了总线的利用效率。与标准PCI协议50%至60%的传输效率相比,PCI-X的协议增强使其传输效率提高到了约85%。这种改进让总线在处理事务时更加灵活和高效,特别是在多个设备共享同一总线的情况下。
4.2 消息信号中断(MSI, Message Signaled Interrupts)
消息信号中断(MSI, Message Signaled Interrupts) 是PCI-X设备的一项必需功能,它的引入是为了减少或消除多个设备共享中断的需求,这在传统中断架构中是常见的。MSI通过一种更有效的方式来处理设备的中断请求。
在MSI中,设备通过发起一次内存写事务来生成中断请求,该写操作使用一个预定义的地址范围,这些地址被理解为中断请求,并且应该发送给一个或多个CPU。写入的数据是与该设备相关联的唯一中断向量。CPU接收到该中断向量后,可以立即跳转到该设备的中断服务例程,避免了传统中断机制中寻找哪个设备产生中断的开销。
此外,MSI不需要额外的边带引脚(sideband pins),这进一步简化了硬件设计,同时提高了系统性能和中断处理效率。MSI的引入显著提升了中断管理的灵活性和效率,特别是在多设备和多CPU的环境下。
五、事务属性(Transaction Attributes)
事务属性(Transaction Attributes)是PCI-X为了提高总线事务效率而新增的一项功能,每个事务在开始时增加了一个属性阶段(Attribute Phase)。在这一阶段,请求方会提供一些关键信息,例如请求的字节数以及请求方的Bus:Device 编号,这些信息可以帮助优化总线上的事务处理。此外,PCI-X还引入了两个新的位:No Snoop位和Relaxed Ordering位,用于进一步优化事务。
No Snoop位的目的是减少事务延迟。通常,当涉及内存数据的读写时,需要检查CPU的缓存(称为snooping),以确保内存地址没有被缓存。如果该地址已被缓存,则可能需要先将缓存数据写回内存或将其失效,再允许事务继续处理。然而,snoop过程会增加事务的延迟。在某些情况下,软件可能知道所请求的内存地址不会存在于CPU缓存中(例如该地址已定义为不可缓存),因此无需进行snoop操作。为此,No Snoop位允许系统跳过缓存检查步骤,从而减少延迟,提高效率。
另一方面,Relaxed Ordering位用于放宽事务的顺序要求。通常,总线上发出的事务需要按照严格顺序(Strongly Ordered model)通过桥接器的缓冲区处理,这有助于解决事务之间的依赖问题,例如先写后读的情况。然而,并非所有事务都存在依赖关系,强制保持顺序可能会导致性能下降。如果请求方知道某个事务与之前的事务无关,它可以设置Relaxed Ordering位,告知桥接器允许该事务跳过队列中的其他事务,从而提高性能。
通过引入这些属性,PCI-X显著提高了总线事务的处理效率,尤其是在缓存管理和事务顺序上的灵活性,使得系统能够更高效地处理各种事务请求,减少延迟和资源浪费。
六、高性能PCI-X
6.1 PCI和PCI-X 1.0并行总线模型的通用时钟方法中存在的问题
在尝试将像PCI和PCI-X这样的总线迁移到更高速度时,并行总线设计面临一些固有的限制,这在常用时钟模型(Common Clock Approach)中尤其明显。图1-18说明了这一问题。这种设计采用了公共或分布式时钟,数据在一个时钟沿被驱动,在下一个时钟沿被锁存,因此总的时序预算是一个时钟周期的时间。显然,时钟频率越高,时钟周期就越短,时序预算也就越小。
在高频率下,由于时钟周期缩短,信号传输和锁存数据的时间非常有限。这种紧缩的时序预算会导致信号传输延迟增加和同步困难,因为信号在并行总线上的传播距离可能导致接收设备无法及时锁存数据。这种问题在传统的并行总线架构中变得愈发严重,使得在更高频率下保持可靠的信号传输成为一项挑战。
因此,随着时钟频率的提升,保持并行总线设计的同步和信号完整性变得更加困难。这是传统的PCI和PCI-X 1.0在追求更高速度时遇到的主要瓶颈之一。
在并行总线设计中需要注意的第一个问题是信号偏移(signal skew)。当多个数据位同时发送时,它们会经历略有不同的延迟,并在接收端以不同的时间到达。如果这些差异过大,接收端可能会因为时钟和数据不同步而发生错误采样,图中说明了这一问题。
第二个问题是时钟偏移(clock skew),这是指多个设备之间的时钟到达时间不完全相同。由于公共时钟信号到达不同设备的时间不一致,进一步缩短了可用的时序预算。这使得各设备在高速情况下更难保持同步。
第三个问题是信号传播时间(flight time),即信号从发送方传输到接收方所需的时间。时钟周期或时序预算必须大于信号传播时间,才能确保信号能够在时钟周期内正确传递到接收端。为此,电路板设计需要保证信号路径足够短,以便信号传播延迟小于时钟周期。然而,在许多板设计中,实现足够短的信号路径可能并不实际。
6.2 PCI-X 2.0 源时钟模型
为了在这些限制下进一步提高性能,可以使用两种技术。首先,可以优化现有协议,使其更高效。其次,可以将总线模型更改为源同步时钟模型(source synchronous clocking model),其中总线信号和时钟(或选通脉冲)同时传输,并确保它们经历相同的传播延迟。这种技术能够有效解决信号和时钟不同步的问题。PCI-X 2.0协议采用了这种源同步时钟模型,从而克服了并行总线设计中时钟和信号同步的瓶颈,进一步提升了系统性能。
由于意识到PCI-X 2.0的高成本设计主要吸引高端市场,PCI-X 2.0还引入了ECC(错误校正码)的生成和检查功能。相比传统的奇偶校验,ECC更为强大和复杂,能够在发生单比特错误时进行自动修正,并能有效检测多比特错误。虽然这种改进增加了成本,但对于高端平台来说,可靠性至关重要,因此这成为了PCI-X 2.0的合理选择。
尽管PCI-X 2.0在带宽、效率和可靠性方面都有所提升,但并行总线模型的局限性逐渐显现,难以满足对更高带宽和更低成本的不断需求。PCI-X2.0总线虽然性能优异,但是却几乎很少得到应用,由于其高功耗高成本,且并行总线的引脚过多,需要极其复杂的PCB设计,导致PCI-X2.0只在极少数高端的市场中得到了应用(如服务器市场等)。为了解决这些问题,设计者转向了一种串行接口的新模型。虽然这种新总线在物理层面上与并行总线有很大不同,但它仍然保持了软件上的向后兼容性,这种新模型就是我们熟知的PCI Express(PCIe)。