本发明涉及存储技术领域,特别涉及一种热添加CPU使能x2APIC的方法和服务器系统。
背景技术:
随着服务器行业的发展,对系统的稳定性要求越来越高,系统容错能力越来越重要。为了实现系统的容错能力,服务器厂商发布的服务器具有的中央处理器(英文全称:Central Processing Unit,英文简称:CPU)热插拔、内存热插拔、PCI-E(PCI-Express)设备热插拔特性便成了服务器的竞争力,目前,高端服务器系统中CPU热插拔已成为不可或缺的特性。
一般来说,服务器系统由多个CPU组成,当一个服务器系统的一个或多个CPU出现致命错误需要移除时,为了不影响整个系统的业务运行,CPU热插拔特性可以保证客户不中断业务,CPU热插拔过程中新添加的CPU需要重新加入到系统并且重新配置,包括寄存器及一些特性,比如中断模式。
APIC(Advanced Programmable Interrupt Controller)是高级可编程中断控制器,xAPIC是服务器系统中一种中断模式,为Intel CPU提供中断传输机制,但是xAPIC只支持8bit的逻辑APIC标识符(ID),不能支持多节点大服务器系统(即超过256个逻辑CPU的服务器系统),而x2APIC是一种扩展的xAPIC中断模式,支持32bit的逻辑x2APIC ID。由于Intel CPU默认的中断传输方式是xAPIC,超过256个逻辑CPU的大服务器系统在启动或热添加时都必须使能x2APIC中断模式。
热添加CPU时主要是系统启动线程(英文全称:System Boot Strap Processor,英文简称:SBSP)运行程序,在使用xAPIC中断模式时,SBSP发处理器之间的中断(Inter-Processor Interrupt,IPI)到热添加CPU的处理器主线程(英文全称:Processor Boot Strap Processor,英文简称:PBSP),使得热添加CPU的PBSP广播IPI到该热添加CPU的所有处理器普通线程(英文全称:Application Processor,英文简称:AP),收集该热添加CPU的所有 AP的x2APIC ID,并返回给SBSP。
现有技术中,当热添加CPU与处理器主线程(英文全称:Processor Boot Strap Processor,英文简称:SBSP)所在的CPU在不同节点(例如除节点0外的其他节点)时,此时热添加CPU的所有线程的x2APIC ID都不能用8bit表示,所以SBSP不能向热添加CPU的PBSP发定点IPI中断,因为热添加CPU上电时默认为xAPIC模式,其APIC ID只有8bit,还未配置正确的APIC ID,而定点IPI中断必须指定APIC ID,此时若发送定点IPI会出现两种情况,以4节点16CPU为例:
(1)指定APIC ID为系统分配的值(0x0140),CPU5PBSP上电默认为APIC模式,APIC ID默认为0x40,PBSP将不能找到相应的APIC ID而导致系统挂死。
(2)指定APIC ID为上电默认值(0x40),将发送到本节点对应的CPU的线程上(CPU 1的PBSP),而不能完成相应功能。
如上所述,现有技术在热添加CPU与SBSP所在的CPU在不同节点时无法实现热添加CPU使能x2APIC。
技术实现要素:
本申请提供了一种热添加CPU使能x2APIC的方法和服务器系统,在热添加CPU与SBSP所在的CPU在不同节点时有效实现了热添加CPU使能x2APIC,实现方式简单。
本申请中,第一方面提供一种热添加CPU使能x2APIC的方法,所述方法应用于服务器系统,所述服务器系统包括第一CPU和第二CPU,所述第一CPU为所述服务器系统的系统启动线程SBSP所在的CPU,所述第二CPU为加入系统拓扑结构且未完成使能x2APIC的热添加CPU,所述第一CPU和所述第二CPU为不同节点中的CPU,所述第一CPU和所述第二CPU预设有一个两者均可访问的同步寄存器,所述方法包括:
所述第一CPU通过所述SBSP在所述同步寄存器保存所述第二CPU的节点标识符ID;
所述第二CPU确定所述同步寄存器中是否保存了所述第二CPU的节点 ID,若是,利用所述第二CPU的节点ID和所述第二CPU的PBSP默认的APIC ID,得到所述第二CPU的PBSP的x2APIC ID,并使能所述第二CPU的PBSP对应的x2APIC寄存器;
所述第一CPU通过所述SBSP向标识为目标x2APIC ID的线程发送定点处理器间中断IPI,所述目标x2APIC ID与所述第二CPU的PBSP的x2APIC ID相同;
所述第二CPU通过自身的PBSP接收所述SBSP发送的定点IPI,并广播IPI到所述第二CPU的所有AP,所述广播IPI中包括所述第二CPU的节点ID,以使得各AP更新自身的x2APIC ID,使能各自对应的x2APIC寄存器,并将更新的x2APIC ID返回给所述第二CPU的PBSP;
所述第二CPU通过自身的PBSP接收所有AP返回的x2APIC ID,并将所述第二CPU的SBSP的x2APIC ID以及所有AP的x2APIC ID,发送给所述SBSP;
所述第一CPU通过所述SBSP接收所述第二CPU的PBSP线程发送的所述第二CPU的PBSP的x2APIC ID和所有AP的x2APIC ID。
从上可知,SBSP所在的第一CPU和第二CPU不在同一个节点,SBSP所在的第一CPU和第二CPU设有两者均可访问的同步寄存器,SBSP通过在同步寄存器保存第二CPU的节点ID后,第二CPU的PBSP在确定同步寄存器中保存了第二CPU的节点ID之后,利用所述节点ID和第二CPU的PBSP默认的APIC ID,得到第二CPU的PBSP的x2APIC ID,并配置使能第二CPU的PBSP对应的x2APIC寄存器,所述SBSP通过同步寄存器中保存的第二CPU的x2APIC ID,发送定点IPI到第二CPU的PBSP,以使得SBSP实现收集第二CPU的PBSP的x2APIC ID和所有AP的x2APIC ID。本申请在热添加CPU与SBSP所在的CPU在不同节点时有效实现了热添加CPU使能x2APIC,实现方式简单有效。
在第一方面的一些可能的实现方式中,在所述第一CPU通过所述SBSP在所述同步寄存器保存所述第二CPU的节点ID之前,所述方法还包括:
所述第一CPU通过所述SBSP选择第二CPU的通用寄存器,作为所述第一CPU与所述第二CPU的同步寄存器。
这样,将第二CPU的通用寄存器作为所述第一CPU与所述第二CPU的同步寄存器,使得第一CPU和第二CPU均可以访问所述同步寄存器,是由于第二CPU访问自身的通用寄存器更加方便,同时由于第一CPU是系统启动线程所在的CPU,设置第二CPU的通用寄存器为所述同步寄存器,可以降低实现难度。
在第一方面的另一些可能的实现方式中,所述同步寄存器中存储有标识所述同步寄存器中是否保存了所述第二CPU的节点ID的目标信息;
在所述第一CPU通过所述SBSP在所述同步寄存器保存所述第二CPU的节点ID之后,所述方法还包括:
所述第一CPU通过所述SBSP设置所述目标信息以标识所述同步寄存器中保存了所述第二CPU的节点ID;
所述第二CPU确定所述同步寄存器中是否保存了所述第二CPU的节点ID,包括:
所述第二CPU通过自身的处理器主线程PBSP通过读取所述目标信息,确定所述同步寄存器中保存了所述第二CPU的节点ID。
这样,在所述同步寄存器中存储有标识所述同步寄存器中是否保存了所述第二CPU的节点ID的目标信息时,第一CPU既可以设置所述目标信息以标识所述同步寄存器中保存了所述第二CPU的节点ID,这样即可触发第二CPU通过读取所述目标信息,进而确定所述同步寄存器中保存了所述第二CPU的节点ID。
可选的,所述同步寄存器的第一个bit位信息为所述目标信息,当所述第一个bit位信息为1时,标识所述同步寄存器中保存了所述第二CPU的节点ID;
所述第一CPU通过所述SBSP设置所述目标信息以标识所述同步寄存器中保存了所述第二CPU的节点ID,包括:
所述第一CPU通过所述SBSP将所述同步寄存器的第一个bit位信息设为1。
由于,第二CPU的通用寄存器是32位,有五个二进制bit位,例如00000,将第一个bit位信息设为所述目标信息,方便读取确定,当然,本申请中,所 述目标信息也可以在通用寄存器的其它bit位,例如最后一位,此处不作限定。
进一步可选的,当所述服务器系统中每个节点中包括四个CPU时,所述第一CPU通过所述SBSP在所述同步寄存器保存所述第二CPU的节点ID,包括:
所述第一CPU通过所述SBSP在所述同步寄存器的第二个bit位和第三个bit位保存所述第二CPU的节点ID。
第二方面,提供了一种服务器系统,所述服务器系统包括第一CPU和第二CPU,所述第一CPU为所述服务器系统的系统启动线程SBSP所在的CPU,所述第二CPU为加入系统拓扑结构且未完成使能x2APIC的热添加CPU,所述第一CPU和所述第二CPU为不同节点中的CPU,所述第一CPU和所述第二CPU预设有一个两者均可访问的同步寄存器;
所述第一CPU用于通过所述SBSP在所述同步寄存器保存所述第二CPU的ID;
所述第二CPU用于确定所述同步寄存器中是否保存了所述第二CPU的节点ID,若是,利用所述第二CPU的节点ID和所述第二CPU的PBSP默认的APIC ID,得到所述第二CPU的PBSP的x2APIC ID,并使能所述第二CPU的PBSP对应的x2APIC寄存器;
所述第一CPU还用于通过所述SBSP向标识为目标x2APIC ID的线程发送定点处理器间中断IPI,所述目标x2APIC ID与所述第二CPU的PBSP的x2APIC ID相同;
所述第二CPU还用于通过自身的PBSP接收所述SBSP发送的定点IPI,并广播IPI到所述第二CPU的所有AP,所述广播IPI中包括所述第二CPU的节点ID,以使得各AP更新自身的x2APIC ID,使能各自对应的x2APIC寄存器,并将更新的x2APIC ID返回给所述第二CPU的PBSP;
所述第二CPU还用于通过自身的PBSP接收所有AP返回的x2APIC ID,并将所述第二CPU的SBSP的x2APIC ID以及所有AP的x2APIC ID,发送给所述SBSP;
所述第一CPU还用于通过所述SBSP接收所述第二CPU的PBSP线程发送的所述第二CPU的PBSP的x2APIC ID和所有AP的x2APIC ID。
本申请第二方面中,SBSP所在的第一CPU和第二CPU不在同一个节点,第一CPU和第二CPU设有两者均可访问的同步寄存器,SBSP通过在同步寄存器保存第二CPU的节点ID后,第二CPU的PBSP在确定同步寄存器中保存了第二CPU的节点ID之后,利用所述节点ID和热添加CPU的PBSP默认的APIC ID,得到第二CPU的PBSP的x2APIC ID,并配置使能第二CPU的PBSP对应的x2APIC寄存器,所述SBSP通过同步寄存器中保存的第二CPU的x2APIC ID,发送定点IPI到第二CPU的PBSP,以使得SBSP实现收集第二CPU的PBSP的x2APIC ID和所有AP的x2APIC ID。本申请在热添加CPU与SBSP所在的CPU在不同节点时有效实现了热添加CPU使能x2APIC,实现方式简单有效。
在第二方面的一些可能的实现方式中,所述第一CPU还用于在所述第一CPU通过所述SBSP在所述同步寄存器保存所述第二CPU的节点ID之前,通过所述SBSP选择第二CPU的通用寄存器,作为所述第一CPU与所述第二CPU的同步寄存器。
在第二方面的另一些可能的实现方式中,所述同步寄存器中存储有标识所述同步寄存器中是否保存了所述第二CPU的节点ID的目标信息;
所述第一CPU还用于在所述第一CPU通过所述SBSP在所述同步寄存器保存所述第二CPU的节点ID之后,通过所述SBSP设置所述目标信息以标识所述同步寄存器中保存了所述第二CPU的节点ID;
所述第二CPU具体用于通过自身的处理器主线程PBSP通过读取所述目标信息,确定所述同步寄存器中保存了所述第二CPU的节点ID。
可选的,所述同步寄存器的第一个bit位信息为所述目标信息,当所述第一个bit位信息为1时,标识所述同步寄存器中保存了所述第二CPU的节点ID;
所述第一CPU具体用于通过所述SBSP将所述同步寄存器的第一个bit位信息设为1。
进一步可选的,当所述服务器系统中每个节点中包括四个CPU时,所述第一CPU具体用于通过所述SBSP在所述同步寄存器的第二个bit位和第三个 bit位保存所述第二CPU的节点ID。
从以上技术方案可以看出,本申请具有以下优点:
本申请中,在热添加CPU与SBSP所在的CPU在不同节点时有效实现了热添加CPU使能x2APIC,实现方式简单有效。
附图说明
图1是本申请中服务器系统的一个实施例示意图;
图2是本申请中热添加CPU使能x2APIC的方法的一个实施例示意图;
图3是本申请中服务器系统的一个实施例示意图。
具体实施方式
本申请提供了一种热添加CPU使能x2APIC的方法和服务器系统,在热添加CPU与SBSP所在的CPU在不同节点时有效实现了热添加CPU使能x2APIC,实现方式简单有效。
为了使本技术领域的人员更好地理解本发明方案,下面将结合本申请中的附图,对本申请中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
为了方便理解本发明实施例,首先,在此介绍本发明实施例描述中会引入的几个要素;
固件(Firmware):就是写入可擦写只读存储器(Eraseable Read Only Me mory,EROM)或电可擦可编程只读存储器(Electrically Erasable Programm able Read-Only Memory,EEPROM)中的程序,固件担任着一个系统最基础最底层工作的软件,而在硬件设备中,固件就是硬件设备的灵魂,因为一些硬件设备除了固件以外没有其它软件组成,因此固件也就决定着硬件设备的功能及性能。
IPI:Inter-Processor Interrupt(处理器之间的中断),IPI是一种特别的中断,在对称多处理器(SMP)环境下,它可以被任意一个处理器用来对另一个处理器产生中断。
APIC:(Advanced Programmable Interrupt Control)高级可编程中断控制器,通常是指Intel(英特尔)CPU的中断控制器;一般由两部分组成:
IO APIC:位于南桥中,用于处理桥上的设备所产生的各种中断。它用来接收IO设备所产生的中断,并将其传送给Local APIC,通常有24个输入。
Local APIC:位于CPU中,每个CPU都有一个,负责传送中断至指定的处理器,Local APIC可以接收以下中断源所发出的中断:1.外部的中断设备:
这些IO设备连接到IO APIC的INTIN pin,其产生的中断请求信息通过IO APIC传送到Local APIC;2.处理器之间的中断(IPI):处理器通过写ICR(Interrupt Command Register)可以触发IPI。
目前,APIC架构的包括如下版本:
(1)APIC
Intel P6系列CPU使用,Local APIC与IO APIC之间通过APIC BUS(总线)通信。
(2)xAPIC
Intel Pentium 4及至强Xeon系列CPU使用,Local APIC与IO APIC之间通过System BUS通信,xAPIC是APIC架构中一些功能的扩展或修改。
(3)x2APIC
x2APIC是xAPIC架构的进一步扩展,主要是提升了处理器寻址能力 (processor address ability),x2APIC架构提供向后兼容(即兼容xAPIC)和向前扩展(即未来Intel新平台)的能力。
在xAPIC模式中,寄存器是通过内存映射到一段物理地址。有一个默认值,防止同其他地址冲突,这个地址又可以重新指定到另外一个地方,BIOS开发人员在对付APIC时可能会用到这个功能。
本申请中,多节点大服务器系统指的是超过256个逻辑CPU的多节点服务器系统,如图1所示,为一种服务器系统中的示意图,其中,每4个CPU是一个节点(如图1中CPU0、CPU1、CPU2、CPU3),一般情况下,插在同一个单板上的CPU为同一个节点的CPU,不通过节点控制器(Node Controller,NC)就能够互相通信的CPU属于同一个节点,例如通过CPU之间的快速通道互联(英文全称:Quick Path Interconnect,英文简称:QPI)总线进行CPU间的通信。同一个节点的CPU连接同一个NC,属于同一个QPI,Cpu间以及Cpu和NC都通过QPI总线互连。
每个服务器系统中会包括一个系统启动线程(英文全称:System Boot Strap Processor,英文简称:SBSP),该系统启动线程位于多节点大服务器系统中某一节点中的某一个CPU中,一般情况下,SBSP默认位于节点0中的CPU0(第一个节点的第一个CPU)中。
服务器系统中的每个CPU都包括一个处理器主线程(英文全称:Processor Boot Strap Processor,英文简称:PBSP)和若干个处理器普通线程(英文全称:Application Processor,英文简称:AP),支持x2APIC模式的每个CPU的PBSP和所有AP都有一个对应的使能x2APIC寄存器,一般情况下,使能x2APIC寄存器的寄存器中存储的信息为0时,代表未使能,1代表使能,同时,服务器系统中的每个CPU都包括一个或多个32位通用寄存器。
服务器系统的一个或多个CPU出现致命错误需要移除时,为了不影响整个系统的业务运行,CPU热插拔特性可以保证客户不中断业务,CPU热插拔过程中新添加的CPU需要重新加入到系统并且重新配置,比如中断模式,本申请中主要关注中断模式的配置。
一般情况下,热添加CPU要想支持x2APIC中断模式,热添加CPU需要 使能x2APIC,即热添加CPU的PBSP和所有AP都需要更新x2APICID,使能x2APIC寄存器,并将更新的所有x2APICID由热添加CPU的PBSP收集返回给SBSP,从而实现热添加CPU使能x2APIC。
现有方案中,在热添加CPU与SBSP所在的CPU在不同节点时无法实现热添加CPU使能x2APIC,基于此,本申请提供一种热添加CPU使能x2APIC的方法、CPU及服务器系统。
下面首先介绍本申请中热添加CPU使能x2APIC的方法的实施例。
图2为本申请中使能x2APIC的方法的一个实施例,所述方法应用于服务器系统,所述服务器系统包括第一CPU和第二CPU,所述第一CPU为所述服务器系统的系统启动线程SBSP所在的CPU,所述第二CPU为加入系统拓扑结构且未完成使能x2APIC的热添加CPU,所述第一CPU和所述第二CPU为不同节点中的CPU,所述第一CPU和所述第二CPU之间预设有一个两者均可访问的同步寄存器,所述方法包括:
201、第一CPU通过SBSP在所述同步寄存器保存所述第二CPU的节点ID;
本实施例是在服务器系统在拓扑发现完成后,第一CPU的SBSP在热添加CPU加入服务器系统拓扑结构后,可以获知热添加CPU的节点ID,因此,本实施例中,第一CPU通过SBSP知道第二CPU的节点ID后,可以在所述同步寄存器保存所述第二CPU的节点ID。
本实施例中,在所述第一CPU通过所述SBSP在所述同步寄存器保存所述第二CPU的节点ID之前,所述方法还可以包括:所述第一CPU通过所述SBSP选择第二CPU的通用寄存器,作为所述第一CPU与所述第二CPU的同步寄存器,即此时,第二CPU的一个32位通用寄存器作为所述同步寄存器,可以理解的是,本实施例中,也可以是将第一CPU的通用寄存器作为所述同步寄存器,或者所述同步寄存器为所述第一CPU和所述第二CPU均可访问的独立寄存器,此处不作限定。
可选的,当所述系统中每个节点中包括四个CPU时,所述第一CPU通过所述SBSP在所述同步寄存器保存所述第二CPU的节点ID,可以包括:所述第一CPU通过所述SBSP在所述同步寄存器的第四位到第八位保存所述第二 CPU的节点ID。
202、所述第二CPU确定所述同步寄存器中是否保存了所述第二CPU的节点ID,若是,执行步骤203;
在所述同步寄存器中存储有标识所述同步寄存器中是否保存了所述第二CPU的节点ID的目标信息时,在所述第一CPU通过所述SBSP在所述同步寄存器保存所述第二CPU的节点ID之后,所述方法还可以包括:
所述第一CPU通过所述SBSP设置所述目标信息以标识所述同步寄存器中保存了所述第二CPU的节点ID;
此时,所述第二CPU确定所述同步寄存器中是否保存了所述第二CPU的节点ID,包括:
所述第二CPU通过自身的处理器主线程PBSP通过读取所述目标信息,确定所述同步寄存器中保存了所述第二CPU的节点ID。
例如,假设所述同步寄存器的第一个bit位信息可以设置为0或1,1代表所述同步寄存器中保存了所述第二CPU的节点ID,此时SBSP将所述同步寄存器中的第一个bit位设为1即确定所述同步寄存器中保存了所述第二CPU的节点ID,所述第二CPU即可通过自身的PBSP通过读取所述第一个bit位,确定所述同步寄存器中保存了所述第二CPU的节点ID。
在确定所述同步寄存器中保存了所述第二CPU的节点ID之后,第二CPU可以通过自身的PBSP读取所述同步寄存器中保存的所述第二CPU的节点ID;
203、所述第二CPU利用所述第二CPU的节点ID和所述第二CPU的PBSP默认的APIC ID,得到所述第二CPU的PBSP的x2APIC ID,并使能所述第二CPU的PBSP对应的x2APIC寄存器;
所述第二CPU利用所述第二CPU的节点ID和所述第二CPU的PBSP默认的APIC ID,得到所述第二CPU的PBSP的x2APIC ID的过程,即利用第二CPU的节点ID和所述第二CPU的PBSP默认的APIC ID更新第二CPU的PBSP的x2APIC ID的过程,此时,第二CPU的PBSP进入等待激活状态。
其中,所述第二CPU利用所述第二CPU的节点ID和所述第二CPU的PBSP默认的APIC ID,得到所述第二CPU的PBSP的x2APIC ID具体可以是:
第二CPU通过自身的PBSP将所述第二CPU的节点ID和所述第二CPU的PBSP默认的APIC ID合并后,得到所述第二CPU的PBSP的x2APIC ID;
例如,同步寄存器为32位,可以用5个bit位表示,其中第一个bit位为所述同步寄存器中标识是否触发所述第二CPU的热添加流程的目标信息,如0或1,第二CPU的节点ID保存在同步寄存器的第二个bit位和第三个bit位,如第一个节点用节点ID 00表示,第二个节点用节点ID 01表示,而第二CPU的PBSP默认的APIC ID为8位,例如第二CPU默认APIC ID为0x40,第二CPU在节点1中,则第二CPU的节点ID和所述第二CPU的PBSP默认的APIC ID合并即可得到第二CPU的PBSP的x2APIC ID:0x0140。
204、所述第一CPU通过所述SBSP向标识为目标x2APIC ID的线程发送定点IPI,所述目标x2APIC ID与所述第二CPU的PBSP的x2APIC ID相同;
SBSP在热添加CPU加入系统拓扑结构后,可以获知热添加CPU的具体位置,例如是哪块单板上的哪个CPU,此时SBSP可以获知PBSP所在节点ID和默认的APIC ID,因此可知道由热添加CPU的PBSP所在节点号和默认的APIC ID的x2APIC ID,因此,本实施例中,SBSP可以知道第二CPU(热添加CPU)的x2APIC ID,由于上述步骤中第二CPU的PBSP配置成功了x2APIC ID,因此,第一CPU通过SBSP可以直接利向标识为目标x2APIC ID的线程发送定点IPI,由于所述目标x2APIC ID与所述第二CPU的PBSP的x2APIC ID相同,因此,向标识为目标x2APIC ID的线程发送定点IPI即向第二CPU的PBSP发送定点IPI,第二CPU的PBSP可以接收到所述第一CPU通过SBSP发送的定点IPI。
205、所述第二CPU通过自身的PBSP接收所述SBSP发送的定点IPI,并广播IPI到所述第二CPU的所有AP;
所述广播IPI中包括所述第二CPU的节点ID,以使得各AP更新自身的x2APIC ID,并使能各自对应的x2APIC寄存器,将更新的x2APIC ID返回给所述第二CPU的PBSP;
206、第二CPU通过自身的PBSP接收所有AP返回的x2APIC ID;
207、第二CPU通过自身的PBSP将所述第二CPU的SBSP的x2APIC ID以及所有AP的x2APIC ID,发送给所述SBSP;
此时,所述SBSP接收所述第二CPU的PBSP线程发送的所述第二CPU的PBSP的x2APIC ID和所有AP的x2APIC ID,完成第二CPU热添加使能x2APIC。
本申请中,服务器系统主线程SBSP所在的第一CPU和第二CPU不在同一个节点,SBSP所在的第一CPU和第二CPU设有两者均可访问的同步寄存器,SBSP通过在同步寄存器保存第二CPU的节点ID后,第二CPU的PBSP在确定同步寄存器中保存了第二CPU的节点ID之后,利用所述节点ID和第二CPU的PBSP默认的APIC ID,得到第二CPU的PBSP的x2APIC ID,并配置使能第二CPU的PBSP对应的x2APIC寄存器,所述SBSP通过同步寄存器中保存的第二CPU的x2APIC ID,发送定点IPI到第二CPU的PBSP,以使得SBSP实现收集第二CPU的PBSP的x2APIC ID和所有AP的x2APIC ID。本申请在热添加CPU与SBSP所在的CPU在不同节点时有效实现了热添加CPU使能x2APIC,实现方式简单有效。
下面介绍本申请中服务器系统的实施例。
图3为本申请中服务器系统的一个实施例,所述服务器系统300包括第一CPU 301和第二CPU 302,所述第一CPU 301为所述服务器系统的系统启动线程SBSP所在的CPU,所述第二CPU 302为加入系统拓扑结构且未完成使能x2APIC的热添加CPU,所述第一CPU 301和所述第二CPU 302为不同节点中的CPU,例如,如图3所示(为便于举例说明,图中服务器系统仅示出两个节点,每个节点中仅示出了一个CPU),第一CPU可以在第一节点,第二CPU可以在第二节点,第一节点与第二节点是不同的节点,所述第一CPU301和所述第二CPU 302预设有一个两者均可访问的同步寄存器;
所述第一CPU用于通过所述SBSP在所述同步寄存器保存所述第二CPU的ID;
所述第二CPU用于确定所述同步寄存器中是否保存了所述第二CPU的节点ID,若是,利用所述第二CPU的节点ID和所述第二CPU的PBSP默认的APIC ID,得到所述第二CPU的PBSP的x2APIC ID,并使能所述第二CPU的PBSP对应的x2APIC寄存器;
所述第一CPU还用于通过所述SBSP向标识为目标x2APIC ID的线程发 送定点处理器间中断IPI,所述目标x2APIC ID与所述第二CPU的PBSP的x2APIC ID相同;
所述第二CPU还用于通过自身的PBSP接收所述SBSP发送的定点IPI,并广播IPI到所述第二CPU的所有AP,所述广播IPI中包括所述第二CPU的节点ID,以使得各AP更新自身的x2APIC ID,使能各自对应的x2APIC寄存器,并将更新的x2APIC ID返回给所述第二CPU的PBSP;
所述第二CPU还用于通过自身的PBSP接收所有AP返回的x2APIC ID,并将所述第二CPU的SBSP的x2APIC ID以及所有AP的x2APIC ID,发送给所述SBSP;
所述第一CPU还用于通过所述SBSP接收所述第二CPU的PBSP线程发送的所述第二CPU的PBSP的x2APIC ID和所有AP的x2APIC ID。
本申请中,SBSP所在的第一CPU和第二CPU不在同一个节点,第一CPU和第二CPU设有两者均可访问的同步寄存器,SBSP通过在同步寄存器保存第二CPU的节点ID后,第二CPU的PBSP在确定同步寄存器中保存了第二CPU的节点ID之后,利用所述节点ID和热添加CPU的PBSP默认的APIC ID,得到第二CPU的PBSP的x2APIC ID,并配置使能第二CPU的PBSP对应的x2APIC寄存器,所述SBSP通过同步寄存器中保存的第二CPU的x2APIC ID,发送定点IPI到第二CPU的PBSP,以使得SBSP实现收集第二CPU的PBSP的x2APIC ID和所有AP的x2APIC ID。本申请在热添加CPU与SBSP所在的CPU在不同节点时有效实现了热添加CPU使能x2APIC,实现方式简单有效。
在本发明一些实施例中,所述第一CPU还用于在所述第一CPU通过所述SBSP在所述同步寄存器保存所述第二CPU的节点ID之前,通过所述SBSP选择第二CPU的通用寄存器,作为所述第一CPU与所述第二CPU的同步寄存器。
可选的,所述同步寄存器中存储有标识所述同步寄存器中是否保存了所述第二CPU的节点ID的目标信息;
所述第一CPU还用于在所述第一CPU通过所述SBSP在所述同步寄存器保存所述第二CPU的节点ID之后,通过所述SBSP设置所述目标信息以标识 所述同步寄存器中保存了所述第二CPU的节点ID;
所述第二CPU具体用于通过自身的处理器主线程PBSP通过读取所述目标信息,确定所述同步寄存器中保存了所述第二CPU的节点ID。
可选的,所述同步寄存器的第一个bit位信息为所述目标信息,当所述第一个bit位信息为1时,标识所述同步寄存器中保存了所述第二CPU的节点ID;
所述第一CPU具体用于通过所述SBSP将所述同步寄存器的第一个bit位信息设为1。
在本发明的一些实施例中,当所述服务器系统中每个节点中包括四个CPU时,所述第一CPU具体用于通过所述SBSP在所述同步寄存器的第二个bit位和第三个bit位保存所述第二CPU的节点ID。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作 为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。