技术领域
[0001] 本申请涉及计算机技术领域,尤其涉及一种PCIe总线地址空间分配方法及装置。
相关背景技术
[0002] 在集中控制框式设备中,存在一个主控CPU,主控CPU通过PCIe总线来控制和协调整个集中控制框式设备的正常运行。主控CPU读取PCIe总线地址空间,根据PCIe器件的需求为其分配对应的PCIe总线地址空间,主控CPU和PCIe器件之间可以基于某一段PCIe总线地址空间进行交互。因此主控CPU如何为PCIe器件合理分配PCIe总线地址空间是集中控制框式设备正常运行的重要组成部分。
[0003] 目前现有的PCIe总线地址空间分配方法是基于DFS(Depth First Search,深度优化搜索)算法扫描集中控制框式设备中PCIe器件分布拓扑图,基于PCIe器件分布拓扑图以及PCIe器件的需求进行PCIe总线地址空间分配。然而由于在集中控制框式设备中有部分PCIe器件分布位置相对固定(这部分PCIe器件在PCIe总线中起到了桥片的作用,用于连接其他槽位上的PCIe器件,故此这部分PCIe器件被称为PCIe桥),在集中控制框式设备运行过程中扫描这些PCIe桥,不但会浪费时间,而且其它PCIe器件一旦存在变动,则会导致为PCIe桥分配的PCIe总线地址空间也会存在变动。
具体实施方式
[0025] 这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
[0026] 在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
[0027] 应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
[0028] 首先对本申请实施例提供的一种PCIe总线地址空间分配方法进行说明,该方法应用于集中控制框式设备,所述集中控制框式设备中至少包括主控CPU、PCIe桥以及PCIe器件,所述PCIe桥与所述主控CPU、所述PCIe器件分别进行连接,该方法主要包括:
[0029] 确定主控CPU所拥有的PCIe接口数量;
[0030] 针对主控CPU所拥有的任一PCIe接口对应的PCIe通道,执行以下操作:
[0031] 查找与PCIe通道对应的预设PCIe总线地址空间配置信息;
[0032] 根据所查找的预设PCIe总线地址空间配置信息,为PCIe通道固定分配对应的PCIe总线地址空间;
[0033] 针对PCIe通道所挂载的任一PCIe桥,根据所查找的预设PCIe总线地址空间配置信息,从为PCIe通道固定分配的PCIe总线地址空间中,为PCIe桥固定分配对应的PCIe总线地址空间;
[0034] 针对PCIe桥所挂载的任一PCIe器件,根据所查找的预设PCIe总线地址空间配置信息,从为PCIe通道固定分配的PCIe总线地址空间中,为PCIe器件固定分配对应的PCIe总线地址空间。
[0035] 在背景技术中提到,目前现有的PCIe总线地址空间分配方法是基于DFS算法扫描集中控制框式设备中PCIe器件分布拓扑图,基于PCIe器件分布拓扑图以及PCIe器件的需求进行PCIe总线地址空间分配,如图1所示,根据DFS算法为HOST主桥下游PCIe器件分配PCIe总线地址空间、BAR0地址以及PCIe总线编号,从图1中可以看出PCIe总线0的PCIe总线地址空间大小是根据其下游PCIe器件申请的PCIe总线地址空间总和计算得出,每一个PCIe器件的PCIe总线地址空间和BAR0地址是根据DFS算法扫描PCIe器件的先后顺序进行分配的,PCIe总线编号是根据DFS算法扫描的逐个PCIe桥分配的,其中在集中控制框式设备中部分PCIe器件分布位置相对固定,这部分PCIe器件在PCIe总线中起到了桥片的作用,用于连接其他槽位上的PCIe器件,故此这部分PCIe器件被称为PCIe桥,如图1所示。在集中控制框式设备运行过程中扫描这些分布位置的PCIe器件(即PCIe桥),不但会浪费时间,而且其他PCIe器件一旦存在变动,整个PCIe器件分布拓扑图会存在变动,会导致为PCIe桥分配的PCIe总线地址空间也会存在变动。
[0036] 针对上述技术问题,本申请实施例提供一种技术方案,如图2所示的一示例性集中控制框式设备结构示意图,包括主控CPU(XLS416)、HOST主桥、PCIe桥(PEX8615)、PCIe器件,其中主控CPU(XLS416)下游挂载HOST主桥,主控CPU拥有4个PCIe接口,每个PCIe接口对应一个PCIe通道,分别为:Lane0、Lane1、Lane2、Lane3,Lane2下游挂载PCIe桥(PEX8615),PCIe桥(PEX8615)下游挂载多个PCIe器件,该PCIe桥(PEX8615)直接与多个PCIe器件进行连接,该PCIe桥(PEX8615)通过Lane2、HOST主桥间接与主控CPU进行连接。为了解决上述问题,通过为主控CPU所拥有的任一PCIe接口对应的PCIe通道固定分配对应的PCIe总线地址空间,从而为PCIe桥固定分配对应的PCIe总线地址空间,为PCIe器件固定分配对应的PCIe总线地址空间,如此无需再扫描这些PCIe桥,节省了时间,而且即使其它PCIe器件存在变动,为PCIe桥分配的PCIe总线地址空间也不会存在变动。为了对本申请进一步说明,提供下列实施例:
[0037] 如图3所示,为本申请实施例PCIe总线地址空间分配方法的实施流程图,该方法可以包括以下步骤:
[0038] S301,确定主控CPU所拥有的PCIe接口数量;
[0039] 集中控制矿石设备中包括主控CPU,确定主控CPU所拥有的PCIe接口数量,例如如图2所示的主控CPU(XLS416)拥有4个PCIe接口,每个PCIe接口对应一个PCIe通道,如图2所示的Lane0、Lane1、Lane2、Lane3,在本申请中,在PCIe总线地址空间分配第一阶段,针对主控CPU所拥有的任一PCIe接口对应的PCIe通道,独立分配PCIe总线地址空间和PCIe总线编号范围,当确定每个PCIe通道的PCIe总线地址空间和PCIe总线编号范围之后,每个PCIe通道下游挂载的PCIe桥以及PCIe器件只能在此范围内进行分配,具体如下:
[0040] 针对主控CPU所拥有的任一PCIe接口对应的PCIe通道,执行以下操作:
[0041] S302,查找与PCIe通道对应的预设PCIe总线地址空间配置信息;
[0042] 预先为每个PCIe通道设置对应的PCIe总线地址空间配置信息,该PCIe总线地址空间配置信息如下表1所示:
[0043]
[0044] 表1
[0045] 如上述表1所示,对于Lane0、Lane1、Lane3分配固定的PCIe总线地址空间6M,对于Lane2下游挂载的PCIe桥分配固定的PCIe总线地址空间6M,Lane2下游挂载的每个PCIe器件分配固定的PCIe总线地址空间8M,每个PCIe通道都存在与自身对应的PCIe总线地址空间配置信息,针对主控CPU所拥有的任一PCIe接口对应的PCIe通道,可以查找到与PCIe通道对应的预设PCIe总线地址空间配置信息。
[0046] S303,根据所查找的预设PCIe总线地址空间配置信息,为PCIe通道固定分配对应的PCIe总线地址空间;
[0047] 针对S302中查找到的与PCIe通道对应的预设PCIe总线地址空间配置信息,可以为每个PCIe通道固定分配对应的PCIe总线地址空间,固定分配意味着为每个PCIe通道分配的PCIe总线地址空间大小固定,同时为每个PCIe通道分配的PCIe总线地址空间范围固定。例如上述所说的对于Lane0,根据查找到的与Lane0对应的预设PCIe总线地址空间配置信息,为Lane0分配固定的PCIe总线地址空间6M,例如上述所说的对于Lane2,根据查找到的与Lane2对应的预设PCIe总线地址空间配置信息,为Lane2分配固定的PCIe总线地址空间6M+(8*12)M。
[0048] S304,针对PCIe通道所挂载的任一PCIe桥,根据所查找的预设PCIe总线地址空间配置信息,从为PCIe通道固定分配的PCIe总线地址空间中,为PCIe桥固定分配对应的PCIe总线地址空间;
[0049] 当确定每个PCIe通道的PCIe总线地址空间之后,每个PCIe通道下游挂载的PCIe桥只能在此范围内进行分配,具体的针对任一PCIe通道下游,扫描是否挂载PCIe桥,若PCIe通道下游挂载PCIe桥,针对PCIe通道下游所挂载的任一PCIe桥,根据所查找的预设PCIe总线地址空间配置信息,从为PCIe通道固定分配的PCIe总线地址空间中,为PCIe桥固定分配对应的PCIe总线地址空间。
[0050] 例如对于Lane2,确定Lane2的PCIe总线地址空间之后,扫描Lane2下游挂载的PCIe桥,根据所查找的与Lane2对应的预设PCIe总线地址空间配置信息,从为Lane2固定分配的PCIe总线地址空间中(6M+(8*12)M),可以为PCIe桥固定分配对应的PCIe总线地址空间6M。
[0051] S305,针对PCIe桥所挂载的任一PCIe器件,根据所查找的预设PCIe总线地址空间配置信息,从为PCIe通道固定分配的PCIe总线地址空间中,为PCIe器件固定分配对应的PCIe总线地址空间。
[0052] 当确定每个PCIe通道的PCIe总线地址空间之后,每个PCIe通道下游挂载的PCIe器件只能在此范围内进行分配,具体的利用DFS算法扫描PCIe桥下游所挂载的PCIe器件的分布拓扑图,确定PCIe桥下游所挂载的PCIe器件数量,针对PCIe桥下游所挂载的任一PCIe器件,根据所查找的预设PCIe总线地址空间配置信息,从为PCIe通道固定分配的PCIe总线地址空间中,为PCIe器件固定分配对应的PCIe总线地址空间。
[0053] 例如,对于Lane2,确定Lane2的PCIe总线地址空间之后,利用DFS算法扫描PCIe桥下游所挂载的PCIe器件的分布拓扑图,确定PCIe桥下游所挂载的PCIe器件数量,这里所确定的PCIe桥下游所挂载的PCIe器件数量为当前集中控制框式设备中包括的PCIe器件数量,可能并不是集中控制框式设备中包括的最大数量的PCIe器件,有些槽位上的PCIe器件并没有安装。例如确定PCIe桥下游所挂载的PCIe器件为:PCIe器件1、PCIe器件2、PCIe器件3、PCIe器件4、PCIe器件5,针对PCIe桥下游所挂载的任一PCIe器件,根据所查找的与Lane2对应的预设PCIe总线地址空间配置信息,从为Lane2固定分配的PCIe总线地址空间中(6M+(8*12)M),为PCIe器件固定分配对应的PCIe总线地址空间8M。
[0054] 在上述方案基础之上,针对主控CPU所拥有的任一PCIe接口对应的PCIe通道,查找与PCIe通道对应的预设PCIe总线编号范围配置信息,根据所查找到的预设PCIe总线编号范围配置信息,为PCIe通道配置固定的PCIe总线编号范围,每个PCIe通道下游挂载的PCIe桥以及PCIe器件只能在此范围内进行分配,这样PCIe桥以及PCIe器件所在PCIe总线编号范围是固定的,这样当PCIe桥以及PCIe器件出现问题之后,会有相应的日志文件记录PCIe桥以及PCIe器件所在的PCIe总线编号,这样就可以基于PCIe总线编号确定是PCIe桥出现了问题,还是PCIe器件出现了问题。
[0055] 通过以上对本申请所提供的技术方案的描述,通过为主控CPU所拥有的任一PCIe接口对应的PCIe通道固定分配对应的PCIe总线地址空间,从而为PCIe桥固定分配对应的PCIe总线地址空间,为PCIe器件固定分配对应的PCIe总线地址空间。如此无需再扫描这些PCIe桥,节省了时间,而且即使其它PCIe器件存在变动,为PCIe桥分配的PCIe总线地址空间也不会存在变动。
[0056] 与上述PCIe总线地址空间分配方法的实施例相对应,本申请还提供了一种PCIe总线地址空间分配装置,如图4所示,应用于集中控制框式设备,所述集中控制框式设备中包括主控CPU、PCIe桥以及PCIe器件,所述PCIe桥与所述主控CPU、所述PCIe器件分别进行连接,该装置可以包括:数量确定模块410、信息查找模块420、第一空间分配模块430、第二空间分配模块440、第三空间分配模块450。
[0057] 数量确定模块410,用于确定主控CPU所拥有的PCIe接口数量;
[0058] 信息查找模块420,用于针对主控CPU所拥有的任一PCIe接口对应的PCIe通道,查找与PCIe通道对应的预设PCIe总线地址空间配置信息;
[0059] 第一空间分配模块430,用于针对主控CPU所拥有的任一PCIe接口对应的PCIe通道,根据所查找的预设PCIe总线地址空间配置信息,为PCIe通道固定分配对应的PCIe总线地址空间;
[0060] 第二空间分配模块440,用于针对PCIe通道所挂载的任一PCIe桥,根据所查找的预设PCIe总线地址空间配置信息,从为PCIe通道固定分配的PCIe总线地址空间中,为PCIe桥固定分配对应的PCIe总线地址空间;
[0061] 第三空间分配模块450,用于针对PCIe桥所挂载的任一PCIe器件,根据所查找的预设PCIe总线地址空间配置信息,从为PCIe通道固定分配的PCIe总线地址空间中,为PCIe器件固定分配对应的PCIe总线地址空间。
[0062] 在本申请的一种具体实施方式中,所述第二空间分配模块440具体用于:
[0063] 针对PCIe通道下游,扫描是否挂载PCIe桥;
[0064] 若PCIe通道下游挂载PCIe桥,针对PCIe通道下游所挂载的任一PCIe桥,根据所查找的预设PCIe总线地址空间配置信息,从为PCIe通道固定分配的PCIe总线地址空间中,为PCIe桥固定分配对应的PCIe总线地址空间。
[0065] 在本申请的一种具体实施方式中,所述第三空间分配模块450具体用于:
[0066] 利用DFS算法扫描PCIe桥下游所挂载的PCIe器件的分布拓扑图,确定PCIe桥下游所挂载的PCIe器件数量;
[0067] 针对PCIe桥下游所挂载的任一PCIe器件,根据所查找的预设PCIe总线地址空间配置信息,从为PCIe通道固定分配的PCIe总线地址空间中,为PCIe器件固定分配对应的PCIe总线地址空间。
[0068] 在本申请的一种具体实施方式中,所述装置还包括:
[0069] 总线编号范围配置模块460,用于针对主控CPU所拥有的任一PCIe接口对应的PCIe通道,查找与PCIe通道对应的预设PCIe总线编号范围配置信息;
[0070] 根据所查找到的预设PCIe总线编号范围配置信息,为PCIe通道配置固定的PCIe总线编号范围。
[0071] 上述系统中各个单元的作用实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
[0072] 对于系统实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
[0073] 本发明可以在由计算机执行的计算值可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
[0074] 以上所述仅是本发明的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。