本发明涉及计算机数据处理及集成电路领域,尤其涉及一种支持pcie switch子树故障倒换的bus资源分配方法、系统及装置。
背景技术:
1、在基于pcie的高可用系统中,要想实现高可用就要避免使用单点,假设单台服务器再强应用优化再到极致,只要单台服务器宕机,基本就不可用,只有在冗余备份上,其他备用的服务器才可以顶替上以保证可用性,才可能实现高可用,现有技术中一般采用主备模式与主主模式进行pcie系统资源系统的部署,从而保证系统的高可用性。
2、在高可用的主主模式下,当其中一个host出现故障的时候,由另一个host对故障host下的pcie设备进行接管,从而保证系统的高可用性。然而当要接管故障host下的pcie子树时,在不影响原先host下的pcie设备的正常工作的情况下,需要接管侧的端口能够预留足够的bus资源,用来保证被接入的pcie子树能够在新host中重新枚举出来,这时候就可以让新host可以管控到故障侧的pcie设备;在主主模式下,必须同时保证两个主host端的接口也能够预留bus资源(因为不知道谁接管谁,可以互相接管)。
3、在目前的linux版本的pcie子系统中,支持hotplug的端口的bus的预留是固定的,当接入的pcie子树中含有支持hotplug能力的端口时,会分配固定的预留资源,从而导致资源分配不足(因为倒换接口预留为a,则如果子树含有一个hotplug端口的话,直接将a资源占用了,从而导致其他端口无法分配到bus资源)。从而导致主主模式下故障切换失败,影响整个系统的高可用性,因此如何进行合理的bus分配变得尤为重要。
技术实现思路
1、有鉴于此,为解决上述现有技术中存在的linux pcie子树热插入的缺点,本发明提供了一种针对pcie switch子树故障倒换的bus资源分配方法、系统及装置。具体而言,本发明提供了以下技术特征:
2、一方面,本发明提供了一种故障倒换bus资源分配方法,所述方法包括:
3、s1、在第一switch上预留第二host上的pcie子树资源;在第二switch上预留第一host的pcie子树资源;在所述第一host及第二host之间做保活,并在所述第一switch上的第二倒换口及第二switch上的第一倒换口均预留资源;
4、s2、当第一host检测到第二host出现故障时,触发故障切换,进入步骤s3;
5、s3、基于上一级pci桥下的bus资源以及pci桥集合,遍历第二host的pcie子树并为普通pci桥和热插拔pci桥分配bus资源,并验证各级bus资源是否分配成功;
6、当第二host的pcie子树遍历完毕并且bus资源分配成功后,执行步骤s4,否则重复执行s3;
7、s4、将原故障的第二host隔离,并拆除倒换口,完成对整个第二host上的pcie子树的接管。
8、优选地,所述第一host与第一switch的上行口相连,所述第二host与第二switch的上行口相连;
9、所述第一switch与第二switch之间通过倒换口相连。
10、优选地,所述s3进一步包括:
11、s301、获取上一级pci桥的bus资源集合rset = {a,a+1,…,b},其中,已分配pci桥集合rassigned = {m,m+1,…,n},未分配pci桥集合rnassigned = {h, h+1,…,g},则已分配pci桥集合占用的bus资源集合为rset1 = {a, a+1,…,n-m},剩余可用bus资源集合为rremain = {n-m+1,…,b};
12、其中,a、b、m、n、h、g为正整数;
13、s302、在未分配pci桥集合rnassigned中,普通桥集合rnornal = {h,h+1,…,l},热插拔桥集合 rhotplug = {l+1,l+2,…,g};
14、s303、为每个普通桥分配1个bus资源,并为每个热插拔桥分配bus资源;并形成上一级pci桥的子树集合st和对应的预留资源集合bt;
15、s304、获取本级各pci桥下的子树端口个数,形成对应的子树集合pt;
16、s305、基于预留资源集合bt及子树集合pt,验证本级bus资源分配是否成功;
17、s306、遍历第二host的pcie子树,直至完成bus资源分配。
18、优选地,所述s4进一步包括:
19、s401、拆除第一switch的第一倒换口;
20、s402、重新扫描可以看到的第二switch端的倒换口;
21、s403、通过s402中扫描到的第二switch端的倒换口,将第二host隔离;
22、s404、拆除第二switch端的倒换口,并触发本地端口下的总线复位;
23、s405、重新扫描bus,完成对整个第二host上的pcie子树的接管。
24、优选地,所述s303中,为每个热插拔桥分配bus资源的数量为:
25、。
26、优选地,所述s305中,验证本级bus资源分配是否成功的方式为:
27、将预留资源集合bt与子树集合pt对应位置上的元素进行比较,如果pi > bi,则分配失败,否则分配成功,记结果集合为rt={r1,r2,…,ri,…,rn};若ri全部为成功,则本级bus资源分配成功;
28、其中,pi为子树集合pt中的第i个元素,bi为预留资源集合bt中的第i个元素。
29、优选地,所述s403中,将第二host隔离的方式为:
30、将第二switch上的倒换口的配置转移到第二host一侧的pcie交换芯片的上行口上,以完成隔离。
31、优选地,若本级bus资源分配失败,则发送报错信息,并重新启动bus资源分配。
32、另一方面,本发明还提供了一种故障倒换bus资源分配系统,所述系统包括:
33、包含第一host的第一switch,以及包含第二host的第二switch;在第一switch上预留第二host上的pcie子树资源;在第二switch上预留第一host的pcie子树资源;在所述第一host及第二host之间做保活,并在所述第一switch上的第二倒换口及第二switch上的第一倒换口均预留资源;
34、故障切换模块,用于当第一host检测到第二host出现故障时,触发故障切换;
35、bus资源分配模块,基于上一级pci桥下的bus资源以及pci桥集合,遍历第二host的pcie子树并为普通pci桥和热插拔pci桥分配bus资源,并验证各级bus资源是否分配成功;以及
36、当第二host的pcie子树遍历完毕并且bus资源分配成功后,触发倒换接入模块进行host2子树的倒换接入;
37、倒换接入模块,用于当bus资源分配成功后,将原故障的第二host隔离,并拆除倒换口,完成对整个第二host上的pcie子树的接管。
38、优选地,所述第一host与第一switch的上行口相连,所述第二host与第二switch的上行口相连;所述第一switch与第二switch之间通过倒换口相连。
39、第三方面,本发明还提供了一种故障倒换bus资源分配装置,所述装置包括至少两个pcie交换芯片,以及存储器,所述pcie交换芯片调用所述存储器中的指令,以执行如上所述的一种故障倒换bus资源分配方法;所述存储器设置于所述pcie交换芯片中,或者独立设置。
40、与现有技术相比,本发明提供的bus资源预留分配方案,用户可以保留倒换端的pcie业务不受影响,有故障侧的pcie子树可以快速热接入到倒换端的pcie树中,从而保证pcie服务器系统的健壮性。相比当前linux内核的bus分配算法,本方案至少具有以下优点:
41、(1)对于故障倒换流程无需全部重起设备就可以实现故障侧业务快速恢复;(2)解决了带热插拔能力的pcie子树的资源预留问题,可以实现pcie子树的动态接入,无需重起整个系统。
42、本方案特别适用于一些数据中心的服务器中的pcie热备处理,可以大大提升系统的健壮性,实现1+1等冗余设计以及环境的搭建,最终使得数据中心系统整体可靠性将得到极大的提升。