总线-装置-功能地址空间的推测性枚举的制作方法

文档序号:14958938发布日期:2018-07-18 00:08阅读:116来源:国知局

此申请要求2015年12月26日提交的题为“总线-装置-功能地址空间的推测性枚举(speculativeenumerationofbus-device-functionaddressspace)”的美国临时专利申请序列号62/387,492和2016年3月24日提交的题为“总线-装置-功能地址空间的推测性枚举”的美国非临时专利申请序列号15/079,922,它们通过参考全部合并于本文中。

此公开涉及计算系统,并且尤其(而非排他地)涉及地址空间映射。



背景技术:

外围组件互连(pci)配置空间由采用pci、pci-x和pci高速(pcie)的系统利用以执行基于pci的装置的配置任务。基于pci的装置具有称为配置空间的用于装置配置寄存器的地址空间,并且pci高速引入了用于装置的扩展配置空间。配置空间寄存器通常由主机处理器映射到存储器映射的输入/输出位置。装置驱动、操作系统和诊断软件访问配置空间,并且能向配置空间寄存器读和写信息。

pci局部总线所具有的优于其它i/o架构的其中一个改进是其配置机制。除了正常的存储器映射和i/o端口空间,总线上的每个装置功能都具有配置空间,其是256字节长,通过知道对于装置的8位pci总线、5位装置和3位功能号(通常称为bdf或b/d/f,根据总线/装置/功能缩写的)而可寻址。这允许高达256个总线,每个总线具有高达32个装置,每个装置支持8个功能。单个pci扩充卡能作为装置进行响应,并且至少能实现功能号0。配置空间的前64字节被标准化;剩余字节是可用的规范定义的扩展和/或出于供应商定义的目的。

为了允许在不与现有使用冲突的情况下使配置空间的更多部分标准化,能存在有在外围组件接口配置空间的前192字节内定义的能力列表。每个能力具有描述它有哪种能力的一个字节以及指出下一能力的一个字节。附加字节数取决于能力id。如果正在使用能力,则设置状况寄存器中的位,并且提供指向能力链表中的第一个的指针。已经给pcie的先前版本提供了类似特征,诸如pcie扩展能力结构。

附图说明

图1图示了包含互连架构的计算系统的实施例。

图2图示了包含分层堆栈的互连架构的实施例。

图3图示了在互连架构内接收或生成的分组或请求的实施例。

图4图示了对于互连架构的传送器和接收器对的实施例。

图5图示了系统总线的表示。

图6图示了系统中的总线标识符的示例枚举的表示。

图7图示了映射门户(portal)桥(mpb)的实施例。

图8图示了对应地址映射以及系统中的总线标识符的枚举的表示。

图9图示了至少部分示例能力寄存器的表示。

图10a-10c是图示用于枚举系统内装置的示例技术的简化框图。

图11是图示用于枚举系统内装置的示例技术的简化流程图。

图12图示了对于包含多核处理器的计算系统的框图的实施例。

图13图示了对于计算系统的框图的另一实施例。

具体实施方式

在如下描述中,阐述了众多特定细节,诸如特定类型的处理器和系统配置、特定硬件结构、特定架构和微架构细节、特定寄存器配置、特定指令类型、特定系统组件、特定测量/高度、特定处理器流水线阶段和操作等示例,以便提供本发明的透彻理解。然而,本领域技术人员将明白,不需要采用这些特定细节来实践本发明。在其它实例中,未详细描述众所周知的组件和方法,诸如特定和备选处理器架构、用于所描述算法的特定逻辑电路/代码、特定固件代码、特定互连操作、特定逻辑配置、特定制造技术和材料、特定编译器实现、用代码的算法的特定表述、特定掉电和门控技术/逻辑以及计算机系统的其它特定操作细节,以便避免不必要地使本发明模糊不清。

尽管可参考特定集成电路中(诸如在计算平台或微处理器中)的能量节约和能量高效来描述如下实施例,但其它实施例可应用于其它类型的集成电路和逻辑器件。本文描述的实施例的类似技术和教导可应用于其它类型的电路或半导体器件,其也可受益于更好的能量高效和能量节约。例如,所公开的实施例不限于台式计算机系统或ultrabooks™。并且,还可用在其它装置(诸如手持装置、平板电脑、其它薄笔记本、片上系统(soc)装置和嵌入式应用)中。手持装置的一些示例包含蜂窝电话、因特网协议装置、数字相机、个人数字助理(pda)和手持pc。嵌入式应用通常包含微控制器、数字信号处理器(dsp)、片上系统、网络计算机(netpc)、机顶盒、网络集线器、广域网(wan)交换机或可执行下面教导的功能和操作的任何其它系统。而且,本文描述的设备、方法和系统不限于物理计算装置,而且还可涉及用于能量节约和高效的软件优化。

随着计算系统进步,本文的组件变得更复杂了。因此,在组件之间通信和耦合的互连架构在复杂性上也正在增加,以确保针对最优组件操作而满足带宽要求。更进一步,不同市场分部要求互连架构的不同方面,以适合市场的需要。例如,服务器要求更高性能,而移动生态系统有时能够为了能量节约而牺牲总体性能。然而,大多数组构的突出目的是为最大能量节约提供最高可能的性能。下面,论述若干互连,其将潜在地受益于本文描述的发明的方面。

一个互连组构架构包含外围组件互连(pci)高速(pcie)架构。pcie的首要目标是使来自不同供应商的组件和装置能够在开放架构中互操作,其跨越多个市场分部;客户端(台式和移动)、服务器(标准和企业)以及嵌入式和通信装置。pci高速是为各种各样将来计算和通信平台定义的高性能、通用i/o互连。一些pci属性(诸如其使用模型、加载-存储架构和软件接口)已经通过其修正来维持,而先前的并行总线实现已经由高度可缩放、全串行接口替代。pci高速的较近版本利用点对点互连、基于交换机的技术和分包化协议中的进步来递送新级别的性能和特征。功率管理、服务质量(qos)、热插拔/热调换支持、数据完整性和错误处置属于由pci高速支持的其中一些先进特征当中。

参考图1,图示了由互连一组组件的点对点链路构成的组构的实施例。系统100包含耦合到控制器集线器115的系统存储器110和处理器105。处理器105包含任何处理元件,诸如微处理器、主机处理器、嵌入式处理器、协处理器或者其它处理器。处理器105通过前端总线(fsb)106耦合到控制器集线器115。在一个实施例中,fsb106是如下面所描述的串行点对点互连。在另一实施例中,链路106包含符合不同互连标准的串行、差分互连架构。

系统存储器110包含任何存储器装置,诸如随机存取存储器(ram)、非易失性(nv)存储器或者通过系统100中的装置可存取的其它存储器。系统存储器110通过存储器接口116耦合到控制器集线器115。存储器接口的示例包含双数据速率(ddr)存储器接口、双通道ddr存储器接口以及动态ram(dram)存储器接口。

在一个实施例中,控制器集线器115是外围组件互连高速(pcie或者pcie)互连层级中的根集线器、根复合体或者根控制器。控制器集线器115的示例包含芯片集、存储器控制器集线器(mch)、北桥、互连控制器集线器(ich)、南桥以及根控制器/集线器。术语“芯片集”经常指的是两个物理上分开的控制器集线器,即,耦合到互连控制器集线器(ich)的存储器控制器集线器(mch)。要指出,当前系统经常包含与处理器105集成的mch,而控制器115要以与下面所描述的相似方式与i/o装置通信。在一些实施例中,对等路由可选地通过根复合体115而被支持。

在此,控制器集线器115通过串行链路119耦合到交换机/桥120。输入/输出模块117和121(其也可被称为接口/端口117和121)包含/实现提供控制器集线器115与交换机120之间通信的分层协议堆栈。在一个实施例中,多个装置能够耦合到交换机120。

交换机/桥120将分组/消息在上游(即,向上朝向根复合体的层级)从装置125路由到控制器集线器115,并且在下游(即,向下远离根控制器方向的层级)从处理器105或系统存储器110路由到装置125。在一个实施例中,交换机120被称为多个虚拟pci到pci桥装置的逻辑组装。装置125包含要耦合到电子系统的任何内部或外部装置或组件,诸如i/o装置、网络接口控制器(nic)、插入卡、音频处理器、网络处理器、硬驱、存储装置、cd/dvdrom、监控器、打印机、鼠标、键盘、路由器、便携式存储装置、火线装置、通用串行总线(usb)装置、扫描仪以及其它输入/输出装置。在pcie行话中,诸如装置经常被称为端点。尽管未明确示出,但装置125可包含支持遗留或其它版本pci装置的pcie到pci/pci-x桥。pcie中的端点装置经常被归类为遗留、pcie或根复合体集成端点。

图形加速器130也通过串行链路132耦合到控制器集线器115。在一个实施例中,图形加速器130耦合到mch,mch耦合到ich。交换机120,以及相应地i/o装置125然后耦合到ich。i/o模块131和118也实现在图形加速器130与控制器集线器115之间通信的分层协议堆栈。类似于上面的mch论述,图形控制器或图形加速器130本身可被集成在处理器105中。

转到图2,图示了分层协议堆栈的实施例。分层协议堆栈200包含任何形式的分层通信堆栈,诸如快速路径互连(qpi)堆栈、pcie堆栈、下一代高性能计算互连堆栈或者其它分层堆栈。尽管紧接下面参考图1-4的论述与pcie堆栈相关,但相同概念可应用于其它互连堆栈。在一个实施例中,协议堆栈200是包含事务层205、链路层210和物理层220的pcie协议堆栈。接口(诸如图1中的接口117、118、121、122、126和131)可被表示为通信协议堆栈200。作为通信协议堆栈的表示也可被称为实现/包含协议堆栈的模块或接口。

pci高速使用分组在组件之间传递信息。分组被形成在事务层205和数据链路层210中,以将信息从传送组件运载到接收组件。当传送的分组流过其它层时,它们用对于在那些层处置分组所必需的附加信息进行扩展。在接收侧进行相反过程,并且分组从它们的物理层220表示变换成数据链路层210表示,并且最后(对于事务层分组)变换成能由接收装置的事务层205处理的形式。

事务层

在一个实施例中,事务层205将提供装置的处理核与互连架构(诸如数据链路层210与物理层220)之间的接口。在这方面,事务层205的首要责任是分组的组装和拆解(即,事务层分组或tlp)。事务层205通常管理对于tlp的信用基础流控制。pcie实现分离事务,即,带有按时间分开的请求和响应的事务,其允许链路携带其它业务,同时目标装置搜集针对响应的数据。

此外,pcie利用基于信用的流控制。在此方案中,装置针对事务层205中的每个接收缓冲器都通告初始信用量。在链路相对端的外部装置(诸如图1中的控制器集线器115),对由每个tlp消耗的信用的数量进行计数。如果事务不超过信用极限,则可传送事务。在接收到响应时,恢复信用量。信用方案的优点是,信用返回的等待时间不影响性能(倘若没遇到信用极限)。

在一个实施例中,四个事务地址空间包含配置地址空间、存储器地址空间、输入/输出地址空间和消息地址空间。存储器空间事务包含其中读请求和写请求中的一个或多个,以来往于存储器映射的位置转移数据。在一个实施例中,存储器空间事务能够使用两个不同地址格式,例如短地址格式(诸如32位地址)或长地址格式(诸如64位地址)。配置空间事务用于访问pcie装置的配置空间。到配置空间的事务包含读请求和写请求。消息事务被定义成支持pcie代理之间的带内通信。

因此,在一个实施例中,事务层205组装分组报头/有效载荷156。用于当前分组报头/有效载荷的格式可在pcie规范网站的pcie规范中找到。

快速参考图3,图示了pcie事务描述符的实施例。在一个实施例中,事务描述符300是用于运载事务信息的机制。在这方面,事务描述符300支持系统中的事务标识。其它潜在使用包含跟踪事务与信道的关联以及默认事务排序的修改。

事务描述符300包含全局标识符字段302、属性字段304和信道标识符字段306。在所图示的示例中,全局标识符字段302被描绘为包括局部事务标识符字段308和源标识符字段310。在一个实施例中,全局事务标识符302对于所有未解决请求都是唯一的。

根据一个实现,局部事务标识符字段308是由请求代理生成的字段,并且它对于要求针对该请求代理的完成的所有未解决请求都是唯一的。更进一步,在此示例中,源标识符310唯一标识pcie层级内的请求方代理。相应地,与源id310一起,局部事务标识符308字段提供层级域内的事务的全局标识。

属性字段304规定事务的特性和关系。在这方面,属性字段304潜在地用于提供允许修改事务的默认处置的附加信息。在一个实施例中,属性字段304包含优先级字段312、预留字段314、排序字段316和无探听字段318。在此,优先级子字段312可由发起方修改以向事务指配优先级。预留属性字段314被预留用于将来或供应商定义的使用。使用优先级或安全属性的可能使用模型可使用预留属性字段实现。

在此示例中,排序属性字段316用于提供运送可修改默认排序规则的排序类型的可选信息。根据一个示例实现,排序属性“0”标示要应用默认排序规则,其中排序属性“1”标示不严格的排序,其中写能在相同方向传递写,并且读完成能在相同方向传递写。利用探听属性字段318以确定事务是否被探听。如所示,信道id字段306标识事务与其相关联的信道。

链路层

链路层210(也称为数据链路层210)充当事务层205与物理层220之间的中间阶段。在一个实施例中,数据链路层210的责任是提供用于在链路两个组件之间互换事务层分组(tlp)的可靠机制。数据链路层210的一侧接受由事务层205组装的tlp,应用分组序列标识符211(即标识号或分组号)计算并应用检错码(即crc212),并将修改的tlp提交到物理层220以便跨物理到外部装置的传送。

物理层

在一个实施例中,物理层220包含逻辑子块221和电气子块222以向外部装置物理传送分组。在此,逻辑子块221负责物理层221的“数字”功能。在这方面,逻辑子块包含传送部分,其用于准备传出信息以便由物理子块222传送;以及接收部分,其用于标识并准备接收的信息,之后将它传递到链路层210。

物理块222包含传送器和接收器。逻辑子块221给传送器提供符号,传送器将符号串行化并传送到外部装置上。从外部装置给接收器提供串行化的符号,并接收器将接收的信号变换成位流。位流被去串行化并提供给逻辑子块221。在一个实施例中,采用8b/10b传送代码,在其中传送/接收十位符号。在此,使用特殊符号来用帧223使分组成帧。此外,在一个示例中,接收器还提供从传入串行流恢复的符号时钟。

如上所述,尽管事务层205、链路层210和物理层220参考pcie协议堆栈的特定实施例论述,但分层协议堆栈不限于此。实际上,可包含/实现任何分层协议。作为示例,表示为分层协议的端口/接口包含:(1)第一层,组装分组,即,事务层;第二层,使分组序列化,即,链路层;以及第三层,传送分组,即,物理层。作为特定示例,利用公共标准接口(csi)分层协议。

接下来参考图4,图示了pcie串行点对点组构的实施例。尽管图示了pcie串行点对点链路的实施例,但串行点对点链路不限于此,因为它包含用于传送串行数据的任何传送路径。在所示的实施例中,基本pcie链路包含两个低电压差分驱动的信号对:传送对406/411和接收对412/407。相应地,装置405包含将数据传送到装置410的传送逻辑406和从装置410接收数据的接收逻辑407。换言之,两个传送路径(即,路径416和417)和两个接收路径(即,路径418和419)被包含在pcie链路中。

传送路径指的是用于传送数据的任何路径,诸如传送线、铜线、光学线、无线通信信道、红外通信链路或其它通信路径。两个装置(诸如装置405和装置410)之间的连接被称为链路,诸如链路415。链路可支持一条路线——每条路线表示一组差分信号对(一对用于传送,一对用于接收)。为了缩放带宽,链路可聚合由xn标示的多条路线,其中n是任何支持的链路带宽,诸如1、2、4、8、12、16、32、64或更宽。

差分对指的是传送差分信号的两个传送路径(诸如线路416和417)。作为示例,当线路416从低电压等级切换到高电压等级(即,上升沿)时,线路417从高逻辑等级驱动到低逻辑等级(即,下降沿)。差分信号潜在地演示了更好的电气特性,诸如更好的信号完整性,即,交叉耦合、电压过冲(overshoot)/下冲(undershoot)、振铃(ringing)等。这考虑了更好的定时窗口,其实现了更快的传送频率。

新的且正在生长的使用模型(诸如基于pcie的存储阵列和thunderbolt)正在驱动pcie层级深度和宽度的显著增加。pci高速(pcie)架构基于pci,其定义系统固件和/或软件在其中发现功能并启用/禁用/控制它们的“配置空间”。在此空间内的寻址基于16位地址(通常称为“bdf”或者总线-装置-功能号),由8位总线号、5位装置号和3位功能号构成。

pci允许系统提供多个独立的bdf空间,它们被称为“分段”。每个分段可具有某些资源要求,诸如用于生成pci/pcie配置请求的机制,包含在pcie规范中定义的增强配置接入机制(ecam)。此外,输入/输出(i/o)存储器管理单元(iommu)(诸如intelvt-d)能使用bdf空间作为索引,但可能不被配置成直接领会(directlycomprehend)分段。相应地,在一些实例中,对于在系统中定义的每个分段必须复制单独的ecam和iommu。图5图示了包含多个分段(例如505a-c)的系统的示例。比如,在此示例中,为连接到根复合体525的三个交换机510、515、520中的每个交换机定义了分段。能在根复合体525处实现单独的iommu和ecam,以促进每个分段(例如505a-c)。另外,在此示例中,各种各样的交换机(例如530a-r)、各种各样的端点(ep)以及其它装置被连接到每个分段中的各种总线。在一些情况下,分段的配置空间可为潜在的热插拔事件预留多个总线地址,限制在每个分段内可用的总线地址的总数。更进一步说,其中一个或多个分段中的总线号的分配可根据本身很少关注关于密集占据地址并使可用总线地址空间的使用紧凑的算法。这在一些实例中能导致浪费的配置地址(即bdf)空间。

传统pcie系统配置成采用当应用于现代和新兴的用例时具体地倾向于使bdf空间和总线号的使用低效的方式来指配地址空间。虽然实际上相对少的实现可涉及消耗所有唯一bdf值(例如在pcie下定义的64k)的单个系统,但深度层级(诸如例如在pcie交换机的深度层级中发生的那些)可非常快速地用尽bdf空间内的可用总线号。此外,在支持热插拔的应用中,bdf空间的大部分通常可被预留用于将来的潜在使用(即,当将来装置被热插拔到系统时),从通过系统直接可使用的池中得到总线号的附加条带(swath)。虽然分段机制能应用于解决这个问题,但分段本身具有不良缩放,因为如上面所指出的,附加硬件资源(例如iommu)要被构建到cpu、平台控制器集线器(pch)、片上系统(soc)、根复合体等中以便支持每个分段。从而,使用分段以解决深度层级导致将系统缩放成满足最坏情况系统要求,这通常比对于大多数系统将需要的要更多,导致平台资源的显著浪费。另外,分段难以(并且在一些情况下实质上是不可能的)在系统的根复合体之外创建(除其它示例问题之外)。

在一些实现中,系统能被提供成使能够更有效地使用bdf空间,并解决上面的至少一些示例问题。除了其它示例优点之外,这能考虑到扩充pcie、thunderbolt、片上系统组构(例如,intel片上系统组构(iosf)及其它)以及到非常大的拓扑的其它互连,但无需要求根复合体中的专用资源,这将是在排他地依赖于分段或其它备选的解决方案中的情况。图6示出了图示包含端点(例如605、610)和交换机(例如620、625、630)通过形成交换机组构的层级的多个总线所连接到的根复合体615的示例系统的简化框图600。图6的示例进一步图示了根据示例pciebdf指配的总线号到系统内总线的示例指配。在此示例中,用接近最密集的可能总线号分配(如由圆形标记(例如650a-d等)所标明的),枚举(或指配)了具有直接连接到根复合体615的两个直接连接的装置605、610和两个基于交换机的层级(对应于交换机620、625)的系统。在深度层级中,单个bdf空间中的可用总线号能被快速消耗。另外,真实世界系统通常将总线号分配得远远不够高效,导致bdf空间的稀疏的(或“浪费的”)分配。

关于支持热添加/移除(诸如thunderbolt,并且在一些情况下是基于pcie的存储装置)的用例的另一问题是,bdf空间中的总线号指配被“重新平衡”以解决在运行系统中发生的硬件拓扑改变。然而,重新平衡对于系统软件进行可能非常困难,因为在典型情况下,所有pci功能然后都被迫进入静止状态(与重新平衡有关),以便允许bdf空间被系统重新枚举,之后是pci功能的重新启用。然而,这个过程可能是相当慢的,并且通常导致系统冻结,在最坏的情况下,对于其可能是非常长的时间段(例如,长到足以对运行应用是破坏性的,并且容易对最终用户可见)。还能提供改进系统以缩短应用修正的bdf空间所花的时间,使得能在毫秒的百分之几的一段时间或者更快内执行重新平衡过程,并且无需明确地使pci功能处于静止状态。

最后,用于支持多个根复合体的非常大的系统或具有(专有)机制的系统可被定义以使用分段。改进系统还能被应用在此类用例内,以提供具有最小改变(相对于使用单根系统将实现的)的装置管理。确切地说,改进系统能提供使用系统中的一个或多个装置的硬件(和/或软件)逻辑实现的映射门户桥(mpb),以提供bdf空间的多个场景(view)和重新映射表,以使“桥”(其是根或交换机端口的逻辑场景)能够在跨过桥的两个方向上将bdf空间的一个场景转化成另一场景,从而有效地创建虚拟分段。

映射门户桥(mpb)能被实现为在根集线器或交换机的一个或多个端口处提供的逻辑块(用硬件、固件和/或软件实现),以在一些实现中实现两个或更多定义的bdf空间(比如主要和次要bdf空间)之间的转化。mpb能在根端口和/或交换机端口中用一致的软件模型(例如由系统软件利用的)实现,并且能递归地在给定拓扑内实现,从而允许高度缩放性。另外,mpb不需要被捆绑到具体使用模型(例如,它备选地能被用于thunderbolt(tbt)和常规pcie用例任一或二者中)。此外,mpb实现能支持实现灵活性和工程价格/性能权衡。另外,能维持现有pcie系统软件堆栈中的一致性(除其它示例优点之外)。

mpb利用允许mpb在bdf主要空间与bdf次要空间之间映射跨mpb流过的所有pcie分组的映射机制。bdf主要空间指的是在桥的主要侧(即,更靠近主机cpu(例如在根复合体处)的一侧)上看到的配置地址空间的场景。bdf次要空间能指的是针对在桥的次要侧(例如,更靠近装置并且来自根复合体或cpu的下游的一侧)上的装置所管理和创建的配置地址空间的场景。在pcie中,用于装置配置的相同bdf指配也可用于标识分组源(并且有时是目的地)、报告错误,并且执行其它功能。

图7图示了表示mpb705的示例实现的框图700。mpb705能包含两个映射表的(全部或部分)本地拷贝和/或对其的指针,一个用于次要地址空间到主要地址空间映射(bdfsec-bdfpri),而另一个用于主要地址空间到次要地址空间映射(bdfpri-bdfsec)。在一个示例中,映射表能被存储在系统存储器710中,在此情况下,mpb705(以及系统软件)能从系统存储器读取表(在715)和/或维持每个映射表(即,bdfsec-bdfpri和bdfpri-bdfsec)至少一部分的本地拷贝(720,725)(例如以增强性能)。在又一些示例中,bdfsec-bdfpri和bdfpri-bdfsec映射表能被直接存储在mpb705中,而无需维持系统存储器710中的拷贝。mpb705能进一步执行和管理主要bdf空间与一个或多个bdfsec空间之间的转化。在多个bdfsec空间的情况下,能使用单个映射表,其包含不仅将bdfsec地址而且还将bdfsec空间的具体空间映射到bdfpri地址的列。在其它情况下,能为每个bdfsec空间维持单独映射表。mpb能用交换机、集线器或端口(诸如根复合体的端口)的硬件实现。mpb705还能包含启用/禁用映射功能性的控制逻辑730(例如,将mpb705选择性地配置为交换机或根复合体的各种端口上的选项(除其它示例之外))。

在一些实例中,mpb705能配置成灵活地操作为mpb705(利用主要/次要bdf空间映射机制)或常规桥(例如利用传统pciebdf寻址)(例如使用控制逻辑730)。当系统软件打算启用mpb705时,它能将mpb配置成提供主要(bdfpri)与次要(bdfsec)bdf地址之间的唯一的一对一映射。换言之,单个主要侧bdf能对应于单个次要侧bdf。除了其它示例优点之外,此约束能确保mpb不跟踪未解决请求,如此跟踪将对mpb增加显著成本。在一些实现中,在系统中能部署多个mpb。比如,能为每个bdfsec空间提供单独的mpb705。在此类情况下,能准许在这些多个不同mpb背后的bdfsec指配,以(并且有可能将)再使用相同bdf值(在它们的相应第二bdf空间中),假如这些被映射到bdfpri空间中的唯一值。

图8是示出通过使用实现bdfpri空间/bdfsec空间二分法的mpb修改的图6示例的简化框图。比如,图8示出了可如何在具有两个mpb(第一mpb用于实现虚拟分段(vseg)a(805a)而第二mpb用于实现vsegb(805b))的系统中指配bdfsec空间。在此示例中,根复合体625的总线号1和2(在806、808)能维持在bdfpri空间(810)中,并指配给两个直接连接的装置605、610。在此示例中,来自总线3-n的连接层级能通过bdfsec空间(对应于vsega(805a)和vsegb(805b))和一个或多个对应mpb进行处置。比如,能朝向bdfsec空间vsega(805a)枚举总线3-6,由此将虚拟分段提供给通过总线3-6连接到根复合体的装置和总线。第二虚拟分段能通过定义合并通过总线7-n连接到根复合体的装置和总线的第二bdfsec空间vsegb(805b)来提供。根据任何适合的方案(包含低效地分配这些地址的方案),每个bdfsec空间都能被分配相应第二空间内的bdf地址(以及总线编号)。实际上,不同bdfsec空间能基于连接到对应总线的端点或路由装置的类型而不同地分配地址。不像bdfsec空间,bdfpri空间(即,由根复合体享有的配置空间的场景)能被优化,以考虑并控制空间内总线地址的紧凑且有效的分配(例如,如在图6的示例中所图示的)。

vsega和vsegb的每个中的每个bdfsec地址能确切地映射到一个bdf地址,是bdfpri空间(例如根据映射815、820)。作为示例,vsega内的第一装置能被指配vsegabdfsec空间内的bdf"1:0:0",其被映射到主要bdf"4:0:0"(如在映射815中所示的)(除其它示例之外)。系统的其它bdfsec空间(例如vsegb)中的不同装置能指配与在其它bdfsec空间(例如vsega)中指配的相同的bdfsec值。比如,第二装置在vsegb内还能被指配bdf"1:0:0",但在vsegb的bdfsec内。然而,第二装置将被映射到系统的bdfpri内的不同bdf(即,bdf"7:0:1",如在映射820中所示的),诸如此类。

如上面所指出的,在一些实现中,bdfpri与bdfsec空间之间的映射能通过基于系统存储器中的映射表完成。不同分组类型可被不同地映射(即,在bdfsec与bdfpri空间之间传递)。比如,对于在两个方向上的请求,对应的请求方id能被重新映射(例如根据适当的映射表)。配置&id路由的消息请求能由id总线/装置/功能号字段路由。在两个方向上的完成能由请求方和完成方id路由(除其它示例之外)。

mpb的映射硬件能访问位于系统存储器中的映射表,在mpb中具有可选的高速缓存。在一些实现中,单个映射表能用于两个方向上的业务,其中mpb处理逻辑确定在正前(例如下游)和相反(例如上游)(例如通过反向查找操作)方向上的映射。在其它实现中,能更高效的是,每mpb提供两个单独的映射表,一个用于正前方向,而另一个用于相反方向。在一些实例中,这可能没有提供用于执行两个方向之一上的反向查找的mpb硬件那么昂贵。

mpb在主要侧(例如最靠近根复合体的端口)能负责将bdfpri空间的总线号的子集映射到对应的bdfsec空间。相应地,指配给mpb的bdfpri空间中的总线号的范围可被限制于由[次要总线号到从属总线号]指示的范围,因为在bdfpri空间中仅在该范围内的分组将被永远指向该相应mpb。从而,用于映射bdfsec:bdfpri的表可涉及大到足以覆盖总线号的次要到从属范围的转化表,但不一定更大。在一些实施例中,为了实现上的简单,能提供默认64k条目表。实际上,为了将bdfpri映射到bdfsec,能提供64k条目转化表以使完整bdf空间在次要侧上可用,但这在一些备选中能被约束成降低硬件/存储器要求。

映射表能由管理pcie(或实现这些特征的其它互连)中的数据通信的系统软件维持。比如,在利用两个单独上游和下游表的实现中,这两个表可由系统软件维持。系统软件能确保表之间的一致性,使得bdfx-bdfy-bdfx'的映射总是给出x=x'的结果(除其它示例考虑以外)。

在一些实现中,mpb能实现用于将至少部分映射表本地存储在mpb处的高速缓存。系统软件能假定,mpb高速缓冲转化基于映射表,并且能通过向硬件提供必要的高速缓存管理信息来支持高速缓存管理。可能期望的是,为系统软件提供确保mpb高速缓存仅在系统软件控制下更新的机制。另外,能定义诸如mpb存储器映射的i/o(mmio)空间中的特定寄存器的机制,以提供针对系统存储器中映射表的指针。寄存器还能用于高速缓存管理、用于启用/禁用高速缓存的系统软件、使mpb高速缓存无效等。备选地,在一些实现中,这些表能在mpb中直接实现,而无需维持系统存储器中的拷贝。在此情况下,系统软件根据需要直接在mpb处更新这些表。

mpb映射表机制的额外好处是,能执行系统软件以原子地(atomically)更新映射表,比如通过创建新映射表,并且然后“立即”使mpb高速缓存无效,并将mpb从旧表重定向到新表。这能通过定义控制寄存器机制来进行,使得当系统软件指示这么做时,要求mpb硬件对寄存器设置进行采样,并且然后继续以采样的设置操作,直到被指导重新采样。此重新采样能以从旧样本到新样本的转变原子地生效的这种方式而由mpb硬件执行。而且通过提供了对于系统软件暂时阻止业务通过mpb(例如,在mpb处“暂停”业务以允许对映射表的改变)的机制,变得更加具有吸引力的是,允许系统软件修改运行系统中的总线号指配(“重新平衡”),因为在映射表上切换所花的时间量能保持相当短。备选地,如果映射表直接维持在mpb中,则能采用诸如双缓冲的机制,双缓冲使mpb能够使用表的一个拷贝操作,同时备选集合由系统软件更新,并且然后在系统软件方向下,mpb转变采用更新的表操作(例如,同时本地表用更新版本替代)。

转到图9,示出了用于实现用于示例mpb的硬件/软件接口的寄存器字段和位的示例实施例的表示。确切地说,在此具体示例中,能针对mpb系统中的发现/管理定义pcie扩展能力。扩展能力能包含诸如下面的字段:未解决请求(or)字段,其反映任一方向上的非投递式(non-posted)(np)请求的mpb计数(尽管非投递式请求不会被明确或者单独跟踪);mpb启用(e)位,用于指示是否在支持mpb的桥处启用mpb功能性(其中当e位设置(0->1)时,将由mpb对地址寄存器采样);以及映射表更新触发器字段(tr)(除其它示例之外)。在一些情况下,能使用附加字段,连同用于生成在mpb背后的“探测”configrequest的视窗(window)机制(诸如状况位),因此当configwrite完成时系统软件能领会。在一些情况下,视窗机制一次可仅支持一个configrequest(例如没有流水线式请求)。在又一些示例中,能力结构能提供用于描述在mpb处维持的本地转化表的性质的值(例如,如果不是完整大小则用于指示表大小等)(除其它示例之外)。

在一些实现中,bdf主要/次要映射和mpb能结合分段一起使用。如上面所指出的,mpb能用于实现虚拟分段(vseg)以至少部分替代并减少系统设计中的分段数量。在其中将包含分段的情况下,或者当创建多根系统(例如,使用专有加载/存储组构)时,mpb能被扩展成支持不同分段之间以及层级中不支持分段的部分之间的映射。例如,在其中bdfpri被扩增成支持分段的系统中,这实际上变成了分段的bdfpri(sbdfpri)空间,因为分段充当“前缀”以增加可用的总线号数量。在此类系统中,可能使用诸如tlp前缀的机制来标识特定分段。然而,由于许多装置尚未支持分段标记机制,因此能使用具有扩展的mpb映射机制来支持将不支持分段标记的bdfsec空间映射到确实支持分段标记的sbdfpri空间中(除其它示例之外)。

在一些实现中,mpb能容纳探测。在此,“探测”能指的是读取功能的配置空间的第一数据字(dw),以视是否存在有效的供应商/装置id。然而,在探测期间使用存储器内表能涉及重复更新,如果探测在运行时间完成,这潜在地具有特定问题,由于可发生的映射表的重复更新引起的。为了避免这个,能提供通过用于探测的mpb生成配置请求的机制。此机制可能不预计用作正常配置生成路径,但可相反地被配置用于探测(并且一些实例也称为“失效保护(failsafe)”)。在一个示例中,该机制能包含扩展mpb能力中的视窗机制(例如,基于针对pci定义的cfc/cf8配置接入机制,扩展有对于4k配置空间的支持)。系统软件能使用这个机制来发现功能,例如通过探测。在发现到功能时,系统软件然后能更新映射表以提供对于功能的转化,并且通过mpb的基于表的转化机制继续进行另外的枚举/配置(除其它示例特征之外)。

系统软件能根据任何适合的或者习惯性算法枚举bdfsec空间。在一些情况下,在最初能探测次要侧上的特定bdf之前,枚举器将mpb配置成指配“密钥”在bdfpri中。这个密钥能用于生成配置请求,并将它们重新映射到该特定bdf。枚举器在此初始枚举期间必须“理解”bdfpri:bdfsec映射,并且能使用bdf将服务提供给所有模型以在系统操作期间执行此映射。在一个示例中,系统软件能使用算法来枚举映射门户桥(mpb)下的pci装置。

通过传统pci枚举算法的资源分配的可缩放限制在对于基于pci的ssd装置(例如基于nvme)的使用情形下以及在thunderbolt层级中是清楚明显的,其中这些限制不允许配置大/深层级。这产生了错误,其中用户不能够使用此类配置下的装置。例如,可能存在其中多于256个基于pci的固态驱动器需要连接到单个系统的情形,或者可能存在热插拔装置,诸如用于thunderbolt的装置,其中针对树的给定部分预留的资源不足以配置热插拔的thunderbolt装置。在这些情形下,传统pci枚举算法由于诸如在所有具有热插拔能力的端口之间相等地划分和分配可用总线号的分配机制而非常快速地耗尽了稀有的bdf资源。如早前所论述的,使用重新平衡以重新分布资源的传统方法不适合用于许多用例。在此公开中提出的新算法结合mpb一起解决了这些限制,从而在此类情形下显著改进资源配置和可缩放性。

传统资源枚举算法可能不能够枚举用于在映射门户桥(mpb)下存在的装置的地址(例如bdf),因为传统枚举算法不具有对如何恰当地在次要与主要bdf空间之间映射这些装置的可见性。传统上,pci装置由系统软件采用从bdf[0,0,0]开始到bdf[255,31,7]的总线-装置-功能(bdf)号扫描pci总线来枚举。在传统枚举技术中,对于可潜在地对应于pci功能的每个bdf,系统软件生成配置读事务以读取该具体功能的供应商和装置id。来自配置读的有效供应商和装置id能指示在该总线-装置-功能(bdf)处存在的功能。能要求每个pci装置都实现功能0。因为此,如果装置的功能0未实现,则系统软件可具有跳过装置的功能号的自由。这个传统枚举算法由于总线、装置和功能号的潜在重新映射而对在映射门户桥(mpb)下存在的装置不起作用。相应地,能提供增强枚举算法,其由系统软件可使用于确定mpb的存在,并枚举在mpb下存在的装置。

如上面所指出的,由总线号(0-255)、装置号(0-31)和功能号(0-7)构成的bdf三元组可标识pci子系统中的每个逻辑功能。bdf是唯一标识pci系统内的每个逻辑功能的地址的形式。pci系统或者“子系统”(例如包含非pci子系统的更宽系统的子系统)在分段内能具有256个总线号。pci子系统中的每个总线能具有32个装置,并且每个装置能具有8个功能。传统上,为了枚举这些装置,系统软件能通过这些总线、装置和功能号扫描。能通过选择特定bdf并读取供应商/装置id来执行枚举,如上面所论述的。基于供应商/装置id读取的结果,系统软件能指出结果,并基于特定装置/功能的要求以及为具体系统建立的策略来执行附加配置空间任务。对于每个bdf组合,系统软件生成配置读事务以读取该功能的供应商和装置id。来自这个配置读事务的有效响应指示在该bdf处存在的功能。如果未接收到有效响应,则系统软件能对此做记录,并且此bdf可能未被使用(除非添加了装置,并且在随后时间利用此bdf(例如热添加))。

pci协议使用视窗机制将事务从桥的主要侧转发到桥的次要侧。由于这个视窗机制,用于枚举装置的传统软件算法不得不为具有热插拔能力的所有桥分配足够的总线号,期望更多层级附连到具有热插拔能力的桥。这暴露了稀有bdf资源的可缩放性的问题。能利用次要bdf空间实现bdf空间的部分的预分配,而无需消耗主要bdf空间中的资源(该空间由根复合体原生地参考和使用),直到当实际需要资源的这种时候(在此时,到bdf主要空间中的对应映射能由系统软件建立)。

通过在每个层级中从bdf[0,0,0]开始创建新总线、装置和功能层级,映射门户桥(mpb)解决了静态(在引导期间)和动态(在热添加和热移除期间)总线、装置和功能资源分配的这个问题。创建和支持新bdf空间(或者配置空间的层级或场景)使在这些层级下的装置枚举复杂化。在一个示例中,系统软件能使用传统枚举方法枚举拥有mpb能力的pci桥(例如,因为任何其它传统装置都将被枚举,并且在由根复合体利用的相同bdf空间内)。然而,在一些实例中,如果随后(例如由系统软件)启用mpb能力,则由系统软件为了扫描在具有mpb能力的桥下的装置所生成的bdf号可能对于在映射门户桥(mpb)下的装置无效,并且可能需要被重新枚举(包含构建对应映射表)。实际上,当mpb能力使用映射表将主要侧(在mpb上方的层级)的bdf场景映射到次要侧(在mpb下方的层级)的bdf场景时,在一些情况下,此映射表中的条目将变得无效,比如在系统重置时,直到由软件初始化为止。映射表中的每个条目能够是有效或无效,并且仅由系统软件明确初始化的那些条目可被标记为“有效”映射。因为此,主要侧bdf号可能未正确地映射到次要侧bdf号。相应地,能提供增强枚举算法以填充这个映射表,同时还有助于枚举在mpb下的装置。

在一个实现中,用于枚举在映射门户桥(mpb)下的pci装置的增强算法能支持主要与次要bdf空间之间的映射的推测性生成。在此上下文中,映射可以是推测性的,因为可能尚未找到在mpb下方的系统中实际存在的装置/功能,但系统尽管如此仍将mpb配置成提供在枚举过程中的以后状态可找到的装置/功能的映射。如果实际上使用这些映射,则通常将保持它们,而未使用的那些有时可能被系统“再循环”,例如,在交换机的一个端口下方映射的bdf可能被移位以对交换机的另一端口可用(如果硬件被热添加在需要比最初所分配的更多的bdf的该第二端口下方)。映射门户桥(mpb)逻辑能创建从bdf[0,0,0]开始的总线-装置-功能号的新的(例如次要)层级。这通过创建映射表使得有可能,映射表将主要侧bdf(在mpb上方的层级)映射到次要侧bdf(在mpb下方的层级)。该算法使用推测性方法创建映射门户桥的bdf映射表中的映射。一旦创建了这些映射,算法使用传统pci枚举算法来枚举在映射门户桥(mpb)下的pci装置。

在一个示例中,增强算法能构建在传统枚举算法的原则上,从而允许装置以与传统上进行的方式相同的方式在mpb下方枚举,并且在其它端口处不采用次要bdf空间(例如,生成配置事务以从配置空间读取供应商和装置标识符,同时执行在mpb下方的bdf空间的树搜索),使它向后兼容。如上面所提到的,增强算法能允许有效地填充映射表,其中使用最小数量的映射表条目来支持在mpb下方的给定大小的层级,同时优化/最大化主要侧上的bdf使用。该算法使用简单数据结构,使其在系统软件中的实现直接了当并且简单。

在一个示例实现中,诸如在图10a-10c的简化框图1000a-c中图示的,用于枚举次要bdf空间内的装置的增强算法能利用数据结构,作为示例包含:

·全局总线号池1005(位向量0-255)--用于维持mpb的主要侧上的总线号分配历史。

·枚举队列1010--用于保持次要侧总线号(例如,基于宽度优先搜索算法)。

作为一个说明性示例,系统软件可开始使用传统算法来枚举连接到根复合体615的端口的pci装置。如果系统软件检测到具有mpb能力的类型1装置(例如pci桥),并且如果系统软件打算启用mpb能力,则系统软件能转变成使用增强枚举算法来处置在mpb下的层级的装置。枚举队列1010用于记录接下来需要被扫描的次要侧上的哪个总线号。这能包含系统软件首先启用检测的类型1装置上的mpb能力。另外,系统软件能创建空映射表(例如,存储在系统存储器或mpb端口的存储器中)。由于映射表(例如1015)以空白开始,因此传统枚举算法对在mpb桥下方的装置(例如630)将不会起作用,因为没有配置请求将从mpb的主要侧流到次要侧,除非在将bdfpri空间中的目标bdf映射到bdfsec空间的mpb中存在有效映射。

在一个示例中,在映射门户桥下方的次要侧层级的bdf空间(或者次要侧层级空间内的配置空间的场景)将总是从总线号0开始。在此类实现中,增强算法能通过使总线号0入队枚举队列1010中(如图10b中所示)开始以反映次要侧层级空间内的总线号0的使用。增强算法能从枚举队列出队,以指示接下来将被扫描的次要侧上的总线号。为了进行扫描,将在主要侧上的下一可用总线号与次要侧上的出队的总线号之间进行推测性映射。相应地,对于从枚举队列出队的每个总线号,该算法从全局总线号池中得到下一可用总线号。然后,它在来自全局总线号池的下一可用总线号与(可能多个)出队的次要侧总线号之间创建推测性映射,假定在mpb桥下方发现了装置(例如,如图10c的映射表1015中所示)。

对于每个推测性映射,可在这个推测性映射下为所有装置和功能号生成配置读事务,以将主要bdf转换成次要bdf,并使用传统枚举算法读取装置和供应商id。同样,配置读的完成能涉及使用该映射将bdf从bdfsec转化回bdfpri。在此期间,如果发现类型1装置,则为它分配次要和从属总线号,并且次要总线号入队枚举队列1010中。并且,如果找到类型0装置,则为它分配所需的资源。

为了图示一个示例,如下伪代码表示增强算法的一个示例实现:

/*主要侧总线号。大小=1字节。*/

pribusnum=0;

/*次要侧总线号。大小=1字节。将这个设置成0,指示次要侧上的第一总线号=0。*/

secbusnum=0;

/*枚举队列*/

queueenumqueue;

/*全局主要侧总线号池。*/

bitvectorgpribusnumpool;

/*入队次要侧上的第一总线号。*/

enqueue(enumqueue,secbusnum);

/*循环直到枚举队列为空。*/

while(!isempty(enumqueue))

{

  /*通过出队枚举队列来获得次要总线号*/

    secbusnum=dequeue(enumqueue);

  /*从针对主要总线号的全局总线号池获得下一可用总线号*/

    pribusnum=getnextavailablebusnumberfromgpribusnumpool.

  /*在pribus、pridevfunc与secbus和secdevfunc之间创建推测性映射。*/

    createspeculativemapping(pribusnum,secbusnum);

  foreachprimarydev,funcnumber

  {

    通过生成读配置事务以读取供应商和装置id来执行传统枚举。

      if(typeldevicefound)

      {

      分配次要和从属总线号。

      enqueue(enumqueue,allocatedsecondarybusnumber);

    }

    else

    {

      分配需要的资源。

    }

  }

}

在一些实现中,系统软件能采用“无关”位来减少映射表中的条目数量。比如,如果在mpb下方分配有一定范围的bdf,而不是单独映射每个bdf,则能构建仅应用于其中一些位的映射,隐式地使非映射位通过未修改的mpb。在此类实现中,系统软件能针对落在“无关”位掩蔽(mask)外侧的每个总线-装置-功能号组合创建推测性映射。对于每个推测性映射,系统软件然后针对落在“无关”掩蔽下的所有总线-装置-功能号组合使用传统枚举算法。

例如,在一个实现中,“无关”位可等于4。在此特定情况下,系统软件能针对每个映射枚举两个装置号(各具有8个功能)。如果“无关”位被耗尽,则创建新映射。如果在之前建立的推测性映射下未找到装置,则能采纳更严谨实现来再使用映射条目。更进一步,次要侧上的多个总线号能被映射在主要侧上的相同总线号下。这些技术能用于使主要侧上的bdf使用最大化,同时保持映射表简明。

转到图11,示出了图示用于枚举系统内装置的示例技术的简化流程图1100。在根复合体的第一端口处能检测到1105第一装置。第一装置可以是第一层级的一部分。第一装置能根据配置空间的第一或主要场景枚举(或“指配”)地址1110(包含连接到第一端口的层级中的其它装置)。第二装置能被检测1115为经由映射门户桥连接到根复合体的第二端口。映射门户桥根据配置空间的次要场景能支持连接在映射门户桥下的第二层级装置的寻址。响应于检测到映射门户桥连接,能生成1120映射表以将次要空间中的地址映射到主要空间的地址。然后能使用映射表指配1125第二层级装置的地址(例如,其中当执行地址枚举的配置任务时,根复合体和/或系统软件在主要空间地址与次要空间地址之间转化)。

要指出,上面描述的设备、方法和系统可实现在上面所提到的任何电子装置或系统中。作为特定图示,下面的附图提供了用于利用本文所描述的本发明的示范性系统。当更详细描述下面的系统时,从上面的论述中公开、描述和重访了若干不同互连。并且如所容易明白的,上面描述的进步可应用于那些互连、组构或架构中的任一个。

参考图12,描绘了包含多核处理器的计算系统的框图的实施例。处理器1200包含任何处理器或处理装置,诸如微处理器、嵌入式处理器、数字信号处理器(dsp)、网络处理器、手持处理器、应用处理器、协处理器、片上系统(soc)或执行代码的其它装置。在一个实施例中,处理器1200包含至少两个核——核1201和核1202,它们可包含不对称核或对称核(所图示的实施例)。然而,处理器1200可包含任何数量的处理元件,它们可以是对称的或不对称的。

在一个实施例中,处理元件指的是支持软件线程的硬件或逻辑。硬件处理元件的示例包含:线程单元、线程槽、线程、处理单元、上下文、上下文单元、逻辑处理器、硬件线程、核和/或任何其它元件,其能够保存处理器的状态,诸如执行状态或架构状态。换言之,处理元件在一个实施例中指的是能够与代码(诸如软件线程、操作系统、应用或其它代码)独立关联的任何硬件。物理处理器(或处理器套接口)通常指的是集成电路,其潜在地包含任何数量的其它处理元件,诸如核或硬件线程。

核经常指的是位于集成电路上能够维持独立架构状态的逻辑,其中每个独立维持的架构状态都与至少一些专用执行资源关联。与核相比,硬件线程通常指的是位于集成电路上能够维持独立架构状态的任何逻辑,其中独立维持的架构状态共享对执行资源的访问。如可看到的,当某些资源被共享并且其它资源专用于架构状态时,核与硬件线程的命名之间的线路交叠。不过通常,核和硬件线程被操作系统视为单独逻辑处理器,其中操作系统能够在每个逻辑处理器上单独调度操作。

如图12所图示的物理处理器1200包含两个核——核1201和1202。在此,核1201和1202被视为对称核,即,具有相同配置、功能单元和/或逻辑的核。在另一实施例中,核1201包含无序处理器核,而核1202包含有序处理器核。然而,核1201和1202可单独选自任何类型核,诸如原生核、软件管理核、适合于执行原生指令集架构(isa)的核、适合于执行转化的指令集架构(isa)的核、协同设计的核或其它已知核。在异构核环境(即不对称核)中,可利用某个形式的转化,诸如二进制转化,在一个核或两个核上调度或执行代码。然而为了推进论述,下面更详细描述在核1201中图示的功能单元,因为核1202中的单元在描绘的实施例中以类似方式操作。

如所描绘的,核1201包含两个硬件线程1201a和1201b,它们可被称为硬件线程槽1201a和1201b。因此,软件实体(诸如操作系统)在一个实施例中潜在地将处理器1200视为四个单独处理器,即,能够同时执行四个软件线程的四个逻辑处理器或处理元件。如上面所提及的,第一线程与架构状态寄存器1201a关联,第二线程与架构状态寄存器1201b关联,第三线程与架构状态寄存器1202a关联,并且第四线程与架构状态寄存器1202b关联。在此,每个架构状态寄存器(1201a、1201b、1202a和1202b)可被称为处理元件、线程槽或线程单元,如上面所描述的。如所图示的,在架构状态寄存器1201b中复制架构状态寄存器1201a,因此各个架构状态/上下文能够被存储用于逻辑处理器1201a和逻辑处理器1201b。在核1201中,对于线程1201a和1201b,也可复制其它较小资源,诸如分配器和重命名块1230中的重命名逻辑和指令指针。可通过分区共享一些资源,诸如重新排序器/引退单元1235中的重新排序缓冲器、itlb1220、加载/存储缓冲器和队列。其它资源,诸如通用内部寄存器、页表基础寄存器、低级数据高速缓存和数据tlb1215、执行单元1240和部分无序单元1235,潜在地完全共享。

处理器1200经常包含其它资源,它们可被完全共享、通过分区共享或者由处理元件专用/专用于处理元件。在图12中,图示了具有处理器的说明性逻辑单元/资源的纯示范性处理器的实施例。要指出,处理器可包含或省略这些功能单元中的任何单元,以及包含未描绘的任何其它已知功能单元、逻辑或固件。如所图示的,核1201包含简化的代表性无序(ooo)处理器核。但是在不同实施例中可利用有序处理器。ooo核包含预测要执行/采取的分支的分支目标缓冲器1220以及存储用于指令的地址转化条目的指令转化缓冲器(i-tlb)1220。

核1201进一步包含耦合到提取单元1220以解码提取元素的解码模块1225。提取逻辑在一个实施例中包含分别与线程槽1201a、1201b关联的各个定序器。通常,核1201与第一isa关联,第一isa定义/规定在处理器1200上可执行的指令。是第一isa一部分的机器码指令经常包含一部分指令(称为操作码),其参考/规定要执行的指令或操作。解码逻辑1225包含从它们的操作码中识别这些指令并在管线中传递解码指令以便如第一isa所定义的进行处理的电路。例如,如下面更详细描述的,解码器1225在一个实施例中包含设计成或适合于识别特定指令诸如事务性指令的逻辑。作为解码器1225识别的结果,架构或核1201采取特定的预先定义的动作执行与适当指令关联的任务。重要的是要指出,本文描述的任务、块、操作和方法中的任一个都可响应于单个或多个指令而执行;其中一些可以是新指令或老指令。要指出,解码器1226在一个实施例中识别相同isa(或者其子集)。备选地,在异构核环境中,解码器1226识别第二isa(或者第一isa子集或者截然不同的isa)。

在一个示例中,分配器和重命名块1230包含预留资源的分配器,诸如存储指令处理结果的寄存器文件。然而,线程1201a和1201b潜在地能够无序执行,其中分配器和重命名器块1230还预留其它资源,诸如重排序缓冲器,以跟踪指令结果。单元1230还可包含寄存器重命名器以将程序/指令参考寄存器重命名成处理器1200内部的其它寄存器。重排序/引退单元1235包含部件诸如上面提到的重排序缓冲器、负载缓冲器和存储缓冲器以支持无序执行以及后来的无序执行的指令的有序引退。

在一个实施例中,调度器和执行单元块1240包含调度器单元以调度执行单元上的指令/操作。例如,在具有可用浮点执行单元的执行单元端口上调度浮点指令。还包含与执行单元相关联的寄存器文件以存储信息指令处理结果。示范执行单元包含浮点执行单元、整数执行单元、跳执行单元、负载执行单元、存储执行单元和其它已知执行单元。

较低级数据高速缓存和数据转化缓冲器(d-tlb)1250耦合到执行单元1240。数据高速将缓存存储近来使用/操作的单元,诸如数据操作数,它们潜在地保持在存储器一致性状态。d-tlb将存储近来对物理地址转化的虚拟/线性。作为特定示例,处理器可包含页表结构以将物理存储器分成多个虚拟页。

在此,核1201和1202共享对较高级或更高级高速缓存(诸如与片上接口1210关联的第二级高速缓存)的访问。要指出,较高级或更高级指的是增大或从执行单元得到进一步方式的高速缓存级。在一个实施例中,较高级高速缓存是最后一级数据高速缓存——处理器1200上的存储器层级中的最后一个高速缓存——诸如第二级或第三级数据高速缓存。然而,较高级高速缓存不如此限制,因为它可与指令高速缓存关联或包含指令高速缓存。痕迹高速缓存——一种类型的指令高速缓存——相反可耦合在解码器1225后面以存储最近解码的痕迹。在此,指令潜在地指的是宏指令(即,由解码器识别的通用指令),其可被解码成若干微指令(微操作)。

在描绘的配置中,处理器1200还包含片上接口模块1210。历史上,在下面更详细描述的存储器控制器已经被包含在处理器1200外部的计算系统中。在此情形下,片上接口1210将与处理器1200外部的装置(诸如系统存储器1275、芯片集(经常包含连接到存储器1275的存储器控制器集线器以及连接外围装置的i/o控制器集线器)、存储器控制器集线器、北桥或其它集成电路)通信。并且在此情形下,总线1205可包含任何已知互连,诸如多点下传总线、点对点互连、串行互连、并行总线、一致(例如高速缓存一致)总线、分层协议架构、差分总线和gtl总线。

存储器1275可专用于处理器1200,或与系统中的其它装置共享。存储器1275的类型的公共示例包含dram、sram、非易失性存储器(nv存储器)以及其它已知存储装置。要指出,装置1280可包含图形加速计、耦合到存储器控制器集线器的卡或处理器、耦合到i/o控制器集线器的数据存储装置、无线收发器、闪存装置、音频控制器、网络控制器或其它已知装置。

然而,近来,当更多的逻辑和装置被集成在单个管芯(诸如soc)上时,这些装置中的每个都可结合在处理器1200上。例如,在一个实施例中,存储器控制器集线器在与处理器1200相同的封装和/或管芯上。在此,核的部分(核上部分)1210包含用于与诸如存储器1275或图形装置1280的其它装置接口的一个或多个控制器。包含用于与此类装置对接的控制器和互连的配置经常被称为核上(或非核)配置。作为示例,片上接口1210包含用于片上通信的环形互连以及用于片下通信的高速串行点对点链路1205。然而,在soc环境中,甚至更多的装置,诸如网络接口、协处理器、存储器1275、图形处理器1280以及任何其它已知的计算机装置/接口可被集成在单个管芯或集成电路上,以提供具有高功能性和低功耗的小形状因子。

在一个实施例中,处理器1200能够执行编译器、优化和/或转化器代码1277以编译、转化和/或优化应用代码1276以支持本文描述的设备和方法,或与之对接。编译器经常包含将源文本/代码转化成目标文本/代码的程序或一组程序。通常,用编译器编译程序/应用代码在多阶段和多遍进行,以将高级编程语言代码变换成低级机器或汇编语言代码。然而,对于简单编译,仍可利用单向(singlepass)编译器。编译器可利用任何已知编译技术,并执行任何已知编译器操作,诸如词汇分析、预先处理、解析、语义分析、代码生成、代码变换和代码优化。

较大编译器经常包含多阶段,但最经常的是,这些阶段被包含在两个一般阶段内:(1)前端,即,一般在句法处理、语法处理和一些变换/优化可发生的情况下,以及(2)后端,即,一般在分析、变换、优化和代码生成发生的情况下。一些编译器指的是中间的,其图示了编译器的前端与后端之间的刻画的模糊。因此,对插入、关联、生成或编译器的其它操作的提及可发生在任何上面提到的阶段或遍,以及编译器的任何其它已知阶段或遍。作为说明性示例,编译器潜在地将操作、调用、函数等插入在编译的一个或多个阶段中,诸如将调用/操作插入在编译的前端中,并且然后在变换阶段期间将调用/操作变换成较低级代码。要指出,在动态编译期间,编译器代码或动态优化代码可插入此类操作/调用,以及优化用于在运行时间期间执行的代码。作为特定说明性示例,二进制代码(已经是编译代码)可在运行时间期间动态优化。在此,程序代码可包含动态优化代码、二进制代码或其组合。

类似于编译器,转化器(诸如二进制转化器)静态或动态转化代码,以优化和/或转化代码。因此,对执行代码、应用代码、程序代码或其它软件环境的提及可指的是:(1)动态或者静态地执行编译器程序、优化代码优化器或转化器,以编译程序代码,维持软件结构,执行其它操作,优化代码,或者转化代码;(2)执行包含操作/调用的主程序代码,诸如已经被优化/编译的应用代码;(3)执行其它程序代码,诸如与维持软件结构的主程序代码关联的库,以执行其它软件相关应用,或优化代码;或者(4)其组合。

现在参考图13,示出的是按照本发明实施例的第二系统1300的框图。如图13所示,多处理器系统1300是点对点互连系统,并且包含经由点对点互连1350耦合的第一处理器1370和第二处理器1380。处理器1370和1380中的每个都可以是处理器的某一版本。在一个实施例中,1352和1354是串行点对点一致性互连组构的部分,诸如intel的快速路径互连(qpi)架构。因此,本发明可在qpi架构内实现。

虽然仅示出有两个处理器1370、1380,但要理解到,本发明的范围不限于此。在其它实施例中,在给定处理器中可存在一个或多个附加处理器。

处理器1370和1380被分别示出包含集成存储器控制器单元1372和1382。处理器1370还包含作为总线控制器单元点对点(p-p)接口1376和1378其的部分;类似地,第二处理器1380包含p-p接口1386和1388。处理器1370、1380可使用p-p接口电路1378、1388经由点对点(p-p)接口1350互换信息。如图13中所示,evic1372和1382将处理器耦合到相应存储器,即,存储器1332和存储器1334,它们可以是本地附连到相应处理器的主存储器部分。

处理器1370、1380各经由各个p-p接口1352、1354使用点对点接口电路1376、1394、1386、1398与芯片集1390互换信息。芯片集1390还沿高性能图形互连1339经由接口电路1392与高性能图形电路1338互换信息。

共享高速缓存(未示出)可被包含在任一处理器中或者两个处理器外侧;仍经由p-p互连与处理器连接,使得任一个或两个处理器的本地高速缓存信息可被存储在共享高速缓存中(如果处理器被置于低功率模式)。

芯片集1390可以经由接口1396耦合到第一总线1316。在一个实施例中,第一总线1316可以是外围组件互连(pci)总线,或者诸如pci高速总线或者另一第三代i/o互连总线的总线,不过本发明的范围不如此限制。

如图13所示,各种i/o装置1314耦合到第一总线1316,连同将第一总线1316耦合到第二总线1320的总线桥1318。在一个实施例中,第二总线1320包含低管脚计数(lpc)总线。在一个实施例中,各种装置耦合到第二总线1320,例如包含键盘和/或鼠标1322、通信装置1327和存储单元1328,诸如盘驱动器或者经常包含指令/代码和数据1330的其它大容量存储装置。另外,音频i/o1324被显示耦合到第二总线1320。要指出,其它架构是可能的,其中所包含的组件和互连架构可变。例如,代替图13的点对点架构,系统可实现多点下传总线或其它此类架构。

虽然本发明已经关于有限数量的实施例进行了描述,但本领域技术人员将认识到从其中的众多修改和改变。意图是,所附权利要求书涵盖了如落入此发明的真实精神和范围内的所有此类修改和改变。

设计可经历各种阶段,从创建到模拟到制作。表示设计的数据可用若干方式表示该设计。首先,如在仿真上是有用的,硬件可使用硬件描述语言或另一功能描述语言表示。附加地,在设计过程的某些阶段,可产生具有逻辑和/或晶体管门极的电路级模型。更进一步说,大多数设计在某一阶段达到用硬件模型表示各种装置的物理布局的数据级。在其中使用常规半导体制作技术的情况下,表示硬件模型的数据可以是规定在对于用于产生集成电路的掩膜的不同掩膜层上各种特征的存在或缺席的数据。在设计的任何表示中,数据都可被存储在任何形式的机器可读介质中。存储器或者磁或光存储装置(诸如盘)可以是机器可读介质,以存储经由光波或电波来传送信息,所述光波或电波调制成或以别的方式生成以传送此类信息。当传送指示或携带代码或设计的电载波时,在执行电信号的拷贝、缓冲或重传的程度上,进行新拷贝。从而,通信供应商或网络供应商可在有形、机器可读介质上至少暂时地存储实施本发明实施例的技术的制品,诸如编码到载波中的信息。

本文所使用的模块指的是硬件、软件和/或固件的任何组合。作为示例,模块包含硬件,诸如微控制器,其与存储适配成由微控制器执行的代码的非暂态介质关联。因此,在一个实施例中,对模块的引用指的是硬件,其特定地配置成识别和/或执行在非暂态介质上保持的代码。更进一步说,在另一实施例中,模块的使用指的是包含代码的非暂态介质,代码特定地适配成由微控制器执行以执行预定操作。并且如能指出的,在又一实施例中,术语模块(在此示例中)可指的是微控制器和非暂态介质的组合。被图示为单独的通常模块边界常见地改变,并且潜在地交叠。例如,第一和第二模块可共享硬件、软件、固件或它们的组合,同时潜在地保留一些独立的硬件、软件或固件。在一个实施例中,术语逻辑的使用包含硬件,诸如晶体管、寄存器或者其它硬件,诸如可编程逻辑器件。

使用短语“用于”或“配置成”在一个实施例中指的是布置、放置一起、制造、许诺销售、进口和/或设计设备、硬件、逻辑或元件以执行指定或预定的任务。在此示例中,不在操作的设备或其元件仍“配置成”执行指定的任务(如果它被设计、耦合和/或互连以执行所述指定的任务)。作为纯粹说明性示例,逻辑门可在操作期间提供0或1。但“配置成”向时钟提供使能信号的逻辑门不包含可提供1或0的每一个潜在逻辑门。相反,逻辑门是以某种方式耦合的一种,在操作期间,1或0输出将启用时钟。再一次指出,使用术语“配置成”不要求操作,而是相反关注于设备、硬件和/或元件的潜伏状态,其中在潜伏状态中,当设备、硬件和/或元件在操作时,设备、硬件和/或元件被设计成执行具体任务。

更进一步说,使用短语“能够/以”和/或“可操作以”在一个实施例中指的是以某种方式设计的某一设备、逻辑、硬件和/或元件,以实现以规定方式使用设备、逻辑、硬件和/或元件。如上面指出的,使用“用于”、“能够”或“可操作以”在一个实施例中指的是设备、逻辑、硬件和/或元件的潜伏状态,其中该设备、逻辑、硬件和/或元件不在操作,但以某种方式设计成实现以规定的方式使用设备。

本文所使用的值包含数字、状态、逻辑状态或二进制逻辑状态的任何已知表示。经常,逻辑级、逻辑值或逻辑的值的使用也被称为1和0,其简单地表示二进制逻辑状态。例如,1指的是高逻辑级,并且0指的是低逻辑级。在一个实施例中,存储单元(诸如晶体管或快闪单元)可能能够保持单个逻辑值或多个逻辑值。然而,已经使用了计算机系统中值的其它表示。例如,十进制数10也可被表示为二进制值1010和十六进制字母a。因此,一个值包含能够被保持在计算机系统中的信息的任何表示。

而且,状态可由值或值的部分来表示。作为示例,第一值,诸如逻辑1,可表示默认或初始状态,而第二值,诸如逻辑0,可表示非默认状态。此外,术语“重置”和“设置”在一个实施例中分别指的是默认和更新的值或状态。例如,默认值潜在地包含高逻辑值,即重置,而更新的值潜在地包含低逻辑值,即设置。要指出,可利用值的任何组合来表示任何数量的状态。

上面阐述的方法、硬件、软件、固件或代码的实施例可经由存储在机器可存取、机器可读、计算机可存取或计算机可读介质上的指令或代码(其可由处理元件执行)实现。非暂态机器可存取/可读介质包含提供(即,存储和/或传送)以由机器(诸如计算机或电子系统)可读形式的信息的任何机制。例如,非暂态机器可存取介质包含随机存取存储器(ram),诸如静态ram(sram)或动态ram(dram);rom;磁或光存储介质;闪速存储器装置;电存储装置;光存储装置;声音存储装置;用于保持从暂态(传播)信号(例如载波、红外信号、数字信号)接收的信息的其它形式存储装置等,它们将与可从其接收信息的非暂态介质区别开。

用于逻辑编程以执行本发明实施例的指令可被存储在系统中的存储器内,诸如在dram、高速缓存、闪速存储器或其它存储装置内。更进一步说,指令能经由网络或者通过其它计算机可读介质分布。从而,机器可读介质可包含用于存储或传送以由机器(例如计算机)可读形式的信息的任何机构,但不限于软盘、光盘、紧致盘、只读存储器(cd-rom)和磁光盘、只读存储器(rom)、随机存取存储器(ram)、可擦除可编程只读存储器(eprom)、电可擦除可编程只读存储器(eeprom)、磁卡或光卡、闪速存储器或在通过因特网经由电、光、声音或其它形式的传播信号(例如载波、红外信号、数字信号等)传送信息时使用的有形、机器可读存储装置。相应地,计算机可读介质包含适合于存储或传送以由机器(例如计算机)可读形式的电子指令或信息的任何类型有形、机器可读介质。

在示例1中公开了一种方法、系统、和/或机器可读存储介质,其具有可执行代码以确定至少一个第一装置连接到系统的根复合体的多个端口的第一端口;指配对应于包含第一装置的第一层级装置的地址;确定第二装置通过映射门户桥连接在根复合体的多个端口的第二端口处,并且第二装置被包含在另一第二层级装置中;以及触发生成对应于映射门户桥的映射表。所述映射表定义在所述系统的配置地址空间的第一场景中使用的寻址与在所述配置地址空间的第二场景中使用的寻址之间的转化,所述第一场景包含所述根复合体的场景,并且所述第二场景包含对应于所述第二层级装置的场景,并且指配给所述第一层级装置的地址根据所述第一场景。

在示例2中,示例1的方法、系统和介质可选地还能对应于配置地址空间的第一场景而指配用于第二层级装置的地址。

在示例3中,在示例1-2的任一项的方法、系统和介质中,根据所述配置地址空间的所述第二场景,所述第二层级装置中的每个可选地也可被指配相应地址。

在示例4中,在示例1-3的任一项的方法、系统和介质中,配置地址的第一场景和第二场景中的每个的地址可选地可以是总线-装置-功能(bdf)号。

在示例5中,在示例4的方法、系统和介质中,可选地可根据所述配置地址空间的所述第一场景指配的所述地址被指配成优化在所述第一场景中利用的总线号的指配。

在示例6中,在示例5的方法、系统和介质中,可选地根据所述配置地址空间的所述第二场景指配的所述地址根据不同的、第二地址指配方案而被指配。

在示例7中,在示例6的方法、系统和介质中,所述第二方案对优化所述第二场景的所述地址内的总线号指配可能是不可知的。

在示例8中,在示例4的方法、系统和介质中,所述配置地址空间可选地可包含pcie配置地址空间。

在示例9中,在示例4的方法、系统和介质中,第一数量的总线号可选地可允许在所述配置地址空间的所述第一场景中,第二数量的总线号可选地可指配在所述配置地址空间的所述第二场景中,第三数量的总线号可选地可指配在所述配置地址空间的所述第一场景中,并且总线号的所述第二数量和第三数量之和可超过所述第一数量。

在示例10中,在示例1-9的任一项的方法、系统和介质中,所述映射门户桥可选地可在将所述层级的所述装置连接到所述根复合体的交换机装置中实现。

在示例11中,在示例1-10的任一项的方法、系统和介质中,所述映射门户桥可选地可在所述第二端口中实现。

在示例12中,在示例1-11的任一项的方法、系统和介质中,所述映射门户桥将使用所述映射表辅助所述第二层级装置与所述根复合体之间的通信。

在示例13中,在示例1-12的任一项的方法、系统和介质中,装置可选地根据相应搜索算法在所述第一装置层级和第二装置层级中的每个层级中发现。

在示例14中,在示例13的方法、系统和介质中,搜索算法可选地包含深度优先搜索。

在示例15中,在示例13的方法、系统和介质中,搜索算法可选地包含宽度优先搜索。

在示例16中,在示例13的方法、系统和介质中,可选地用于发现所述第一层级中装置的所述搜索算法不同于用于发现所述第二层级中装置的所述搜索算法。

在示例17中,在示例13的方法、系统和介质中,用于发现所述第一层级中装置的所述搜索算法与用于发现所述第二层级中装置的所述搜索算法相同。

在示例18中,在示例1-17的任一项的方法、系统和介质中,所述配置地址空间的所述第一场景中的所述地址的至少部分可被预留用于热插拔。

在示例19中公开有一种系统,包括包含耦合到多个层级装置的多个端口的根复合体和系统软件。系统软件可由处理器可执行以:确定至少一个第一装置连接到多个端口的第一端口;指配对应于包含第一装置的第一层级装置的地址;确定第二装置通过映射门户桥连接在根复合体的多个端口的第二端口处,并且第二装置被包含在另一第二层级装置中;以及生成对应于映射门户桥的映射表。所述映射表定义在所述系统的配置地址空间的第一场景中使用的寻址与在所述配置地址空间的第二场景中使用的寻址之间的转化,所述第一场景包含所述根复合体的场景,并且所述第二场景包含对应于所述第二层级装置的场景,并且指配给所述第一层级装置的地址根据所述第一场景。

此说明书通篇提到“一个实施例”或“实施例”意味着,结合该实施例描述的具体特征、结构或特性被包含在本发明的至少一个实施例中。从而,在通篇说明书各个地方中出现的短语“在一个实施例中”或“在实施例中”不一定全都指的是同一实施例。更进一步说,在一个或多个实施例中,可以以任何适合的方式组合具体特征、结构或特性。

在前述说明书中,已经参考特定示范性实施例给出了详细描述。然而,将明显的是,在不脱离在所附权利要求书中所阐述的本发明的更广泛精神和范围的情况下,可对其进行各种修改和改变。说明书和附图将相应地以说明性意义而非限制性意义被考虑。更进一步说,前面使用的实施例和其它示范性语言不一定指的是同一实施例或同一示例,而是可指的是不同的或截然不同的实施例,以及潜在地相同实施例。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1