发明内容
本发明实施例提供一种多节点系统的外部设备互联枚举方法和装置,提高了多节点系统的启动速度,从而缩短了多节点系统的启动时间。
本发明实施例第一方面提供一种多节点系统的外部设备互联枚举方法,所述多节点系统包括主节点和至少一个从节点,所述方法包括:
主节点获取所述主节点的第一外部设备互联PCI枚举结果;
所述主节点获取所述多节点系统内的各从节点对应的第二PCI枚举结果;
所述主节点根据所述第一PCI枚举结果和所述各从节点对应第二PCI枚举结果生成所述多节点系统的PCI树。
结合第一方面,在第一方面的第一种可能的实施方式中,在所述主节点获取所述主节点的第一PCI枚举结果之前,所述方法还包括:
所述主节点激活所述多节点系统内的各个从节点。
结合第一方面的第一种可能的实施方式,在第一方面的第二种可能的实施方式中,所述主节点获取所述主节点的第一PCI枚举结果,包括:
所述主节点枚举所述主节点内的第一PCI设备;
所述主节点为所述第一PCI设备分配第一资源,并为所述第一PCI设备加载第一Option ROM和第一驱动,获得第一PCI枚举结果。
结合第一方面的第一种可能的实施方式,在第一方面的第三种可能的实施方式中,所述主节点获取所述主节点的第一PCI枚举结果,还包括:
所述主节点枚举所述主节点内的第一PCI桥和所述第一PCI桥的第二PCI设备;
所述主节点为所述第一PCI桥分配第一总线BUS号和第二资源,为所述第二PCI设备分配第三资源,并为所述第二PCI设备加载第二Option ROM和第二驱动,获得第一PCI枚举结果;其中,所述第二资源包括所述第三资源。
结合第一方面的第一种可能的实施方式,在第一方面的第四种可能的实施方式中,所述主节点获取所述主节点的第一PCI枚举结果,还包括:
所述主节点枚举所述主节点内的第一PCI设备、第一PCI桥和所述第一PCI桥的第二PCI设备;
所述主节点为所述第一PCI设备分配第一资源,并为所述第一PCI设备加载第一Option ROM和第一驱动;所述主节点为所述第一PCI桥分配第一BUS号和第二资源,为所述第二PCI设备分配第三资源,并为所述第二PCI设备加载第二Option ROM和第二驱动,获得第一PCI枚举结果。
结合第一方面的第二种可能的实施方式至第一方面的第四种可能的实施方式中的任一项,在第一方面的第五种可能的实施方式中,所述第二PCI枚举结果包括:
所述各从节点内的已分配第四资源的第三PCI设备,且所述第三PCI设备已加载第三Option ROM和第三驱动;和/或,
所述各从节点内的已分配第二BUS号和第五资源的第二PCI桥,以及,所述各从节点内的已分配第六资源的第四PCI设备,且所述第四PCI设备已加载第四Option ROM和第四驱动;其中,所述第五资源包括所述第六资源。
本发明实施例第二方面提供一种多节点系统的外部设备互联枚举方法,所述多节点系统包括主节点和至少一个从节点,所述方法包括:
所述从节点获取自身节点内的第二外部设备互联PCI枚举结果;
所述从节点存储所述第二PCI枚举结果,以供所述主节点从所述从节点获取所述第二PCI枚举结果,并使所述主节点根据所述主节点的第一PCI枚举结果和所述第二PCI枚举结果生成所述多节点系统的PCI树。
结合第二方面,在第二方面的第一种可能的实施方式中,所述从节点获取自身节点内的第二PCI枚举结果之前,所述从节点处于等待被所述主节点激活的状态。
结合第二方面的第一种可能的实施方式,在第二方面的第二种可能的实施方式中,所述从节点获取自身节点内的第二PCI枚举结果,包括:
所述从节点枚举自身节点内第三PCI设备;
所述从节点为所述第三PCI设备分配第四资源,并为所述第三PCI设备加载第三Option ROM和第三驱动,获得第二PCI枚举结果。
结合第二方面的第一种可能的实施方式,在第二方面的第三种可能的实施方式中,所述从节点获取自身节点内的第二PCI枚举结果,还包括:
所述从节点枚举自身节点内的第二PCI桥和所述第二PCI桥的第四PCI设备;
所述从节点为所述第二PCI桥分配第二总线BUS号和第五资源,以及,为所述第四PCI设备分配第六资源,并为所述第四PCI设备加载第四OptionROM和第四驱动,获得第二PCI枚举结果;其中,所述第五资源包括所述第六资源。
结合第二方面的第一种可能的实施方式,在第二方面的第四种可能的实施方式中,所述从节点获取自身节点内的第二PCI枚举结果,还包括:
所述从节点枚举自身节点内第三PCI设备、第二PCI桥和所述第二PCI桥的第四PCI设备;
所述从节点为所述第三PCI设备分配第四资源,并为所述第三PCI设备加载第三Option ROM和第三驱动;所述从节点为所述第二PCI桥分配第二BUS号和第五资源,以及,为所述第四PCI设备分配第六资源,并为所述第四PCI设备加载第四Option ROM和第四驱动,获得第二PCI枚举结果;其中,所述第五资源包括所述第六资源。
本发明实施例第三方面提供一种多节点系统的外部设备互联枚举装置,所述多节点系统包括主节点和至少一个从节点,所述装置包括:
第一获取模块,用于获取所述主节点的第一外部设备互联PCI枚举结果;
第二获取模块,用于获取所述多节点系统内的各从节点对应的第二PCI枚举结果;
生成模块,用于根据所述第一PCI枚举结果和所述各从节点对应第二PCI枚举结果生成所述多节点系统的PCI树。
结合第三方面,在第三方面的第一种可能的实施方式中,所述装置还包括:
激活模块,用于在所述第一获取模块获取所述主节点的第一外部设备互联PCI枚举结果之前,激活所述多节点系统内的各个从节点。
结合第三方面的第一种可能的实施方式,在第三方面的第二种可能的实施方式中,所述第一获取模块包括:
第一枚举单元,用于枚举所述主节点内的第一PCI设备;
第一分配获取单元,用于为所述第一PCI设备加载第一Option ROM和第一驱动,获得第一PCI枚举结果。
结合第三方面的第一种可能的实施方式,在第三方面的第三种可能的实施方式中,所述第一获取模块还包括:
第二枚举单元,用于枚举所述主节点内的第一PCI桥和所述第一PCI桥的第二PCI设备;
第二分配获取单元,用于为所述第一PCI桥分配第一总线BUS号和第二资源,为所述第二PCI设备分配第三资源,并为所述第二PCI设备加载第二Option ROM和第二驱动,获得第一PCI枚举结果;其中,所述第二资源包括所述第三资源。
结合第三方面的第一种可能的实施方式,在第三方面的第四种可能的实施方式中,所述第一获取模块还包括:
第三枚举单元,用于枚举所述主节点内的第一PCI设备、第一PCI桥和所述第一PCI桥的第二PCI设备;
第三分配获取单元,用于为所述第一PCI设备分配第一资源,并为所述第一PCI设备加载第一Option ROM和第一驱动;并为所述第一PCI桥分配第一BUS号和第二资源,为所述第二PCI设备分配第三资源,并为所述第二PCI设备加载第二Option ROM和第二驱动,获得第一PCI枚举结果。
结合第三方面的第二种可能的实施方式至第三方面的第四种可能的实施方式中的任一项,在第三方面的第五种可能的实施方式中,所述第二PCI枚举结果,包括;
所述各从节点内的已分配第四资源的第三PCI设备,且所述第三PCI设备已加载第三Option ROM和第三驱动;和/或,
所述各从节点内的已分配第二BUS号和第五资源的第二PCI桥,以及,所述各从节点内的已分配第六资源的第四PCI设备,且所述第四PCI设备已加载第四Option ROM和第四驱动;其中,所述第五资源包括所述第六资源。
本发明实施例第四方面提供一种多节点系统的外部设备互联枚举装置,所述多节点系统包括主节点和至少一个从节点,所述装置包括:
获取模块,用于获取自身节点内的第二外部设备互联PCI枚举结果;
存储模块,用于存储所述第二PCI枚举结果,以供所述主节点从所述从节点获取所述第二PCI枚举结果,并使所述主节点根据所述主节点的第一PCI枚举结果和所述第二PCI枚举结果生成所述多节点系统的PCI树。
结合第四方面,在第四方面的第一种可能的实施方式中,所述获取模块在获取自身节点内的第二PCI枚举结果之前,所述从节点处于等待被所述主节点激活的状态。
结合第四方面的第一种可能的实施方式,在第四方面的第二种可能的实施方式中,所述获取模块包括:
第一枚举单元,用于枚举自身节点内的第二PCI设备;
第一分配获取单元,用于为所述第二PCI设备分配第四资源,并为所述第二PCI设备加载第二Option ROM和第二驱动,获得第二PCI枚举结果。
结合第四方面的第一种可能的实施方式,在第四方面的第三种可能的实施方式中,所述获取模块还包括:
第二枚举单元,用于枚举自身节点内的第二PCI桥和所述第二PCI桥的第四PCI设备;
第二分配获取单元,用于为所述第二PCI桥分配第二总线BUS号和第五资源,以及,为所述第四PCI设备分配第六资源,并为所述第四PCI设备加载第四Option ROM和第四驱动,获得第二PCI枚举结果;其中,所述第五资源包括所述第六资源。
结合第四方面的第一种可能的实施方式,在第四方面的第四种可能的实施方式中,所述获取模块还包括:
第三枚举单元,用于枚举自身节点内第三PCI设备、第二PCI桥和所述第二PCI桥的第四PCI设备;
第三分配获取单元,用于为所述第三PCI设备分配第四资源,并为所述第三PCI设备加载第三Option ROM和第三驱动;并为所述第二PCI桥分配第二BUS号和第五资源,以及,为所述第四PCI设备分配第六资源,并为所述第四PCI设备加载第四Option ROM和第四驱动,获得第二PCI枚举结果;其中,所述第五资源包括所述第六资源。
本发明实施例提供的多节点系统的外部设备互联枚举方法和装置,通过主节点分别获取主节点内的第一PCI枚举结果和多节点系统中的各个从节点对应的第二PCI枚举结果,并根据第一PCI枚举结果和各个从节点对应的第二PCI枚举结果生成上述多节点系统的PCI树,继续运行多节点系统的其他流程,使得多节点系统的各个节点的PCI枚举过程并行运行,从而加快了多节点系统的启动速度,缩短了多节点系统的启动时间。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明提供的多节点系统的外部设备互联枚举方法实施例一的流程示意图,如图1所示,该方法包括:
S101:主节点获取主节点的第一PCI枚举结果。
具体的,本发明实施例提供的方法适用于多节点系统,该多节点系统包括一个主节点和至少一个从节点,且该多节点系统可以是基于NC的多节点的大拓扑结构。即,节点之间通过NC互连,每个节点上还都有一个或多个北桥IOH(即PCI规范中的Root Bridge),每个IOH都有若干Port(即PCI规范中的P2P Bridge);PCI设备挂在由Port引出的PCI插槽上,也就是说,P2PBridge下可以直接连接PCI设备,还可以连接PCI桥,通过PCI桥连接PCI设备;BIOS系统在启动时CPU运行PCI枚举代码找到系统中的PCI桥和PCI设备,对其进行初始化。
多节点系统中的主节点中包括主节点的CPU、NC和IOH等,CPU与NC和IOH可以通过快速通道互联(Quick Path Interconnect,以下简称QPI)总线互连,PCI设备通过PCI总线连在P2P Bridge上。本发明实施例中的多节点系统可以为三种方式:
第一种:多节点系统的主节点和从节点的每个P2P Bridge下均连接的是PCI设备;
第二种:多节点系统主节点和从节点的每个P2P Bridge下均连接的是PCI桥,每个PCI桥下连接了至少一个PCI设备;
第三种:多节点系统主节点和从节点的部分P2P Bridge下连接的是PCI设备,另外一部分P2P Bridge下连接的是PCI桥,该些PCI桥下连接了至少一个PCI设备。
多节点系统上电后,主节点中的CPU运行PCI枚举代码,获取第一PCI枚举结果。需要注意的是,无论多节点系统是上述哪一种方式,主节点获取的枚举结果均是第一PCI枚举结果,即这里的第一针对的只是主节点。且该第一PCI枚举结果可以为已经分配了资源和加载了Option ROM以及驱动的PCI设备,还可以为已经分配了BUS号和资源的PCI桥和已经分配了资源和加载了Option ROM以及驱动的PCI设备,本发明实施例对此不做限制。
S102:主节点获取多节点系统内的各从节点对应的第二PCI枚举结果。
具体的,多节点系统内有至少一个从节点,各个从节点最初是处于等待状态,待被主节点的CPU激活后,各个从节点各自获取自己节点内的第二PCI枚举结果,存入内存,等待主节点获取第二PCI枚举结果。即主节点获取主节点的第一PCI枚举结果和从节点获取自己节点内的第二PCI枚举结果是可以并行进行的。需要注意的是,上述的第一PCI枚举结果指的是主节点的,第二PCI枚举结果指的是从节点的,且每个从节点的第二PCI枚举结果可以相同,也可以不同,上述的第一和第二仅是为了区分枚举结果是主节点的还是从节点的。并且,上述第二PCI枚举结果可以为已经分配了资源和加载了Option ROM以及驱动的PCI设备,还可以为从节点内已经分配了BUS号和资源的PCI桥和已经分配了资源和加载了Option ROM以及驱动的PCI设备。
S103:主节点根据第一PCI枚举结果和各从节点对应第二PCI枚举结果生成多节点系统的PCI树。
具体的,待上述主节点获取到第一PCI枚举结果和各个从节点对应的第二PCI枚举结果之后,主节点CPU将获取到第一PCI枚举结果和各个从节点对应的第二PCI枚举结果构成多节点系统的PCI树,完成PCI设备的初始化,进而使能PCI设备,使得主节点可以继续运行多节点系统的其他流程。
为了进一步说明本发明所能带来的有益效果,在这里对现有技术做一简单介绍,现有技术中的PCI枚举只能通过主节点的主线程执行PCI枚举代码来实现,即主节点的CPU获取多节点系统内的所有节点的Root Bridge,然后轮询每一个Root Bridge下的P2P Bridge,再通过每个Root Bridge下的各个P2P Bridge找到PCI桥和PCI设备,并为所找到的PCI桥和PCI设备分配BUS号和资源(为PCI设备只分配资源),最后为PCI设备加载Option ROM和驱动,使能多节点系统中的所有PCI设备。即,多节点系统在枚举时,是依次串行枚举的,主节点先枚举完自己节点内的PCI桥和PCI设备,再去依次枚举从节点下的PCI桥和PCI设备,使得主节点执行PCI枚举代码重复,造成系统启动时间慢;并且主节点在枚举其他从节点的PCI桥和PCI设备时,也会造成大量的跨节点地址访问,导致系统效率低,负载大;同时,多节点系统的启动时间还会随着从节点个数的增加而增加,不利于多节点系统的扩展。
但是,在本发明实施例提供的方法中,主节点只枚举自己节点内的第一PCI枚举结果,同时从节点也枚举自己节点内的第二PCI枚举结果,即主从节点的PCI枚举时并行运行的,从而缩短了PCI设备初始化的时间,进而提高了系统的启动时间;另一方面,由于主节点和从节点均是各自枚举自己节点内的PCI枚举结果,因此不会造成跨节点地址访问,提供系统的效率;并且,主节点和从节点的PCI枚举互不影响,因此即使增加多个从节点,主从节点的PCI枚举也是并行运行的,对系统的启动时间上不会造成影响,使得多节点系统易于扩展。
本发明实施例提供的多节点系统的外部设备互联枚举方法,通过主节点分别获取主节点内的第一PCI枚举结果和多节点系统中的各个从节点对应的第二PCI枚举结果,并将第一PCI枚举结果和各个从节点对应的第二PCI枚举结果构成上述多节点系统的PCI树,继续运行多节点系统的其他流程,使得多节点系统的各个节点的PCI枚举过程并行运行,从而加快了多节点系统的启动速度,缩短了多节点系统的启动时间。
图2为本发明提供的多节点系统的外部设备互联枚举方法实施例二的流程示意图,在上述图1所示实施例的基础上,进一步地,在S101之前,上述方法还包括S201:主节点激活多节点系统内的各个从节点。
具体的,多节点系统上电后,主节点的CPU开始运行程序,待运行至PCI枚举代码入口时(该入口也是一个程序语句,CPU是可以识别的),主节点CPU激活多节点系统的各个从节点。在主节点未激活从节点时,从节点的CPU一直在读自己的寄存器,当主节点要激活该从节点时,就往该从节点的寄存器中写入相应的数据,表明激活该从节点的主线程。同时,需要注意的是,主节点激活各个从节点是按照顺序一个一个激活的,在激活后主节点获取自身节点内的第一PCI枚举结果;并且,上述各个从节点由于激活的顺序不同,所以在各自获取自己的第二PCI枚举结果的结束时间也是不同的,因此,各个从节点在获取完各自的第二PCI枚举结果后要进行同步。
后续的执行过程可以参见图1所示的方法实施例,在此不再赘述。
进一步地,在上述图2所示实施例的基础上,作为本发明实施例的一种可行的实施方式,本实施例涉及的方法是上述主节点获取所述主节点的第一PCI枚举结果的具体过程,本实施例提供的方法适用于多节点系统给的第一种方式,即多节点系统的主节点的每个P2P Bridge下均连接的是PCI设备。在主节点进行PCI枚举时,只考虑主节点的P2P Bridge下连接的第一PCI设备。该方法具体包括:主节点枚举主节点内的第一PCI设备;主节点为第一PCI设备分配第一资源,并为第一PCI设备加载第一Option ROM和第一驱动,获得第一PCI枚举结果。
具体的,主节点CPU执行PCI枚举代码,枚举主节点内的所有第一PCI设备,且主节点会虚拟一个Host Bridge,将所枚举的第一PCI设备挂在该Host Bridge下方,形成树状结构。并且,在主节点发现第一PCI设备的过程中,由于多节点系统的资源已经按照节点号的不同给各个节点分配了不同的资源,且内存映射输入输出口(Memory Mapping I/O,以下简称MMIO)地址空间和PCI配置空间(Memory Mapping Config,以下简称MMCFG)地址空间也按照不同的节点号分在不同的段内。因此,这里的主节点CPU会给所查找到的所有P2P Bridge分配不同的BUS号(BUS号的分配范围为0-0xFF)和资源;由于第一PCI设备连接在P2P Bridge下,因此,主节点CPU为第一PCI设备分配的第一资源需要包括在上述主节点CPU为P2P Bridge分配的资源内,这样当CPU需要访问第一PCI设备时,就可以通过相应的地址和P2PBridge的地址空间找到该第一PCI设备。之后,主节点CPU为上述已分配第一资源的第一PCI设备加载第一Option ROM和第一驱动,从而获得第一PCI枚举结果,也就是说,该第一PCI枚举结果指的是上述分配了第一资源并且已经加载了第一Option ROM和第一驱动的第一PCI设备。
进一步地,在上述图2所示实施例的基础上,作为本发明实施例的另一种可行的实施方式,本实施例涉及的方法是上述主节点获取所述主节点的第一PCI枚举结果的另一具体过程,本实施例提供的方法适用于多节点系统给的第二种方式,即多节点系统的主节点的每个P2P Bridge下均连接的是PCI桥,每个PCI桥下连接了至少一个PCI设备。该方法具体包括:主节点枚举主节点内的第一PCI桥和第一PCI桥的第二PCI设备;主节点为第一PCI桥分配第一BUS号和第二资源,为第二PCI设备分配第三资源,并为第二PCI设备加载第二Option ROM和第二驱动,获得第一PCI枚举结果;其中,第二资源包括第三资源。
具体的,主节点CPU执行PCI枚举代码,枚举主节点内的所有第一PCI设备,且主节点会虚拟一个Host Bridge,将所枚举的第一PCI设备挂在该Host Bridge下方,形成树状结构。并且,在主节点发现第一PCI设备的过程中,由于多节点系统的资源已经按照节点号的不同给各个节点分配了不同的资源,且MMIO地址空间和MMCFG地址空间也按照不同的节点号分在不同的段内。因此,这里的主节点CPU会给所查找到的所有P2P Bridge分配不同的BUS号(BUS号的分配范围为0-0xFF)和资源;由于上述P2P Bridge下均连接了第一PCI桥,因此,主节点CPU为第一PCI桥分配的第二资源需要包括在上述主节点CPU为P2P Bridge分配的资源内,这样当CPU需要访问第一PCI桥时,就可以通过相应的地址和P2P Bridge的地址空间找到该第一PCI桥;并且,由于上述第一PCI桥下均连接了第二PCI设备,因此主节点CPU为第一PCI设备分配的第三资源需要包括在上述主节点CPU为第一PCI桥分配的第二资源内,即第二资源包括第三资源,这样CPU就可以通过访问地址、P2P Bridge的资源以及第一PCI桥的第二资源找到该第二PCI设备。之后,主节点CPU为上述已分配第三资源的第二PCI设备加载第二Option ROM和第二驱动,从而获得第一PCI枚举结果,也就是说,该第一PCI枚举结果指的是上述分配了第一资源和第一BUS号的第一PCI桥,和,上述分配了第二资源并且已经加载了第二Option ROM和第二驱动的第二PCI设备。
进一步地,在上述图2所示实施例的基础上,作为本发明实施例的第三种可行的实施方式,本实施例涉及的方法是上述主节点获取所述主节点的第一PCI枚举结果的第三种具体过程,本实施例提供的方法适用于多节点系统给的第三种方式,即多节点系统的主节点的部分P2P Bridge下连接的是PCI设备,另外一部分P2P Bridge下连接的是PCI桥,该些PCI桥下连接了至少一个PCI设备。该方法具体包括:主节点枚举主节点内的第一PCI设备、第一PCI桥和第一PCI桥的第二PCI设备;主节点为第一PCI设备分配第一资源,并为第一PCI设备加载第一Option ROM和第一驱动;主节点为第一PCI桥分配第一BUS号和第二资源,为第二PCI设备分配第三资源,并为第二PCI设备加载第二Option ROM和第二驱动,获得第一PCI枚举结果。
具体的,主节点CPU执行PCI枚举代码,枚举主节点内的所有第一PCI设备,且主节点会虚拟一个Host Bridge,将所枚举的第一PCI设备挂在该Host Bridge下方,形成树状结构。并且,在主节点发现第一PCI设备的过程中,由于多节点系统的资源已经按照节点号的不同给各个节点分配了不同的资源,且MMIO地址空间和MMCFG地址空间也按照不同的节点号分在不同的段内。因此,这里的主节点CPU会给所查找到的所有P2P Bridge分配不同的BUS号(BUS号的分配范围为0-0xFF)和资源;这里需要注意的是,部分P2PBridge下直接连接是第一PCI设备,因此CPU为该些第一PCI设备分配的第一资源需要包括在该部分P2P Bridge的资源内;而另外一部分P2P Bridge由于连接的是第一PCI桥,且第一PCI桥下连接了至少一个第二PCI设备,因此主节点CPU为该些第一PCI桥分配的第二资源应该包括在连接第一PCI桥的这些P2P Bridge的资源内,且主节点CPU为第二PCI设备分配的第三资源应该包括在第二资源内。之后,主节点CPU分别为第一PCI设备加载第一Option ROM和第一驱动,为第二PCI设备加载第二Option ROM和第二驱动。最后,主节点获取第一PCI枚举结果,也就是说,该第一PCI枚举结果为上述分配了第一资源并且已经加载了第一Option ROM和第一驱动的第一PCI设备,和,上述分配了第一资源和第一BUS号的第一PCI桥,和,上述分配了第二资源并且已经加载了第二Option ROM和第二驱动的第二PCI设备。
本发明实施例提供的多节点系统的外部设备互联枚举方法,通过主节点分别获取主节点内的第一PCI枚举结果和多节点系统中的各个从节点对应的第二PCI枚举结果,并将第一PCI枚举结果和各个从节点对应的第二PCI枚举结果构成上述多节点系统的PCI树,继续运行多节点系统的其他流程,使得多节点系统的各个节点的PCI枚举过程并行运行,从而加快了多节点系统的启动速度,缩短了多节点系统的启动时间。
进一步地,上述第二枚举结果包括:各从节点内的已分配第四资源的第三PCI设备,且第三PCI设备已加载第三Option ROM和第三驱动;和/或,各从节点内的已分配第二BUS号和第五资源的第二PCI桥,以及,各从节点内的已分配第六资源的第四PCI设备,且第四PCI设备已加载第四Option ROM和第四驱动;其中,第五资源包括第六资源。
具体的,该多节点系统内的从节点在被主节点激活后,会获取各自节点内的第二PCI枚举结果,具体的枚举过程和主节点的枚举过程类似,从节点的系统结构同样包括三种不同的方式,即多节点系统的从节点的每个P2PBridge下均连接的是PCI设备;或,多节点系统的从节点的每个P2P Bridge下均连接的是PCI桥,每个PCI桥下连接了至少一个PCI设备;或,多节点系统的从节点的部分P2P Bridge下连接的是PCI设备,另外一部分P2P Bridge下连接的是PCI桥,该些PCI桥下连接了至少一个PCI设备。从节点的PCI枚举过程可以参照上述主节点的PCI枚举过程执行,在此不再赘述。
针对上述从节点的不同结构,获得第二PCI枚举结果是不同的。
本发明实施例提供的多节点系统的外部设备互联枚举方法,通过主节点分别获取主节点内的第一PCI枚举结果和多节点系统中的各个从节点对应的第二PCI枚举结果,并将第一PCI枚举结果和各个从节点对应的第二PCI枚举结果构成上述多节点系统的PCI树,继续运行多节点系统的其他流程,使得多节点系统的各个节点的PCI枚举过程并行运行,从而加快了多节点系统的启动速度,缩短了多节点系统的启动时间;另一方面,由于主节点和从节点均是各自枚举自己节点内的PCI枚举结果,因此不会造成跨节点地址访问,提供系统的效率;并且,主节点和从节点的PCI枚举互不影响,因此即使增加多个从节点,主从节点的PCI枚举也是并行运行的,对系统的启动时间上不会造成影响,使得多节点系统易于扩展。
图3为本发明提供的多节点系统的外部设备互联枚举方法实施例三的流程示意图,如图3所示,该方法包括:
S301:从节点获取自身节点内的第二PCI枚举结果。
本发明实施例提供的方法适用于多节点系统,该多节点系统包括一个主节点和至少一个从节点,且该多节点系统可以是基于NC的多节点的大拓扑结构。即,节点之间通过NC互连,每个节点上还都有一个或多个北桥IOH(即PCI规范中的Root Bridge),每个IOH都有若干Port(即PCI规范中的P2PBridge);PCI设备挂在由Port引出的PCI插槽上,也就是说,P2P Bridge下可以直接连接PCI设备,还可以连接PCI桥,通过PCI桥连接PCI设备;BIOS系统在启动时CPU运行PCI枚举代码找到系统中的PCI桥和PCI设备,对其进行初始化。
多节点系统中的从节点中包括从节点的CPU、NC和IOH等,CPU与NC和IOH可以通过QPI总线互连,PCI设备通过PCI总线连在P2P Bridge上。本发明实施例中的多节点系统可以为三种方式:
第一种:多节点系统的主节点和从节点的每个P2P Bridge下均连接的是PCI设备;
第二种:多节点系统主节点和从节点的每个P2P Bridge下均连接的是PCI桥,每个PCI桥下连接了至少一个PCI设备;
第三种:多节点系统主节点和从节点的部分P2P Bridge下连接的是PCI设备,另外一部分P2P Bridge下连接的是PCI桥,该些PCI桥下连接了至少一个PCI设备。
多节点系统上电后,各个从节点中的CPU运行PCI枚举代码,分别获取各自对应的第二PCI枚举结果。需要注意的是,无论多节点系统是上述哪一种方式,从节点获取的枚举结果均是第二PCI枚举结果,即这里的第二针对的只是从节点。且该第二PCI枚举结果可以为已经分配了资源和加载了Option ROM以及驱动的PCI设备,还可以为已经分配了BUS号和资源的PCI桥和已经分配了资源和加载了Option ROM以及驱动的PCI设备,本发明实施例对此不做限制。
S302:从节点存储第二PCI枚举结果,以供主节点从上述从节点获取第二PCI枚举结果,并使主节点根据主节点的第一PCI枚举结果和上述第二PCI枚举结果生成多节点系统的PCI树。
具体的,多节点系统的各个从节点分别存储各自对应的第二PCI枚举结果,等待主节点从各个从节点的内存中获取上述第二PCI枚举结果,并将所获取的第二PCI枚举结果和主节点自己的第一PCI枚举结果构成整个系统的PCI树,需要注意的是,主节点获取主节点的第一PCI枚举结果和从节点获取自己节点内的第二PCI枚举结果是可以并行进行的,上述的第一PCI枚举结果指的是主节点的,第二PCI枚举结果指的是从节点的,且每个从节点的第二PCI枚举结果可以相同,也可以不同,上述的第一和第二仅是为了区分枚举结果是主节点的还是从节点的。
本发明实施例提供的多节点系统的外部设备互联枚举方法,通过从节点获取自身节点内的第二PCI枚举结果,使得从节点的PCI枚举过程可以和主节点的PCI枚举过程并行进行,主节点根据主节点内的第一PCI枚举结果和各个从节点对应的第二PCI枚举结果构成PCI树执行多节点系统的其他流程,从而加快了多节点系统的启动速度,缩短了多节点系统的启动时间。
进一步地,在上述图3所示实施例的基础上,上述从节点获取自身节点内的第二PCI枚举结果之前,从节点处于等待被主节点激活的状态。
具体的,在多节点系统上电后,从节点一直处于等待被激活的状态,待主节点的CPU执行到PCI枚举代码的入口时,主节点的CPU激活上述各个从节点的主线程,使得从节点可以自己获取自身节点内的第二PCI枚举结果。
在上述实施例的基础上,进一步地,作为本发明实施例的一种可行的实施方式,本实施例涉及的方法是从节点获取自身节点内的第二PCI枚举结果的具体过程,该方法适用于多节点系统的第一种方式,即多节点系统的从节点的每个P2P Bridge下均连接的是第三PCI设备。该方法具体包括:从节点枚举自身节点内第三PCI设备;从节点为第三PCI设备分配第四资源,并为第三PCI设备加载第三Option ROM和第三驱动,获得第二PCI枚举结果。
具体的,从节点的主线程被激活后,从节点CPU执行PCI枚举代码,枚举从节点内的第三PCI设备,并且,在主节点枚举自身节点内的PCI桥和PCI设备的过程中,由于多节点系统的资源已经按照节点号的不同给各个节点分配了不同的资源,且MMIO地址空间和MMCFG地址空间也按照不同的节点号分在不同的段内,即各个从节点都有其对应的资源。从节点的CPU会给自身所查找到的所有P2P Bridge分配不同的BUS号(BUS号的分配范围为0-0xFF)和资源;由于第三PCI设备连接在P2P Bridge下,因此,从节点CPU为第三PCI设备分配的第四资源需要包括在上述从节点的CPU为P2P Bridge分配的资源内,这样当CPU需要访问第三PCI设备时,就可以通过相应的地址和P2PBridge的地址空间找到该第三PCI设备。之后,从节点的CPU为上述已分配第四资源的第三PCI设备加载第三Option ROM和第三驱动,从而获得第二PCI枚举结果,也就是说,该第二PCI枚举结果指的是上述分配了第四资源并且已经加载了第三Option ROM和第三驱动的第三PCI设备。
在上述实施例的基础上,进一步地,作为本发明实施例的另一种可行的实施方式,本实施例涉及的方法是从节点获取自身节点内的第二PCI枚举结果的另一具体过程,该方法适用于多节点系统的第二种方式,即多节点系统的从节点的每个P2P Bridge下均连接的是第二PCI桥,且每个PCI桥下连接至少一个PCI设备。该方法具体包括:从节点枚举自身节点内的第二PCI桥和第二PCI桥的第四PCI设备;从节点为第二PCI桥分配第二BUS号和第五资源,以及,为所述第四PCI设备分配第六资源,并为第四PCI设备加载第四Option ROM和第四驱动,获得第二PCI枚举结果;其中,第五资源包括第六资源。
具体的,从节点的主线程被激活后,从节点CPU执行PCI枚举代码,枚举从节点内的所有第三PCI设备,并且,在主节点枚举自身节点内的PCI桥和PCI设备的过程中,由于多节点系统的资源已经按照节点号的不同给各个节点分配了不同的资源,且MMIO地址空间和MMCFG地址空间也按照不同的节点号分在不同的段内,即各个从节点都有其对应的资源。从节点的CPU会给自身所查找到的所有P2P Bridge分配不同的BUS号(BUS号的分配范围为0-0xFF)和资源;由于上述从节点的P2P Bridge下均连接了第二PCI桥,因此,从节点CPU为第二PCI桥分配的第五资源需要包括在上述从节点CPU为P2P Bridge分配的资源内,这样当从节点CPU需要访问第二PCI桥时,就可以通过相应的地址和P2P Bridge的地址空间找到该第二PCI桥;并且,由于上述第二PCI桥下均连接了第四PCI设备,因此从节点的CPU为第四PCI设备分配的第六资源需要包括在上述从节点CPU为第二PCI桥分配的第五资源内,即第五资源包括第六资源,这样从节点的CPU就可以通过访问地址、P2PBridge的资源以及第二PCI桥的第五资源找到该第四PCI设备。之后,从节点CPU为上述已分配第六资源的第四PCI设备加载第四Option ROM和第四驱动,从而获得第二PCI枚举结果,也就是说,该第二PCI枚举结果指的是上述分配了第五资源和第二BUS号的第二PCI桥,和,上述分配了第六资源并且已经加载了第四Option ROM和第四驱动的第四PCI设备。
在上述实施例的基础上,进一步地,作为本发明实施例的第三种可行的实施方式,本实施例涉及的方法是从节点获取自身节点内的第二PCI枚举结果的第三种具体过程,该方法适用于多节点系统的第三种方式,即多节点系统的从节点的部分P2P Bridge下连接的是第二PCI桥,且每个PCI桥下连接至少一个PCI设备,另外一部分P2P Bridge下直接连接的是PCI设备。该方法具体包括:从节点枚举自身节点内第三PCI设备、第二PCI桥和第二PCI桥的第四PCI设备;从节点为第三PCI设备分配第四资源,并为第三PCI设备加载第三Option ROM和第三驱动;从节点为第二PCI桥分配第二BUS号和第五资源,以及,为第四PCI设备分配第六资源,并为第四PCI设备加载第四Option ROM和第四驱动,获得第二PCI枚举结果;其中,第五资源包括第六资源。
具体的,从节点的主线程被激活后,从节点CPU执行PCI枚举代码,枚举从节点内的第三PCI设备,并且,在主节点枚举自身节点内的PCI桥和PCI设备的过程中,由于多节点系统的资源已经按照节点号的不同给各个节点分配了不同的资源,且MMIO地址空间和MMCFG地址空间也按照不同的节点号分在不同的段内,即各个从节点都有其对应的资源。从节点的CPU会给自身所查找到的所有P2P Bridge分配不同的BUS号(BUS号的分配范围为0-0xFF)和资源。这里需要注意的是,从节点的部分P2P Bridge下直接连接是第三PCI设备,因此从节点的CPU为该些第三PCI设备分配的第四资源需要包括在该部分P2P Bridge的资源内;而另外一部分P2P Bridge由于连接的是第二PCI桥,且第二PCI桥下连接了至少一个第四PCI设备,因此从节点的CPU为该些第二PCI桥分配的第五资源应该包括在连接第二PCI桥的这些P2PBridge的资源内,且从节点的CPU为第四PCI设备分配的第六资源应该包括在第五资源内。之后,从节点CPU分别为第三PCI设备加载第三Option ROM和第三驱动,为第四PCI设备加载第四Option ROM和第四驱动。最后,从节点获得第二PCI枚举结果,也就是说,该第二PCI枚举结果为上述分配了第三资源并且已经加载了第三Option ROM和第三驱动的第三PCI设备,和,上述分配了第五资源和第二BUS号的第二PCI桥,和,上述分配了第六资源并且已经加载了第四Option ROM和第四驱动的第四PCI设备。
本发明实施例提供的多节点系统的外部设备互联枚举方法,通过从节点获取自身节点内的第二PCI枚举结果,使得从节点的PCI枚举过程可以和主节点的PCI枚举过程并行进行,主节点根据主节点内的第一PCI枚举结果和各个从节点对应的第二PCI枚举结果构成PCI树执行多节点系统的其他流程,从而加快了多节点系统的启动速度,缩短了多节点系统的启动时间;另一方面,由于主节点和从节点均是各自枚举自己节点内的PCI枚举结果,因此不会造成跨节点地址访问,提供系统的效率;并且,主节点和从节点的PCI枚举互不影响,因此即使增加多个从节点,主从节点的PCI枚举也是并行运行的,对系统的启动时间上不会造成影响,使得多节点系统易于扩展。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
图4为本发明提供的多节点系统的外部设备互联枚举装置实施例一的结构示意图,所述多节点系统包括主节点和至少一个从节点,如图4所示,该装置包括:第一获取模块10,用于获取主节点的第一外部设备互联PCI枚举结果;第二获取模块11,用于获取上述多节点系统内的各从节点对应的第二PCI枚举结果;生成模块12,用于根据上述第一PCI枚举结果和上述各从节点对应第二PCI枚举结果生成上述多节点系统的PCI树。
本发明实施例提供的多节点系统的外部设备互联枚举装置,可以执行上述方法实施例,其实现原理和技术效果类似,在此不再赘述。
图5为本发明提供的多节点系统的外部设备互联枚举装置实施例二的结构示意图,在上述图4所示实施例的基础上,进一步地,所述装置还包括:激活模块13,用于在上述第一获取模块10获取主节点的第一外部设备互联PCI枚举结果之前,激活上述多节点系统内的各个从节点。
本发明实施例提供的多节点系统的外部设备互联枚举装置,可以执行上述方法实施例,其实现原理和技术效果类似,在此不再赘述。
图6为本发明提供的多节点系统的外部设备互联枚举装置实施例三的结构示意图,在上述图5所示实施例的基础上,进一步地,上述第一获取模块10包括:第一枚举单元101,用于枚举上述主节点内的第一PCI设备;第一分配获取单元102,用于为第一PCI设备加载第一Option ROM和第一驱动,获得第一PCI枚举结果。
本发明实施例提供的多节点系统的外部设备互联枚举装置,可以执行上述方法实施例,其实现原理和技术效果类似,在此不再赘述。
进一步地,在上述图6所示实施例的基础上,上述第一获取模块10还包括:第二枚举单元201,用于枚举上述主节点内的第一PCI桥和第一PCI桥的第二PCI设备;第二分配获取单元202,用于为第一PCI桥分配第一总线BUS号和第二资源,为上述第二PCI设备分配第三资源,并为第二PCI设备加载第二Option ROM和第二驱动,获得第一PCI枚举结果;其中,上述第二资源包括上述第三资源。
本发明实施例提供的多节点系统的外部设备互联枚举装置,可以执行上述方法实施例,其实现原理和技术效果类似,在此不再赘述。
进一步地,在上述图6所示实施例的基础上,上述第一获取模块10还包括:第三枚举单元301,用于枚举上述主节点内的第一PCI设备、第一PCI桥和第一PCI桥的第二PCI设备;第三分配获取单元302,用于为第一PCI设备分配第一资源,并为第一PCI设备加载第一Option ROM和第一驱动;并为第一PCI桥分配第一BUS号和第二资源,为上述第二PCI设备分配第三资源,并为上述第二PCI设备加载第二Option ROM和第二驱动,获得第一PCI枚举结果。
进一步地,上述第二PCI枚举结果,包括;上述各从节点内的已分配第四资源的第三PCI设备,且上述第三PCI设备已加载第三Option ROM和第三驱动;和/或,上述各从节点内的已分配第二BUS号和第五资源的第二PCI桥,以及,上述各从节点内的已分配第六资源的第四PCI设备,且上述第四PCI设备已加载第四Option ROM和第四驱动;其中,上述第五资源包括上述第六资源。
本发明实施例提供的多节点系统的外部设备互联枚举装置,可以执行上述方法实施例,其实现原理和技术效果类似,在此不再赘述。
图7为本发明提供的多节点系统的外部设备互联枚举装置实施例四的结构示意图,所述多节点系统包括主节点和至少一个从节点,如图7所示,该装置包括:获取模块40,用于获取自身节点内的第二PCI枚举结果;存储模块41,用于存储上述第二PCI枚举结果,以供上述主节点从上述从节点获取上述第二PCI枚举结果,并使所述主节点根据主节点的第一PCI枚举结果和上述第二PCI枚举结果生成多节点系统的PCI树。
本发明实施例提供的多节点系统的外部设备互联枚举装置,可以执行上述方法实施例,其实现原理和技术效果类似,在此不再赘述。
图8为本发明提供的多节点系统的外部设备互联枚举装置实施例五的结构示意图,在上述图7所示实施例的基础上,上述获取模块40在获取自身节点内的第二PCI枚举结果之前,上述从节点处于等待被所述主节点激活的状态。
本发明实施例提供的多节点系统的外部设备互联枚举装置,可以执行上述方法实施例,其实现原理和技术效果类似,在此不再赘述。
继续参照图8,进一步地,上述获取模块40包括:第一枚举单元401,用于枚举自身节点内的第二PCI设备;第一分配获取单元402,用于为上述第二PCI设备分配第四资源,并为上述第二PCI设备加载第二Option ROM和第二驱动,获得第二PCI枚举结果。
本发明实施例提供的多节点系统的外部设备互联枚举装置,可以执行上述方法实施例,其实现原理和技术效果类似,在此不再赘述。
进一步地,在上述图8所示实施例的基础上,上述获取模块40还包括:第二枚举单元501,用于枚举自身节点内的第二PCI桥和上述第二PCI桥的第四PCI设备;第二分配获取单元502,用于为上述第二PCI桥分配第二总线BUS号和第五资源,以及,为上述第四PCI设备分配第六资源,并为上述第四PCI设备加载第四Option ROM和第四驱动,获得第二PCI枚举结果;其中,上述第五资源包括上述第六资源。
本发明实施例提供的多节点系统的外部设备互联枚举装置,可以执行上述方法实施例,其实现原理和技术效果类似,在此不再赘述。
进一步地,在上述图8所示实施例的基础上,上述获取模块40还包括:第三枚举单元601,用于枚举自身节点内第三PCI设备、第二PCI桥和所述第二PCI桥的第四PCI设备;第三分配获取单元602,用于为上述第三PCI设备分配第四资源,并为上述第三PCI设备加载第三Option ROM和第三驱动;并为上述第二PCI桥分配第二BUS号和第五资源,以及,为上述第四PCI设备分配第六资源,并为上述第四PCI设备加载第四Option ROM和第四驱动,获得第二PCI枚举结果;其中,上述第五资源包括上述第六资源。
本发明实施例提供的多节点系统的外部设备互联枚举装置,可以执行上述方法实施例,其实现原理和技术效果类似,在此不再赘述。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。