PCIe系统中Switch介绍


Switch


本节主要介绍Switch的内部结构。从系统软件的角度上看,每一个PCIe链路都占用一个PCI总线号,但是一条PCIe链路只能连接一个PCI设备,Switch、EP或者PCIe桥片。PCIe总线使用端到端的连接方式,一条PCIe链路只能连接一个设备。

一个PCIe链路需要挂接多个EP时,需要使用Switch进行链路扩展。一个标准Switch具有一个上游端口和多个下游端口。上游端口与RC或者其他Switch的下游端口相连,而下游端口可以与EP、PCIe-to-PCI-X/PCI桥或者下游Switch的上游端口相连。

PCIe总线规范还支持一种特殊的连接方式,即Crosslink连接方式。使用这种方式时,Switch的下游端口可以与其他Switch的下游端口直接连接,上游端口也可以其他Switch的上游端口直接连接。在PCIe总线规范中,Crosslink连接方式是可选的,并不要求PCIe设备一定支持这种连接方式。

在PCIe体系结构中,Switch的设计难度仅次于RC,Switch也是PCIe体系结构的核心所在。而从系统软件的角度上看,Switch内部由多个PCI-to-PCI桥组成,其中每一个上游和下游端口都对应一个虚拟PCI桥。在一个Switch中有多个端口,在其内部就有多少个虚拟PCI桥,就有多少个PCI桥配置空间。值得注意的是,在Switch内部还具有一条虚拟的PCI总线,用于连接各个虚拟PCI桥,系统软件在初始化Switch时,需要为这条虚拟PCI总线编号。Switch的组成结构如下图所示。

Switch需要处理PCIe总线传输过程中的QoS问题。PCIe总线的QoS要求PCIe总线区别对待优先权不同的数据报文,而且无论PCIe总线的某一个链路多么拥塞,优先级高的报文,如等时报文(Isochronous Packet)都可以获得额定的数据带宽。而且PCIe总线需要保证优先级较高的报文优先到达。PCIe总线采用虚拟多通路VC技术,并在这些数据报文设定一个TC(Traffic Class)标签,该标签由3位组成,将数据报文根据优先权分为8类,这8类数据报文可以根据需要选择不同的VC进行传递。

在PCIe总线中,每一条数据链路上最多可以支持8个独立的VC。每个VC可以设置独立的缓冲,用来接收和发送数据报文。在PCIe体系结构中,TC和VC紧密相连,TC与VC之间的关系是"多对一"。

TC可以由软件设置,系统软件可以选择某类TC由哪个VC进行传递。其中一个VC可以传递TC不相同的数据报文,而TC相同的数据报文在指定一个VC传递之后,不能再使用其他VC。在许多处理器系统中,Switch和RC仅支持一个VC,而x86处理器系统和PLX的Switch中可以支持两个VC。

下面将以一个简单的例子说明如何使用TC标签和多个VC,以保证数据传送的服务质量。我们将PCIe总线的端到端数据传递过程模拟为使用汽车将一批货物从A点运送到B点。如果我们不考虑服务质量,可以采用一辆汽车运送所有这些货物,经过多次往返就可以将所有货物从A点运到B点。但是这样做会耽误一些需要在指定时间内到达B点的货物。有些货物,如一些急救物资、EMS等其他优先级别较高的货物,必须要及时地从A点运送到B点。这些急救物资的运送应该有别于其他普通物资的运送。

为此我们首先将不同种类的货物进行分类,将急救物资定义为TC3类货物,EMS定义为TC2类货物,平信定义为TC1类货物,一般包裹定义为TC0类货物,我们最多可以提供8种TC类标签进行货物分类。

之后我们使用8辆汽车,分别是VC0~7运送这些货物,其中VC7的速度最快,而VC0的速度最慢。当发生堵车事件时,VC7优先行驶,VC0最后行驶。然后我们使用VC3运送急救物资,VC2运送EMS,VC1运送平信,VC0运送包裹,当然使用VC0同时运送平信和包裹也是可以的,但是平信或者包裹不能使用一种以上的汽车运送,如平信如果使用了VC1运输,就不能使用VC0。因为TC与VC的对应关系是"多对一"的关系。

采用这种分类运输的方法,我们可以做到在A点到B点带宽有限的情况下,仍然可以保证急救物资和EMS可以及时到达B点,从而提高了服务质量。

PCIe总线除了解决数据传送的QoS问题之外,还进一步考虑如何在链路传递过程中,使用流量控制机制防止拥塞。在PCIe体系结构中,Switch处于核心地位。PCIe总线使用Switch进行链路扩展,在Switch中,每一个端口对应一个虚拟PCI桥。深入理解PCI桥是理解Switch软件组成结构的基础。目前PCIe总线提出了MRA-Switch的概念,这种Switch与传统Switch有较大的区别。

参考文章

PCIe体系结构及组成部件

相关推荐
fangzhanpeng1685 天前
快速掌握C#语言基础知识点(1.基础数据类型)
开发语言·c#·1024程序员节
无己心7 天前
面向多平台 AI 搜索引擎的适配层架构设计
前端·人工智能·搜索引擎·ai·1024程序员节
u01030552713 天前
AI驱动的安卓UI自动生成功能实现
人工智能·1024程序员节
u01030552714 天前
长株潭智能体赋能腾讯元器链接共享
1024程序员节
云贝贝贝15 天前
OceanBase认证体系介绍与备考指南
运维·服务器·oceanbase·1024程序员节
u01030552715 天前
Java图像处理实战指南
人工智能·1024程序员节
u01030552716 天前
Java AWT鼠标事件全解析
人工智能·1024程序员节
u01030552718 天前
Java实用类应用精讲
人工智能·1024程序员节
u01030552719 天前
Java I/O核心操作实战
人工智能·1024程序员节
u01030552720 天前
ArrayList操作详解与实战应用
人工智能·1024程序员节