1PCIe双播产生背景
关于PCIe的发展历史我们可以知道,PCIe发家于计算机领域,起源于PCI总线,随着计算机产业的发展而壮大,其行业生态慢慢扩展到了嵌入式领域及通信领域等。但因为其树状结构导致其系统中通常仅有一个RC,大多数通信都以RC为主(RC能够与所有的EP通信,且EP与EP之间的通信也要经过RC路由(我们常用的PLX交换机支持P-P模式,可以不经过RC)),这样的树形架构与嵌入式系统的灵活互连带来了一些冲突和不便的地方。
PCIe的规范制定者们努力的通过一些改进来升级PCIe,通过在向前兼容的情况下进行了多种功能的扩展,像NT、多主等功能都是后续扩展出来的,这些功能的优化升级为PCIe的生态发展提供了更广阔的空间,今天我们要介绍的DualCast功能也正是在这样的背景下产生的。
如上图所示,2008年5月,PCIe基本规范2.0增加了关于Multicast(多播)的ECN,这个新增的功能为嵌入式系统各节点之间的数据移动和共享提供了强大的技术支撑。今天我们主要介绍下Dual-Cast(双播,以下简称DC),Dual-Cast从名称上看就可以知道是Multicast的功能简化版本(需要说明的是在具体技术实现上Dual-Cast没有使用PCIe规范中的Multicast的技术架构,仅仅功能上类似,是PLX公司率先推出的)。
2 PCIe双播基本介绍
传统的PCIe系统通常局限于单目标的通信传输,这种传输模式使得在给定的某一时刻某个特定的节点只能与一个另外的节点进行通信传输,如果需要将同样的数据发送给多个节点,则需要发起多次传输事务,分别进行传输。而双播DC的应用则能够实现将相同的数据在同一时刻发送给两个不同的设备。
主要的应用场景比如:通信导航领域,同样的数据需要同时发送给两个节点分别进行信号的处理;比如显控领域,接收到的视频数据同时送给两个大屏,或者接收到的视频数据一边送显示一边送存储;比如存储领域,为了提高可靠性,数据需要同时存储到两个不同的存储区域等。
这样将相同的数据传输给两个(或者多个)接收设备的好处也比较明显,主要有:
1)能够降低开销,实现处理资源的优化。这个比较好理解,本来发送处理器需要发起两个发送事务,但是利用了DC功能,则只需要发起一个发送事务,则节省下来的时间就可以进行其他额外的任务,这相当于降低了开销或者优化了处理资源。
- 能够缩短传输时延,提高设备之间的一致性。这个也比较好理解,比如说原本是分两次顺序发送,那势必会导致第二个接收设备收到数据的时间晚了。
- 能够提升链路资源的利用率。因为通过多播方式传输,则发送设备与交换机之间的链路被少利用了一次,这样对链路的需求也降低了。
3 PLX86XX中的双播方案
3.1 PLX86XX的双播模型和基本概念
如上图所示,双播的概念基本都在上图有表示,分别进行介绍:
- DC BAR(Dual Cast Low BAR[0:7] / Dual Cast High BAR[0:7]):DC
BAR表示DC功能的基地址,只有进入该BAR窗口的TLP事务才有可能产生DC事务,PEX86XX共有8个这样的BAR地址。该BAR一共为64bit宽度,由Dual
Cast Low BAR[0:7]和Dual Cast High BAR[0:7]组成,其中对于地址范围小于4GB或者32bit的系统来说,Dual Cast
High BAR[0:7]内部全为0;对于Dual Cast LowBAR,只有高12Bit有效,低20bit被硬连接设置为0x0_000C;因为只能设置高12Bit,则DC BAR的最小对齐边界为1MB,即只能设置为1MB的整数倍。 - DC BAR Setup(Dual Cast Low BAR[0:7] Setup/Dual Cast High BAR[0:7]Setup):DC BAR Setup表示DC功能的BAR的窗口大小,DC BAR Setup与DCBAR一起相当于形成了一个完整的地址空间窗口,当进入到使能了DC功能的端口时,如果TLP的目的地址≮DC BAR且
- DC BAR Translation(Dual Cast Low BAR[0:7] Translation/Dual Cast High
BAR[0:7]Translation): DC BAR Translation表示DC功能产生的复制TLP的新的目的地址,用于替换原有的目的地址。 - DC Source Destination Port(Dual Cast Source Port/Dual Cast Destination
Port):用于指定DC功能的源端口和目的端口。
- OriginalTLP:用于表示双播TLP中的原始TLP。
- DC Copy TLP:用于表示双播TLP中被复制转发的TLP。
注意事项:
- NT端口也可以作为Dual Cast Destination Port;
- 只有Memory Write TLP才能够被用于作为DC TLP,这个也比较好理解,Memory Write
TLP是Posted事务,不需要接收端进行回复,详见(PCIe中TLP报文的分类)。 - 关于地址空间,不能够互相重叠和冲突,比如说DC BARx之间不能重叠,比如说DC BAR ~ DC BAR+ DC BAR Setup需要在Original TLP的目的端口的地址空间,比如说DC BAR Translation~DC BAR Translation +DC BAR Setup需要在DC Copy TLP的目的端口的地址空间范围等等。
总结DC的使能条件:
- TLP事务是Memory Write TLP;
- TLP事务的目的地址≮DC BAR,且
- TLP事务的入端口是Dual Cast Source Port,表明入端口使能了DC功能;
PLX86XX的双播举例(参见PEX8624 DataBook)
背景:
- PEX8624,配置为x8,x8,x8,其中Port0为上游端口,Port5和Port8为下游端口;Port5端口的地址空间基址为0XAAA0_0000;Port8端口的地址空间基址为0xBBB0_0000。
- 希望能够实现Memory Write TLP从Port0往Port5的地址空间0XAAA0_0000~0XAAAF_FFFF发送时,能够触发DC功能,自动同时往Port8端口发送,对应基址为0XBBB0_0000。
分析:
- 因为是“Port0往Port5发送时,希望能够触发同时往Port8发送”,可以知道Dual Cast Source Port=0、Dual Cast Destination Port=8;
- “往Port5的地址空间0XAAA0_0000~0XAAAF_FFFF发送时,能够触发DC功能”,可以知道DC BAR=0XAAA0_0000、DC BAR Setup=0XF_FFFF(0XAAAF_FFFF-0XAAA0_0000)=1MB;
- “自动同时往Port8端口发送,对应基址为0XBBB0_0000”,可以知道DC BAR
Translation=0XBBB0_0000; - 且相关的地址之间不重叠、不冲突。
具体步骤:
- 设置DC BAR0,DC BAR=0XAAA0_0000,则DC Low BAR0[31:0]=0XAAA0_0000、DC High BAR0[31:0]=0x0。
- 设置DC BAR0 Setup,DC BAR Setup=1MB,参照对应的空间映射关系,则DC Low BAR0[31:0]Setup=0XFFF0_0000、DC High BAR0[31:0] Setup=0XFFFF_FFFF。
- 设置DC BAR Translation,DC BAR Translation=0xBBB0_0000,则DC Low
BAR0[31:0]Translation =0XBBB0_0000、DC High BAR0[31:0] Translation=0x0。 - 设置DC Source Destination Port,Dual Cast Source Port=0x0、Dual Cast Destination Port=0x8,
DC Source Destination Port[3:0]=0x0;(Dual Cast Source Station/Port=0);
DC Source Destination Port[7:4]=0x8;(Dual Cast Destination Port =0x8);
DC Source Destination Port[8]=1;(Dual Cast on Station 0, Port0 ony);
or DC Source Destination Port[8]=0;(Dual Cast on Station 0, Port 0 and Port1)。
以上即是关于PCIe交换机双播(DualCast、DC)功能的简单介绍,PEX86XX交换机具备DC功能,关于MultiCast的更多介绍请见后续文章。