通用PCI EXPRESS端口相关申请的交叉引用
本申请是于2013年9月6日提交的、题为“UNIVERSALPCI
EXPRESSPORT(通用PCIEXPRESS端口)”、发明人为MichaelB.
Galles等的美国申请序列号14/019,777的继续申请并且根据U.S.C§120要
求此申请的优先权权益,其通过引用被全部结合于此。
技术领域
本公开一般涉及计算领域,并且更具体地涉及用于在计算机系统中提
供通用PCIExpress(PCIe)端口的方法和系统。
背景技术
计算机服务器通常包括诸如中央处理单元(CPU)、存储器、和输入/
输出(I/O)设备之类的组件。随着针对计算的需求增加,计算机服务器中
的组件的数量也在增加。为互连这些组件,刀片服务器底架能够提供机架
单元,在该机架单元中,组件卡可通过多个插槽被插入互连结构中。在售
的刀片服务器底架可在单个底架中提供4、8、12、16或更多个插槽。
通过刀片服务器底架中提供的互连结构,组件卡能够与刀片服务器底
架中的其他组件卡或者(例如,当刀片服务器底架提供网络连通性时)通
过网络与其他系统通信。互连结构的功能通常由专用硬件提供(出于性能
原因),例如互连结构可被实现为专用集成电路(ASIC)。取决于所选取
的刀片服务器底架的配置,互连结构将具有各自被配置为仅接收特定类型
的组件卡(例如,具有一个或多个CPU的主机、具有IO设备的目标设
备、网络接口控制器、或者硬件驱动(或者类似的存储设备))的插槽。
因此,互连结构中将底架的组件卡互连的专用硬件对服务器组件能够
在数据中心中进行配置的方式提出了一些限制。例如,添加不可与现有底
架中的空插槽协作的组件提起了对于新底架的昂贵购买。在另一实例中,
底架中的一些插槽可能被空置,因而浪费了底架的有价值的物理空间和资
源。另外,如果不同的组件不能够被容易地分解,针对各种类型的组件卡
的基础设施以及组件卡自身不能够被独立地调整或更新。
附图说明
为提供对本公开及其特征和优点的更全面理解,结合附图参考以下描
述,其中类似的标号表示类似的部分,其中:
图1根据本公开的一些实施例示出了刀片服务器底架中的互连结构的
示意性框图;
图2根据本公开的一些实施例示出了互连结构的示意性功能图示;
图3根据本公开的一些实施例示出了通过网络通信地连接的两个互连
结构的示意性框图;
图4根据本公开的一些实施例示出了示意性PCIe以太网分组;以及
图5根据本公开的实施例示出了用于重传PCIe以太网分组的场景。
具体实施方式
概述
这里公开了用于提供通用PCIe端口的方法和系统。相同的端口被配
置为对称地将PCIe连接接受为主机(例如,作为上游端口或虚拟交换机
端口的PCIe组件)或者端点(例如,具有下游连接的PCIe组件)。如果
PCIe设备是主机或者端点,则PCIe端口分别被连接到主机接口或者根联
合体接口。可为主机提供将主机与相应端点(或端点设备)相关联的虚拟
拓扑。虚拟拓扑中的相应端点的虚拟地址与相应端点的本地地址之间的映
射被提供。
另外,这里公开了用于提供通用PCIe端口的方法和系统。相同的端
口被配置为对称地将PCIe连接接受为主机或者端点。朝向端点的下游业
务被截获并且通过使用映射将下游业务中的虚拟地址转换为本地地址。下
游业务使用本地地址而不是虚拟地址被转发到端点。针对对于多个主机共
享相同本地地址的端点,反向查找可被提供以在转发上游业务时确定本地
地址对应于这些主机中的哪个主机。
作为一个实施例,提供了用于允许远程PCIe设备透明地与本地主机
(例如,上游端口或虚拟交换机端口)相关联的PCIe以太网(PCIeover
Ethernet)。除了提供PCIe虚拟化机制外,PCIe以太网实施例还提供了经
采取以确保传输机制仍然满足PCIeexpress标准中的传输层分组所需的要
求的非平凡措施。
示例实施例
一种普遍的互连结构架构包括外设组件互连快速(Peripheral
ComponentInterconnectExpress,PCIeTM)架构(例如,在2011年11月
29日公布的PCIeTM协议版本4.0(此后称为PCIeTM规范))。注意,本公
开可应用于任何版本的PCIe规范。PCIe(由PCI-SIG(PCI特殊兴趣小
组)维护和研发的标准)的首要目标是使得来自不同供应商的组件和设备
能够在跨多个市场区段(客户端(台式和移动)、服务器(标准和企业
级)、以及嵌入式和通信设备)的开放架构中相互操作。PCIe是针对各种
各样的计算和通信平台定义的高性能通用I/O互连。PCIe的近期版本利用
了点对点互连、基于交换的技术、以及分组化协议的进步来达到性能和功
能的新层次。PCIe是用于服务器处理器(包括x86和ARM架构)的首要
连通性选项。
为提供更多的灵活性,物理PCIe端口已经能够被实现为在PCIe接口
处被虚拟化,这使得PCIe端口能够通用且对称地接受主机和端点(或者
端点设备)。通用PCIe端口在服务器配置中提供了更多的灵活性,允许
服务器设计者通过将服务器的主机(例如,被配置为上游端口或虚拟交换
机端口的计算机处理单元和存储器)与端点(例如,诸如存储设备和网络
接口控制器之类的输入/输出(I/O)设备、端点设备)相分离来分解数据
中心中的服务器组件。分解允许服务器设计将端点与主机解耦合,允许这
些子系统被独立地调整并被独立地刷新至新的技术步骤。另外,在PCIe
接口处分解服务器允许被解耦合的子系统在基于长期标准的总线间进行演
进。例如,具有插入式刀片(组件卡)的多服务器底架可受益于允许服务
器刀片(主机)或I/O子系统刀片(端点)被插入到任何可用插槽中的一
个或多个通用PCIe端口。因此,物理PCIe连接的虚拟化允许独立的服务
器和I/O在相同的物理封装(envelop)内进行调整。
例如,刀片底架插槽可被配置为接受服务器刀片、基于PCIe的闪存
刀片、包括PCIe控制器的传统存储介质刀片、用于浮点加速的GPU、加
密加速器、以及其他设备,这允许顾客使用共同的基础设施在不同的时候
在不同方向扩展服务器能力。这具有允许顾客独立于IO子系统联合体
(端点)地升级和调整GPU和存储器联合体(主机)的优点。当与允许
设备或功能被分配给此服务器的本地地址空间中的个体服务器的虚拟化技
术相结合时,该优点被成倍放大,因为它使得IO设备能够跨越多个服务
器(包括旧有操作系统)被共享和调整,因为它依靠于标准设备列举
(enumeration)、资源映射、和命名机制。另外,PCIe结构或交换机可被
配置为支持设备虚拟化,单个I/O设备可在多个独立服务器间被共享。
在本公开的上下文内,主机可包括一个或多个处理器(通常是服务器
系统的“CPU”)以及可选地包括支持一个或多个处理器的一个或多个存
储器元件。主机可被配置为上游端口或虚拟交换机端口,端点可与该上游
端口或虚拟交换机端口进行通信。I/O或端点(或者端点设备)可包括以
下各项中的一项或多项:网络接口控制器(NIC)、插入卡、音频处理
器、网络处理器、图形卡、硬驱、存储设备、CD/DVD/ROM、监视器、打
印机、鼠标、键盘、路由器、便携式存储设备、火线设备、通用串行总线
(USB)设备、扫描器、以及其他输入/输出设备。一般在PCIe用语中,
这样的I/O或端点设备被称作端点。在不同的术语中,主机可以是“主设
备(master)”并且端点可以是“从设备(slave)”。在一些情形中,设
备可包括PCIe至PCI/PCI-X桥接以支持旧有或其他版本的PCI设备。
提供通用PCIe端口不是普通的任务。在创建统一通用端口时存在设
备虚拟化、地址、和命名问题,以及其他难题。通用PCIe端点是到PCIe
结构或交换机的连接,其支持到相同物理端口的主机CPU连通性以及I/O
设备端点连通性。通用PCIe端口逻辑包含PCIeMAC(介质访问控制器,
或者一般作为端口管理器),该PCIeMAC具有连接到上游(或者PCIe
根联合体端口)或者下游(或者PCIe设备或交换机端口)的能力。除了
PCIeMAC之外,具有虚拟化PCIe地址空间、PCIe设备标识、PCIe消息
传送、和PCIe终端的逻辑也存在。此硬件设备虚拟化是关键组件,因为
它允许不同设备或功能被分配到相关联端口的地址空间和名称空间内的不
同服务器主机。
为提供通用PCIe端口,许多特性在服务器底架中的改进互连结构中
被提供,其中互连结构由将一组设备互连的点对点链路组成。一般而言,
互连结构包括用于处理设备之间的业务以及用于提供通信路由能力(即,
交换机、总线、信号线等等)以转发这些业务的专用硬件和电路。例如,
互连结构可被至少部分地实现在专用集成电路(ASIC)上,并且通用
PCIe端口可包括PCIe组件/卡/设备能够连接到的输入和输出引脚/引线并
且在PCIe组件/卡/设备与互连结构之间提供到互连结构的信号连通性。为
进行说明,图1根据本公开的一些实施例示出了刀片服务器底架中的互连
结构100的示意性框图。
一个或多个主机可通过PCIe通道102连接到主机接口105,并且每个
主机可利用一个或多个虚拟拓扑104(被示出为PCIe层次结构(或者被称
为“PCIe树”))被虚拟化。虚拟拓扑将主机与一个或多个端点相关联,
表明服务器系统中一个或多个主机与一个或多个端点间的关系。连接到互
连结构的其他设备以及互连结构中的设备可通过主机接口寻址并与主机进
行通信。一个或多个端点设备可通过PCIe通道108连接到根联合体接口
106。使用端点的一个或多个本地地址,连接到互连结构的其他连接/设备
以及互连结构中的设备可通过根联合体接口寻址并与主机进行通信。
一般地,互连结构包括一个或多个处理器110和本地存储器112(包
括一个或多个存储器元件)以处理设备间的业务。一个或多个处理器可包
括任何处理元件,例如微处理器、主机处理器、嵌入式处理器、协处理
器、或其他处理器。本地存储器112可包括任何适合的一个或多个计算机
可读非暂态存储器元件。一个或多个处理器110和本地存储器112扮演若
干重要角色。
首先,互连结构中的一个或多个处理器可用作配置代理和/或端口处理
器。一个或多个处理器可确定连接到通用PCIe端口的物理PCIe组件是要
被配置为主机还是端点。PCIe组件卡不是带有主机就是带有端点(可能具
有多个主机和端点),因此一些互连结构可具有检测/确定PCIe组件是要
被配置为主机(例如,上游设备)还是端点(下游设备)的能力。在一些
实例中,如果互连结构不能够自己确定PCIe组件卡是带有主机还是带有
端点,则管理者可提供用户输入,该用户输入向互连结构指示被连接到互
连结构的PCIe组件是主机还是端点。基于来自管理者的用户输入(例
如,通过用户接口),一个或多个处理器确定PCIe总线上所发现的PCIe
组件要被配置为主机还是端点。从而,一个或多个处理器在PCIe组件被
配置为主机时在PCIe端口处将PCIe组件连接到主机接口105或者在PCIe
组件被配置为端点时将PCIe组件连接到根联合体接口。在一个实施例
中,分别取决于PCIe设备是/具有主机或端点设备,一个或多个处理器可
配置一个或多个复用器以选择一组信号线来提供PCIe组件(分别)到主
机接口或者根联合体接口之间的上游信号连通性或者下游信号连通性。
第二,一个或多个处理器配置互连结构以利用分离的虚拟拓扑来虚拟
化每个主机,例如每个虚拟拓扑包括PCIe树/层次结构。虚拟拓扑将具体
主机与相应的端点相关联,其中从具体主机的视角来看,相应端点是可使
用一个或多个虚拟地址进行寻址的。另外,一个或多个处理器提供虚拟拓
扑中使用的虚拟地址到由根联合体接口使用的(实际/物理的)本地地址之
间的一个或多个映射以用于对端点进行寻址。从主机视角(即,来自主机
的视角)看的虚拟地址可不同于从本地视角(即,来自一个或多个端点和
互连结构中的一个或多个处理器的视角)看的本地地址。映射因此允许虚
拟地址被转换至本地地址(反之亦然)。一个或多个处理器因此具有以下
作用:适当地分配和配设端点的地址空间以及端点的虚拟地址到本地地址
的映射从而确保各个主机之间的独立和隔离的操作(例如,提供主机的隔
离操作,其中一个主机不知道另一主机和/或不与该另一主机进行交互)。
第三,互连结构中的一个或多个处理器可用作主机接口处的主机与根
联合体接口处的端点之间的代理或代理处理器。一个或多个处理器可拦截
和/或转发主机和端点之间的上游和下游业务并执行虚拟地址和本地地址之
间的任何必要转换。在一些实施例中,一个或多个处理器可被配置为将业
务封装至远程主机/端点设备以用于通过不同的通信协议(例如,以太网)
传输业务。
图2根据本公开的一些实施例示出了互连结构的示意性功能图示。一
旦确定连接到PCIe端口的PCIe组件是/具有主机还是端点,PCIe端口根据
该确定被连接到主机接口202或根联合体接口204(例如,PCIe端口处的
PCIe组件被提供有到适合的接口/总线/交换机的信号连通性)。在示例性
实施例中,多达16个主机(“主机0”……“主机15”)可被连接到主
机接口202。eCPU206可以是(在功能上和/或可通信地位于)主机接口
202和根联合体接口204之间的代理处理器。eCPU206可列举在根联合体
接口204处连接的PCIe端点,并且向主机接口202处的主机呈现作为虚拟
网络接口卡(vNIC)的端点。在示例性实施例中,多达128个外部的虚拟
/物理端点(或端点设备)可被连接到根联合体接口204。
在上电之后,取决于所选择的产品配置(其在本公开的范围之外),
eCPU206可列举端点(以及中间交换机,如果存在的话)并且针对端点
BDF的配置空间维持本地配置视角(图2中的“本地CFG视角”)。
eCPU206针对所发现的一个或多个各种端点分配存储器/IO基地址寄存器
(BAR)地址范围。所分配的存储器/IOBAR地址范围可被定义于互连结
构中的本地存储器204内和/或主机处的存储器内。
在PCIe的情境内被连接到根联合体接口的端点是可使用诸如(相应
的)总线/设备/功能(BDF)号、一个或多个存储器空间地址、和/或一个
或多个输入/输出空间地址之类的本地地址进行寻址。在PCIe快速中,这
些本地地址基于本地配置视角(在图2中被标示为“本地CFG视角”),
即来自嵌入式计算机处理单元206(此后为“eCPU”,包括一个或多个处
理器)和端点的角度的端点配置。本地配置视角定义了eCPU206如何能
够对本地地在根联合体接口204(由其提供的物理网络)内的端点设备进
行寻址。在一些实施例中,根联合体接口204可将端点呈现为具有端点的
本地地址的虚拟网络接口卡(vNIC)。
为与PCIe端点设备通信,eCPU206可使用BDF号来访问设备的配置
空间以对端点进行寻址/识别。另外,eCPU206可使用例如在端点设备的
配置空间中的基地址寄存器(BAR)中编程的存储器空间或I/O空间地址
来寻址端点的I/O和存储器区域/空间(例如,规定了本地存储器208中的
一个或多个区域)。使用本地地址、BDF号、和/或BAR来寻址端点是根
据PCIe标准执行的。
如果PCIe组件是主机(或者PCIe端口要被配置为主机),则eCPU
206确定主机的一个或多个相应端点。该确定可基于来自管理者通过用户
接口的用户输入而被执行,该用户输入将特定主机与一个或多个相应端点
或端点设备相关联。主机和端点(或者端点设备)之间的关联的管理可以
是基于策略的或者手动规定的,并且可从基于网络的配置控制台中进行控
制或者从主机CPU中进行配置。
在确定相应的端点之后,eCPU206提供将主机与一个或多个端点相关
联的虚拟拓扑,该一个或多个端点可通过一个或多个相应端点的虚拟地址
来寻址。虚拟地址是在主机配置视角(由“主机CFG视角”标示)内定义
的,并且可以不同于相应端点的本地地址。为确保主机能够正确地寻址相
应的端点,eCPU206提供了相应端点的虚拟地址与相应端点的本地地址之
间的第一映射。
如果PCIe组件是端点(或者PCIe端口要被配置为端点),则eCPU
206可配置端点以将该端点与连接到互连结构的主机相关联。eCPU206可
例如基于来自管理者的用户输入、通过将特定端点与主机相关联用户接口
来为端点确定主机。在确定了相应主机之后,针对相应主机的第二虚拟拓
扑被确定(或者如果第二虚拟拓扑尚不存在,则被配设),其中第二虚拟
拓扑将相应主机与特定端点相关联。eCPU206可提供第二虚拟拓扑中的虚
拟地址(寻址/标识特定端点)和端点的本地地址之间的第二映射。
第一映射和第二映射由例如eCPU206中的PCIe虚拟化引擎提供(或
者在一些情形中不需要来自eCPU206的协助,而是由另一处理器、功能
或专用单元提供),以将从主机配置视角看的虚拟地址转换为从本地配置
视角看的本地地址。为确保PCIe组件/连接被正确地寻址,第一映射和第
二映射(被标示为“转换表210”)可将主机CFG视角BDF和BAR转换
为本地CFG视角BDF和BAR。在一些实施例中,第一映射和第二映射可
各自包括查找表(例如,内容可寻址存储器(CAM)或任何适合的数据结
构),该查找表将由特定主机使用的端点的虚拟地址与那些端点的相应本
地地址相关联。映射允许主机透明地对端点寻址而无需知道端点的实际本
地地址。通过映射的虚拟化还可允许eCPU(或其他适合的独立实体)确
保本地存储器208被正确地分配给端点。另外,通过为不同主机的端点提
供分离的虚拟拓扑并且适当地配设本地地址,主机被使能以独立并且彼此
分离地进行操作。此外,eCPU206通过转换表210有效地虚拟化了根联合
体端点配置空间的主机视角。
在一个或多个转换表被配置之后,eCPU206可管理上游业务和下游业
务。在本公开的上下文内,上游业务包括从端点到主机接口202处的主机
和/或eCPU206的通信(即,PCIe流量),并且下游业务包括从eCPU
206和主机接口202处的主机到在根联合体接口204处连接的端点的通信
(即,PCIe流量)。
PCIe上游和下游业务可在以下四个类别中进行描述。下面的字母A-D
对应于图2中示出的转发路径中的标号A-D。
A.eCPU206可发送/转发下游业务到根联合体接口204处的端点以用
于以下目的:
i.列举端点(例如,设备发现和配置);
ii.在eCPU206上实现的vNIC的操纵以寻址端点设备;以及
iii.处理来自主机的PCIe业务以及需要由eCPU206代理的其他
PCIe间接业务/请求。
B.在使用转换表210将BDF和BAR地址从主机CFG视角转换为本
地CFG视角(例如,转换可由eCPU206管理)之后,主机可发送由硬件
直接转发的配置/I/O/存储器(CFG/IO/MEM)相关的下游业务。
C.来自端点设备的上游直接存储器存取(DMA)业务/请求/上游中断
/PCIe消息被转发到主机存储器或者本地存储器208(DMA业务可对准主
机存储器、ASIC中的本地存储器、或者甚至PCIe层次结构内的其他设备
(被称作PCIe对等(peertopeer)业务))。针对由多个主机共享的
BDF,可选的上游地址转换被执行。
D.不能够由硬件直接转发的上游业务被发送到eCPU206。示例包
括:
i.除了存储器(MEM)业务/请求类型之外的业务;
ii.BDF查找表没能解析与主机相关联的主机的标识符(例如,
host_id/vNIC);
iii.PCIe业务/消息和PCIe业务层错误,像中毒、ECRC错误等
等;以及
iv.由访问控制列表(ACL)查找表可选地捕获(trap)的业务。
因为主机使用主机CFG视角来寻址一个或多个端点,来自主机的下游
业务被eCPU206截获并且下游业务中使用的一个或多个虚拟地址被通过
使用与主机相关联的一个或多个相应端点的一个或多个虚拟地址与本地
CFG视角中的一个或多个相应端点的一个或多个本地地址之间的映射进行
转换。下游业务然后使用一个或多个本地地址而非一个或多个虚拟地址被
转发到一个或多个适当端点上。
当例如端点的本地地址(例如,BDF号)和主机之间存在1比1分配/
关系(被示出为模式212)时,来自端点的上游业务可由硬件被直接转发
到主机或eCPU206。这可应用于以下情形:PCIe组件卡未由多个主机共
享,或者PCIe组件卡由多个主机共享但设备可通过单一根I/O虚拟化
(SR/IOV)技术的使用根据它自己的BDF号来寻址。在这样的模式中可
提供简单的反向查找,这允许对与该上游业务源自的本地地址(例如,请
求者/端点设备BDF号)直接相对应的正确主机的查找来确定特定上游业
务的目的地主机。
然而,在一些实施例中,本地地址(单一BDF)可由多个主机共享
(被示出为模式214)。换而言之,PCIe端口处的同一PCIe组件卡可包
括能够与不同主机相关联(例如,多个主机共享同一PCIe组件卡)同时
使用相同的本地地址(例如,相同的BDF号)的多个端点设备。在这些实
施例中,上游业务可例如由eCPU206处理以确定上游业务要指向多个主
机中的哪个主机。为确定该上游业务被指向多个主机中的哪一个,上游转
换器可被提供,并且(例如使用转换表210来)执行存储器地址的反向查
找。上游转换器可包括将不同主机与共享同一本地地址的端点可用的不同
存储器地址或地址范围相关联的信息。上游转换器可确定存储器地址所对
应的主机的标识符,并且使用标识符将上游业务转发至主机接口。
性能数据路径被称作由硬件进行的直接处置(例如,由模式212使用
的路径)。根联合体接口可针对业务源自的端点确定相应主机的目的地
vNIC,并且将业务直接转发到主机存储器或本地存储器208并且相应地将
响应数据和状态作为PCIe完成返回到端点。
包括由转换表210明确地捕获的请求、除了MEM存取之外的请求、
和/或PCIe消息的上游业务通过中断eCPU206进行处理。这被称作间接处
置并且被视为缓慢/例外路径。在一些情形中,为避免由需要由eCPU206
进行间接处置的上游业务导致的线端拥塞,可提供逐vNIC间接业务环。
每个vNIC间接环大小可被配置为在某一时刻多达64个待处理业务并且每
个vNIC环可使用可配置中断地址来中断eCPU。
在一些实施例中,来自端点的主数据路径DMA流量包括到主机存储
器或本地存储器208的MEM读/写(RD/WR)业务。在此模式(被视为快
速路径)中,上游业务(例如,存储器请求)被硬件使用的主机或本地存
储器地址直接转发。一般地,上游存储器请求和它们的完成是由流水线直
接处理的。其他类型的业务(IO、MSG等等)作为间接业务可被转发到
eCPU进行处置。
为提供用于转发上游业务的快速路径,查找表被提供,该查找表将
(端点设备的)BDF号与相应主机和/或相应主机的vNIC地址相关联。这
可在具有或者不具有eCPU206的情况下被执行。如果查找表不能够解析
相应主机的vNIC地址,上游业务在间接模式中被处理。间接模式被提供
以在eCPU206的协助下支持共享的端点使用模型。在此模式中,BDF查
找表自身不能够解析vNIC地址,因为本地地址(例如,BDF号)可被多
个主机设备共享。反向查找可被执行以从多个主机中确定正确的主机,或
者上游业务可利用主机地址空间中的未使用比特(用于对主机寻址)来编
码主机标识符。
在一些实施例中,针对端点的本地地址范围/区域可被分配为与128字
节的边界自然对齐的连续范围。主机的最大地址宽度可以是用于上游存储
器描述符的[47:0]。当本地地址(例如,BDF号)在多个主机间共享时,
主机地址空间可具有一些未使用的比特。上游转换器可灵活地使用空间/未
使用的地址比特来在未使用的比特中编码标识符(host_id或者任何适合的
主机标识符)。eCPU206可用作主机的代理处理器以将直接存储器存取散
集列表(DMASGL列表)描述符地址公布给端点设备并且向端点提供在
未使用的地址比特中具有经编码的主机标识符的一个或多个主机地址。因
此,端点可利用经编码的主机标识符在上游业务中发送主机地址。经编码
的主机标识符然后可被用于将上游业务路由至相应的主机。例如,互连结
构中的硬件可在将上游业务转发给主机之前将经更改的比特恢复回它们的
原始值。
为在此模式中操作,假设端点不使用所有可寻址的主机存储器空间
(例如,地址空间[47:0])。因此,如果存在一些未使用的主机地址比
特,则eCPU可在代表主机向端点公布DMASGL地址时在描述符地址的
未使用地址比特中插入独有的主机_指针(host_index)(或者“host_id”
或者任何适合的主机标识符)。当端点发出上游DMA请求时,硬件将剥
离host_index比特并且使用它来确定相应主机的vNIC号。编码host_id或
host_index所需要的未使用的地址比特可以根据共享BDF的2/4/8/16个主
机而逐BDF变化。使用此模式,在多个主机之间共享端点以及eCPU206
是可能的。
上游业务(存储器请求)可经历另一查找,该查找用于通过使能对特
定BDF的host_index字段的比较来解析共享BDF模型的vNIC号、捕获对
特定VNIC的请求并将它间接地发送至eCPU、捕获针对某一主机/本地存
储器范围的请求并将它间接地发送至eCPU、以及利用地址转换对针对某
一主机/本地存储器范围的上游业务中的地址进行转换以用于直接转发。查
找的一个用例是设置条目来保护某一本地存储器区域从而使得来自端点设
备的错误/未预料到的DMA存取不会损坏本地存储器208。
在一些实施例中,中断(MSI写业务或者旧有PCIe消息)还可被转
换以使得业务被定向至正确/相应的主机,而不论它是共享的资源还是直接
BDF映射。针对共享的中断资源,寻址方案可被用于选择主机,或者中断
可通过eCPU或另一映射硬件被代理以将中断递送到正确的主机。
甚至可以跨越通信网络(例如,以太网网络,或者数据中心以太网网
络)在具有支持图1-2中所述的虚拟化特性的互连结构的另一服务器底架
处提供通用PCIe端口的功能。PCIe业务可使用不同的通信协议进行封装
和传输,并且这些业务可在接收到时被解封装并且使用这里公开的虚拟化
特性进行处理。例如,插入到远程服务器底架中的PCIe插槽中的端点可
使用这里公开的虚拟化特性进行配置以将远程服务器底架中的端点与本地
服务器底架中的主机相关联。在一些实施例中,PCIe业务可被封装在以太
网分组中并且通过以太网(但是可预见到其他通信协议)进行传输。例
如,以太网分组可通过以太网连接上的隧道从一个PCIe组件被传输到另
一PCIe组件(上游或下游)。
图3根据本公开的一些实施例示出了通过网络通信地连接的两个互连
结构的示意性框图。此示例性系统通过以太网在第一互连结构304处的主
机302与第二互连结构308的一个或多个端点306a和306b之间经由隧道
传输PCIe业务的独立传输层分组(TLP)。PCIe业务可被路由通过L2交
换机310。第二互连结构308可执行对它的PCIe总线的列举并且发现一个
或多个端点306a和306b。然后,第二互连结构可向第一互连结构发送通
信以指示一个或多个端点306a和306b已经被发现。
在一些实施例中,基于来自管理者的用户输入,第二互连结构308确
定PCIe组件306a和306b要被配置为端点并且将它们连接到第二互连结构
308处的根联合体接口。本地地址可被配设来对根联合体接口处的端点进
行寻址。例如,本地地址可包括以下各项中的至少一项以对PCIe组件寻
址:一个或多个总线/设备/功能(BDF)号、一个或多个存储器空间地
址、以及一个或多个输入/输出空间地址。PCIe组件虚拟化引擎或者广义
上的PCIe虚拟化引擎可将一个或多个端点呈现为具有(一个或多个本地
地址)的一个或多个虚拟网络接口卡(vNIC)。另外,基于用户输入,第
一互连结构可确定PCIe组件302要被配置为主机,并且将PCIe设备302
连接至互连结构的主机接口。虚拟拓扑被提供以使用端点306a和306b的
一个或多个虚拟地址来将主机302与一个或多个端点306a和306b相关
联。虚拟地址由主机302用于对端点306a和306b寻址。映射然后被提
供,其在(主机配置空间中的)虚拟地址和端点的(一个或多个本地配置
空间中的)相应本地地址之间进行映射/转换。虚拟地址和本地地址可以是
不同的。虚拟化主机和端点的处理类似于关于图1和图2所述的处理。注
意,下游和上游转换可以如关于图1和图2所述相同的方式被执行。例
如,目的地为远程端点的下游业务被截获,并且使用由PCIe虚拟化引擎
提供的映射来转换这些下游业务中所使用的虚拟地址。
为提供主机302和一个或多个端点306a和306b之间的适合通信信
道,第一互连结构304的网络地址(例如,L2地址)被从第一互连结构发
送到第二互连结构308,并且第二互连结构308的网络地址在第一互连结
构304处被从第二互连结构接收。可预见到用于向通信信道的各端通知它
的对等者(peer)的网络地址的其他步骤。网络地址的交换允许在第一互
连结构304和第二互连结构308之间配设通信隧道以用于在主机302和一
个或多个端点306a和306b之间传输PCIe业务(即,PCIe以太网分
组)。PCIe业务(具体地,TLP分组)可通过将TLP分组封装在以太网
分组中而被传输。封装可在发送经封装的分组前被执行。解封装/提取可在
接收到经封装的分组之后被执行。经提取的PCIe业务然后被转发至适合
的PCIe设备。
用于在远程地且通信地连接的PCIe设备之间传输PCIe业务的隧道协
议可包括序列号检查和重传以确保帧的可靠有序递送,如PCIe传输层分
组(TLP)所要求的那样。如果以太网链路或交换机故障,则隧道通过在
替换路径上重新发送帧来继续操作。为了满足PCIeTLP业务的要求,以
太网连接优选地满足以下项中的至少一项:(1)低延时,由于PCIe层超
时可随着过量延迟而发生;(2)被分配到支持暂停的数据中心以太网
(DCE)网络服务等级(COS)上,以最小化分组丢失的几率并提供高质
量服务;(3)服务器和PCIe卡机架单元应当在同一的数据中心中,优选
地被连接到同一L2交换机。如果以上条件被满足,则PCIe以太网技术可
在主机和(第三方)PCIe端点之间提供可靠连接。性能将首要地取决于第
三方端点(或端点设备)的延时容忍度—例如,支持更大数量的待处理
PCIe读请求的设备将遭受最小的性能影响,因为与具有少量待处理PCIe
读请求的设备相比的增加的主机存储器读延时。对设备读延时的示例性估
计约为1.5微秒。为进行对比,直接连接到主机的PCIe端点可预期约为
300纳秒的理想读延时。然而,此数是高度可变的并且取决于x86处理器
状态,其可在增加的延时中达到数10微秒。为了通过以太网PCIe来维持
从主机到端点的10Gb/s的数据流,要求至少8个待处理的读取来容忍1.5
微秒的延时(假设256字节的TLP有效载荷)。注意,从端点到主机的
PCIe以太网流量未被延时显著影响,因为写入不需要设备中的保留资源。
PCIe以太网协议定义了连接建立、分组封装、可靠递送、以及在故障
时的替换路径重试。协议可保证CRC保护的PCIe业务在PCIe发起者和目
标(上游或下游)之间的按顺序递送。为建立连接,PCIe以太网连接是使
用管理代理(例如,图2中的eCPU206或者第一互连结构304和/或第二
互连结构308中的任何适合处理器)进行设置的。目标侧(即,第二互连
结构308)执行PCIe总线的本地列举并且向管理代理通知所发现的卡。管
理代理可将一个或多个端点306a和306b分配给主机302(例如,在虚拟
拓扑中)。注意,具有单一根I/O虚拟化的PCIe卡可将每个功能(BDF
号)分配给单个主机或各个主机,假设物理驱动器可由目标互连结构处的
本地管理代理运行。管理代理向第一互连结构304通知设备关联并且创建
包括针对要被连接到的各个远程PCIe设备的虚拟PCIe插槽的vNIC配
置。发起者主机(即,第一互连结构304)可在正常的PCIe列举过程期
间、在远程PCIe插槽的下一次重启过程中发现它。管理代理还可向该连
接的各端通知它的对等者的L2地址。一旦连接被建立,去往/来自远程设
备ID的所有PCIe业务在PCIe以太网隧道中被转发至远程对等者。
第一互连结构可截获下游业务并且确定目标端点(例如,一个或多个
端点306a和306b)通过第一互连结构304和第二互连结构308之间的通
信隧道被远程地连接。作为响应,分组头部被构造用于向端点发送经截获
的下游业务(例如,使用第二互连结构的L2网络地址)。分组头部可被
用于封装经截获的下游业务,并且经封装的分组通过通信隧道被转发到第
二互连结构。
图4根据本公开的一些实施例示出了示意性PCIe以太网分组。在示
例分组中,来自TLP业务的数据有效载荷和PCIe地址被封装在具有特定
PCIe以太网类型的L2分组中。图4中示出了以太网帧的单一PCIe的格
式。
分组头部可标识第二互连结构的网络地址以允许分组被路由至第二互
连结构。另外,PCIe以太网分组可包括以下示例性字段中的一个或多个字
段:
·TxSN[8]—当前帧的发送序列号
·AckSn[8]—确认序列号,或者最后接收到的良好TxSN
·TLP[]—3DW(12字节)或者4DW(16字节),如PCIe所定义的
那样
·Data[]—数据有效载荷,0-4096字节,大小由TLP长度字段定义
·PCIeCRC[32]—保护SN、TLP和数据的循环冗余校验(CRC)
PCIe以太网头部可与PCIeTLP相等。序列号字段TxSN和AckSN以
及PCIeCRC在标准化的TLP定义之外。具体地,在转发经封装的下游业
务前,误差检测码(例如,CRC)可被附加到以太网分组以保护下游业务
中的一个或多个PCIe序列号、传输层分组(TLP)、和数据有效载荷的数
据完整性。
PCIe以太网可利用滑动窗口协议以及后退n重试来从检测到的错误中
恢复。每个帧在发送之前被标记以序列号。例如,序列号以业务被发送的
次序来进行分配(随着业务被发送而递增,重复一系列号)。接收互连结
构可使用例如PCIeCRC和/或现有的802.3FCS(CRC-32校验和)来检查
数据完整性。发送的序列号与预期的序列号之间的失配或者CRC或FCS
误差将导致接收机丢弃该帧。匹配预期的序列号并且具有正确FCS的接收
到的帧将被直接传递到正确的PCIe设备。正确接收到的帧可生成返回给
对等者的确认通知。确认通知可被独立地或者利用下一向外传输背负式地
进行发送。确认通知可被丢失或合并。如果在可编程的重传计时器到期之
后未接收到确认通知,则一个或多个帧将被重传,该重传自最后未确认的
帧开始。例如,重传计时器可在具有PCIe业务的PCIe以太网分组被发送
时即被启动,并且如果在特定的超时时段内未接收到针对所发送的业务的
确认,则PCIe以太网分组被重传。如果发生超出可编程阈值的多个重
传,则替换隧道路径可被选择。
现代的PCIe设备驱动器可最小化到设备的PIO读操作。这有助于
PCIe以太网,因为所引入的增加的延时可导致主机CPU停顿并且最好被
避免。还要注意,最关键的超时事件是主机PIO读请求。多个PCIe以太
网重传事件可显著地延长延时,逼近主机PCIe超时值。最小的PCIe超时
值是50微秒,但更通常地该值被设置为数十微秒。PIO写不具有严格的延
时要求,目标设备读和写操作也不具有严格的延时要求。因此,主机PIO
读是易受超时失败影响的首要请求。
所发送的PCIe以太网帧可被测量(span)并被存储在专用存储器(图
5中被标示为“RQ”)中。如果远程对等的互连结构经由它的AckSN字
段确认了对到来的帧的接收,则RQ缓冲器被静默地释放并且准备好重复
使用。如果远程对等的互连结构没能在重传计时器持续期内确认接收,则
重传被执行。重传经由与重传RQ相关联的熔断存储器(被标示为
“WQ”)被执行。当重传事件被发起时,重写引擎将根据序列号状态设
置公布_指针(posted_index)和取回_指针(fetch_index)并然后启用
WQ。
针对此RQ+WQ对,以下内容可以是真的(参见图5的图形描述):
·RQ+WQ中的缓冲器的指针还等于它包含的帧的TxSN。
·当新的Ack到达时,RQ.posted_index<=RxAckSN-1,这有效地释放
缓冲器和远程确认。
·在重传事件上,WQ.posted_index<=TxSN;WQ.fetch_index<=
RxAckSN
·在一些实施例中,如果N次重试未被确认,则下次重传事件应当尝
试替换路径;确保N*超时值小于PCIe超时值。
在一个示例实现方式中,实现这里所描述的实施例所涉及的各种设备
或组件可包括用于实现所述功能的软件,并且这里公开的这些设备或组件
可包括在体现于一个或多个非暂态有形介质中以用于辅助这里描述的活动
的软件。互连结构、PCIe虚拟化引擎、端口管理器、用户接口、和/或管
理代理中的至少一部分还可包括用于存储有待用于实现如本文所概括的功
能的信息的存储器设备(存储器元件)64。另外,这里所述的互连结构可
包括能够执行软件或算法以执行本说明书中所论述的功能的一个或多个处
理器。这些设备可在适当情况下并且基于具体需要将信息保存在任何合适
的存储器元件(随机存取存储器(“RAM”)、ROM、EPROM、
EEPROM、ASIC等)、软件、硬件中,或维持在任何其他合适的组件、
设备、元件或对象中。这里论述的任何存储器项目应被解释为涵盖在广义
术语“存储器元件”内。类似地,本文在本说明书中描述的潜在处理元
件、模块和机器中的任一种应被解释为涵盖在广义术语“处理器”内。每
个元件还包括用于在网络环境中接收、传输和/或以其他方式传达数据或信
息的合适接口。
注意,在某些示例性实现方式中,这里并在图1-3中概括的功能可由编
码在一个或多个有形介质中的逻辑实施(例如,在专用集成电路
(“ASIC”)中提供的嵌入式逻辑、数字信号处理器(“DSP”)指令、
要由处理器或其他类似机器执行的软件(潜在地包括对象代码和源代码)
等)。在这些实例的一些中,存储器元件(如图1-2中所示)可存储用于本
文描述的操作的数据。这包括能够存储被执行以进行本文在本说明书中详
述的活动的软件、逻辑、代码或处理器指令的存储器元件。处理器可执行
与实现本文在本说明书中详述的操作的数据相关联的任何类型的指令。在
一个示例中,处理器(如图5中所示)可将元件或物件(例如,数据)从
一种状态或情况转变到另一种状态或情况。在另一个示例中,本文概括的
活动可利用固定逻辑或可编程逻辑(例如,由处理器执行的软件/计算机指
令)实现,并且本文标识的元件可以是可编程处理器、可编程数字逻辑
(例如,现场可编程门阵列(“FPGA”)、可擦除可编程只读存储器
(“EPROM”)、电可擦除可编程ROM(“EEPROM”))、或包括数
字逻辑、软件、代码、电子指令或其任何合适的组合的ASIC中的某种类
型。
应当注意到,这里论述的基础设施(例如,各种接口、转换表、缓
存、交叉开关、子系统等等)中的多数可被配设为任何类型的计算元件的
一部分。如这里所用,术语“计算元件”、“计算设备”、“交换机”、
“主机”、“端点”等等是可互换的并且可涵盖可操作以在网络中交换信
息的计算机,服务器,网络器具,底架,主机,路由器,交换机,网关,
网桥,虚拟设备,电路负载均衡器,防火墙,处理器,模块,或任何其他
适合的设备、组件、元件、或对象。例如,术语“端点”可与用于发起通
信的各种计算设备相关联,例如任何类型的接收机,计算机,机顶盒,互
联网无线电设备(IRD),蜂窝电话,智能电话,膝上型计算机,平板,
个人数字助理(PDA),GoogleAndroidTM,iPhoneTM,iPadTM,Microsoft
SurfaceTM或者能够发起系统内的语音、音频、视频、媒体或数据交换的任
何其他设备、组件、元件、端点或对象。
此外,这些元件可包括促进其操作的任何合适的硬件、软件、组件、
模块、接口或对象。这可以包括允许有效交换数据或信息的适当的算法和
通信协议。
在一种实现方式中,这些元件/设备可包括实现(或促成)本文论述的
活动的软件。这可包括附图中所示的组件、引擎、逻辑、模块等中任一种
的实例的实现方式。另外,这些设备中的每一个可具有促进在此描述的一
些操作的内部结构(例如,处理器、存储器元件等)。在其他实施例中,
这些管理活动可在这些设备外部被执行,或被包括在一些其他设备中以实
现预期功能性。可替代地,这些网络设备可包括可与其他元件协作以便执
行本文描述的活动的软件(或往复式软件)。在其他实施例中,一个或几
个设备可包括促进其操作的任何合适的算法、硬件、软件、组件、模块、
接口或对象。
注意,在以上提供的示例以及本文提供的众多其他示例的情况下,可
以就两个、三个或四个计算机元件来描述交互。然而,仅出于清晰和示例
的目的而这样做。在某些情况下,通过仅提及有限数量的元件可更容易描
述给定一组流程的功能性中的一种或多种。应理解,参考附图描述和示出
的拓扑(及其教导)易于扩展并可容纳大量的组件、以及更复杂/精细的布
置和配置。因此,所提供的示例不应限制所示系统的范围或抑制所示拓扑
的广泛教导,因为所示拓扑潜在地可应用于无数其他架构。
同样重要的是注意,先前流程图中的步骤仅示出可由附图中所示的通
信系统执行或在附图中所示的通信系统内执行的可能信令情形和模式中的
一些。在适当情况下可删除或移除这些步骤中的一些,或可在不脱离本公
开范围的情况下相当大地修改或改变这些步骤。另外,这些操作中的一些
已经描述为与一个或多个另外的操作同时或并行执行。然而,这些操作的
定时可被相当大地变更。出于示例和论述目的提供先前操作流程。所述系
统可提供显著灵活性,因为在不脱离本公开教导的情况下,可提供任何合
适的布置、时间表、配置和定时机制。
尽管已经参考具体布置和配置详细描述了本公开,但在不脱离本公开
的范围的情况下,这些示例性配置和布置可显著改变。例如,尽管已经参
考具体通信交换而描述了本公开,但这里所述的实施例可应用于其他架
构。
本领域的技术人员可探知众多其他改变、替代、变动、变更和修改,
并且本公开旨在涵盖落入所附权利要求书的范围内的此类改变、替代、变
动、变更和修改。为了帮助美国专利商标局(USPTO)并且另外帮助基于
本申请发布的任何专利的任何读者理解在此所附的权利要求书,申请人希
望注意,申请人:(a)并不旨在所附权利要求中的任一项援引35U.S.C第
112章第六(6)段(因为其在本申请的申请日已存在),除非字词“用
于……装置”或“用于……步骤”明确地用在具体权利要求中;并且
(b)并不旨在由本说明书中的任何陈述以未在所附权利要求书中另行反
映出的任何方式限制本公开。