多功能PCIE交换机之四:非透明桥NTB
2015-12-27 10:27
363 查看
多功能PCIE交换机的一个重要组成部分就是非透明桥,正是因为有了非透明桥,使得它在现在的双活设计、高可用性方面成为了一个必不可少的器件。 为了让大家对PCIE非透明桥有个直观的了结,下面主要基于PLX87xx系列上 上的非透明桥进行说明。
8717用做两台或多台服务器的容错设计时,主要的有两种形式,一种是Active-Passive模式:两台服务器一端连接到Link
Port,一端连接到virtual
port, 这种配置直支持一次Failover.另外一种就是Active-Active,典型的应用场景就是两台机器通过两个8717形成背靠背的链接。由于有两个NTB,并且两侧机器都是对称的设计,上面的这种方式支持容错后的恢复:即在容错步骤启动之后,如果之前出现问题的主机得到修复,还能够让它接管现在的主控设备,成为主控,而另外一台主机继续充当从机的角色。只要Failover后出现问题的机器能得到及时的修复或者替换,这样的设计能够支持无限次数的Failover。
Switch,它既有自己的扩展配置空间,支持ECMA访问,同时也必须提供访问自身、端口和DMA通道相关的寄存器访问的方法。掌握了每个端口和子功能的访问方式,也就深入理解了8717的结构。8717的基址寄存器(BAR)
8717的Bar0/Bar1用做ECAM,Bar4~Bar5和普通的Bar功能上没有区别,只是它们后来用在接受upstream端口发送来的memory
access是否命中所在的窗口,在的话把它们发送到下级总线或设备。(根据virtual
port或者link
port对应的Bar进行地址高位的转化,并且转发给对侧节点。)8717的ECMA
由于8717实现的功能很多,即便扩展的PCI配置空间也无法容下所有功能的寄存器,为了便于对所有功能的访问,根节点实现了memory
access 到configuration
access的转换,把那些功能的配置空间上的寄存器都映射到8717的BAR0所指定的内存空间(ECAM),转换后的配置空间地址如下表所示:需要注意的是,上面并不是把所有的NT端口和DMA通道的配置空间都映射到8717
Root port(Upstream port)的[bar0]上,只是说8717upstream
port、DMA、Virtual
port、Link
Port公享上面的示意图,但都需要配置自己的bar0/bar1.NT
Link Port 的配置空间和内存空间
先配置Bar0/Bar 1NT1的Link
Port配置空间位于[BAR0]+0x3_D000,mem空间在[bar2~bar5]NT0的Link
Port配置空间位于[BAR0]+0x3_F000,mem空间在[bar2~bar5]Bar Setup寄存器:
BAR0/1 Setup寄存器: offset E4HBAR2/3 Setup寄存器: offset E8H/ECH
BAR4/5 Setup寄存器: offset F0H/F4H对应的地址转换寄存器在:BAR2地址转换寄存器低位: offset C3CH
BAR2/3地址转换寄存器高位: offset C40HBAR2地址转换寄存器低位: offset C44H
BAR2/3地址转换寄存器高位: offset C48H
NT
Virtual Port 的配置空间和内存空间
先配置Bar0/Bar 1NT1的Virtual
Port配置空间位于[BAR0]+0x3_C000,mem空间在[bar2~bar5]NT0的Virtual
Port配置空间位于[BAR0]+0x3_E000,mem空间在[bar2~bar5]Ntx
Virtual Port都有一组地址翻译寄存器,它的偏移在:Bar
Setup寄存器:
BAR0/1 Setup寄存器: offset D0HBAR2/3 Setup寄存器: offset D4H/D8H
BAR4/5 Setup寄存器: offset DCH/E0H
对应的地址转换寄存器在:BAR2地址转换寄存器低位: offset C3CH
BAR2/3地址转换寄存器高位: offset C40HBAR2地址转换寄存器低位: offset C44H
BAR2/3地址转换寄存器高位: offset C48H8717ReqID-LUR
根据PCIE规范,TLP报文中包含了Request
ID,事务处理完之后会返回的TLP中包含期望的completion
ID,用来确保一次PCIE事务的正确完成。由于NTB需要跨越多个host域,对侧host访
问本侧memory空间,依赖于NTB接管并继续发送TLP访问请求,但是对侧host和本侧NTB的Request
ID显然不同,为此,除了实现Address
Translate之外,还需要实现RequestID的转换。8717引入了ReqID-LUT来实现这一转换。因此除了设置上面的地址转换寄存器之外,还需要设置正确的ReqID。
本文出自 “存储之厨” 博客,转载请与作者联系!
8717用做两台或多台服务器的容错设计时,主要的有两种形式,一种是Active-Passive模式:两台服务器一端连接到Link
Port,一端连接到virtual
port, 这种配置直支持一次Failover.另外一种就是Active-Active,典型的应用场景就是两台机器通过两个8717形成背靠背的链接。由于有两个NTB,并且两侧机器都是对称的设计,上面的这种方式支持容错后的恢复:即在容错步骤启动之后,如果之前出现问题的主机得到修复,还能够让它接管现在的主控设备,成为主控,而另外一台主机继续充当从机的角色。只要Failover后出现问题的机器能得到及时的修复或者替换,这样的设计能够支持无限次数的Failover。
8717地址空间
作为一个典型的支持多根节点的PCIESwitch,它既有自己的扩展配置空间,支持ECMA访问,同时也必须提供访问自身、端口和DMA通道相关的寄存器访问的方法。掌握了每个端口和子功能的访问方式,也就深入理解了8717的结构。8717的基址寄存器(BAR)
8717的Bar0/Bar1用做ECAM,Bar4~Bar5和普通的Bar功能上没有区别,只是它们后来用在接受upstream端口发送来的memory
access是否命中所在的窗口,在的话把它们发送到下级总线或设备。(根据virtual
port或者link
port对应的Bar进行地址高位的转化,并且转发给对侧节点。)8717的ECMA
由于8717实现的功能很多,即便扩展的PCI配置空间也无法容下所有功能的寄存器,为了便于对所有功能的访问,根节点实现了memory
access 到configuration
access的转换,把那些功能的配置空间上的寄存器都映射到8717的BAR0所指定的内存空间(ECAM),转换后的配置空间地址如下表所示:需要注意的是,上面并不是把所有的NT端口和DMA通道的配置空间都映射到8717
Root port(Upstream port)的[bar0]上,只是说8717upstream
port、DMA、Virtual
port、Link
Port公享上面的示意图,但都需要配置自己的bar0/bar1.NT
Link Port 的配置空间和内存空间
先配置Bar0/Bar 1NT1的Link
Port配置空间位于[BAR0]+0x3_D000,mem空间在[bar2~bar5]NT0的Link
Port配置空间位于[BAR0]+0x3_F000,mem空间在[bar2~bar5]Bar Setup寄存器:
BAR0/1 Setup寄存器: offset E4HBAR2/3 Setup寄存器: offset E8H/ECH
BAR4/5 Setup寄存器: offset F0H/F4H对应的地址转换寄存器在:BAR2地址转换寄存器低位: offset C3CH
BAR2/3地址转换寄存器高位: offset C40HBAR2地址转换寄存器低位: offset C44H
BAR2/3地址转换寄存器高位: offset C48H
NT
Virtual Port 的配置空间和内存空间
先配置Bar0/Bar 1NT1的Virtual
Port配置空间位于[BAR0]+0x3_C000,mem空间在[bar2~bar5]NT0的Virtual
Port配置空间位于[BAR0]+0x3_E000,mem空间在[bar2~bar5]Ntx
Virtual Port都有一组地址翻译寄存器,它的偏移在:Bar
Setup寄存器:
BAR0/1 Setup寄存器: offset D0HBAR2/3 Setup寄存器: offset D4H/D8H
BAR4/5 Setup寄存器: offset DCH/E0H
对应的地址转换寄存器在:BAR2地址转换寄存器低位: offset C3CH
BAR2/3地址转换寄存器高位: offset C40HBAR2地址转换寄存器低位: offset C44H
BAR2/3地址转换寄存器高位: offset C48H
8717地址转换
因为8717是用来连接不同的host,不同的host可能会有不同的地址空间,无论是Active-Active还是Active-Passive模式,都需要跨host域进行读写,为了保证读写到期望的地址,需要实现正确的地址转换。8717提供了两种地址转换方式:直接地址转换和基于查找表的地址转换。8717 直接地址转换
直接地址转换就是根据设置地址转换寄存器的设置,把命中当前Bar的地址转换成设置的值,然后丢到对侧节点。8717 A-LUR地址转换
基于8717的bar2/3,实现了一个bar上对多个地址的转换,这些地址甚至可以映射到不同的host上去。当然实现对多个host上述地址转换和映射的前提是需要一个额外的PCIE桥:8717ReqID-LUR
ID转换
根据PCIE规范,TLP报文中包含了RequestID,事务处理完之后会返回的TLP中包含期望的completion
ID,用来确保一次PCIE事务的正确完成。由于NTB需要跨越多个host域,对侧host访
问本侧memory空间,依赖于NTB接管并继续发送TLP访问请求,但是对侧host和本侧NTB的Request
ID显然不同,为此,除了实现Address
Translate之外,还需要实现RequestID的转换。8717引入了ReqID-LUT来实现这一转换。因此除了设置上面的地址转换寄存器之外,还需要设置正确的ReqID。
本文出自 “存储之厨” 博客,转载请与作者联系!
相关文章推荐
- tomcat编码格式与jsp编码格式不一致,导致页面标题乱码
- SQLServer 维护脚本分享(09)相关文件读取
- SQL语句,建立索引和视图,接上文
- SublimeText自带格式化代码功能之reindent
- 初识C#
- linux常用命令
- 用scrollview显示多数据
- 博弈树(转载)
- breakpoints、lldb 和 chisel 的使用
- c++标准14取消decltype推算函数返回类型
- android-xml文件布局
- Linux命令学习总结:hexdump
- 新浪博客艾尔森
- 语录
- Sexy Beach PR 汉化补丁+新手教程
- 【GLSL教程】(四)shder的简单示例
- ThinkPHP 模块与操作
- 优步提前派单新功能震撼上线,单子接不停!
- PHP Cookie实战教程
- 常用正则表达式大全