中央处理器热插拔的实现方法及装置制造方法

文档序号:6524209阅读:173来源:国知局
中央处理器热插拔的实现方法及装置制造方法
【专利摘要】本发明实施例提供一种中央处理器热插拔的实现方法及装置,该方法包括:Primary操作系统实例为Secondary操作系统实例配置热插入初始化代码,;Primary操作系统实例向目标CPU发送处理器间中断IPI,以触发目标CPU进行热插入初始化,热插入初始化为目标CPU进行热插入时的初始化过程;Primary操作系统实例检测目标CPU是否完成热插入初始化;若Primary操作系统实例检测到目标CPU完成热插入初始化,则向Secondary操作系统实例发送中断,以使Secondary操作系统实例热插入目标CPU,实现在Secondary操作系统内实现CPU的Hot?Plug。
【专利说明】中央处理器热插拔的实现方法及装置
【技术领域】
[0001]本发明实施例涉及通信领域,尤其涉及一种中央处理器热插拔的实现方法及装置。
【背景技术】
[0002]随着计算机技术的不断发发展,在一个中央处理器(Central Processing Unit,CPU)上部署多个内核(core)形成具有强大处理能力的多核中央处理器,包括多个多核处理器的计算机系统称为多处理器操作系统。多处理器操作系统中,首先启动的操作系统实例为原始(Primary)操作系统实例,后续启动的一个或多个操作系统实例称为第二(Secondary)操作系统实例。当需要为Secondary操作系统实例运行时,可能需求从Primary操作系统实例获取CPU并启动该CPU即需要热插入(Hot Plug)。
[0003]现有的多处理器操作系统,如Linux多处理器操作系统,为了实现Hot Plug,需要调用一系列函数完成整个CPU的启动过程。该过程中,负责热插入过程的CPU为主CPU,待启动的CPU为目标CPU,目标CPU接收到主CPU发送的处理器间中断(Inter-ProcessorInterrupt, IPI)后,从低地空间执行跳板(Trampoline)进入保护模式,再由主CPU进行一系列的初始化操作,将目标CPU纳入系统资源池。然后,目标CPU调度Idle进程,完成启动。
[0004]然而,该Hot Plug过程中,由于低地址空间由Primary操作系统实例管理,而Primary操作系统实例与Secondary操作系统实例属于两个不同的操作系统(OperatingSystem, OS)空间,Secondary操作系统实例不能占用Primary操作系统实例管理的低地址空间。因此,现有技术仅实现了 Primary操作系统内CPU的Hot Plug,而Secondary操作系统实例由于不能自主的将系统资源池中的CPU从实模式切换到保护模式,进而无法在运行过程中启动目标CPU,即无法在Secondary操作系统实例内实现CPU的Hot Plug。

【发明内容】

[0005]本发明实施例提供一种中央处理器热插拔的实现方法及装置,实现CPU在Secondary操作系统实例内的Hot Plug。
[0006]第一个方面,本发明实施例提供一种中央处理器热插拔的实现方法,适用于具有原始Primary操作系统实例与至少一个第二 Secondary操作系统实例的多处理器操作系统,该方法包括:
[0007]所述Primary操作系统实例为所述Secondary操作系统实例配置热插入初始化代码,所述热插入初始化代码包括在所述Secondary操作系统中插入目标中央处理器CPU时,所述目标CPU进行热插入所需的功能性代码;
[0008]所述Primary操作系统实例向所述目标CPU发送处理器间中断IPI,以触发所述目标CPU进行热插入初始化,所述热插入初始化为所述目标CPU进行热插入时的初始化过程;
[0009]所述Primary操作系统实例检测所述目标CPU是否完成所述热插入初始化;[0010]若所述Primary操作系统实例检测到所述目标CPU完成所述热插入初始化,则向所述Secondary操作系统实例发送中断,以使所述Secondary操作系统实例热插入所述目标 CPU。
[0011]在第一个方面的第一种可能的实现方式中,所述Primary操作系统实例为所述Secondary操作系统实例配置热插入初始化代码,包括:
[0012]所述Primary操作系统实例在所述Primary操作系统实例的机器物理地址配置所述热插入初始化代码;
[0013]所述Primary操作系统实例在所述Secondary操作系统实例的第一物理地址配置所述热插入初始化代码,所述第一物理地址为低地址;
[0014]所述Primary操作系统实例在所述Secondary操作系统实例的第二物理地址配置所述热插入初始化代码,所述第二物理地址为低地址,所述第一物理地址与所述第二物理地址为不同的低地址。
[0015]结合第一个方面的第一种可能的实现方式,在第一个方面的第二种可能的实现方式中,所述Primary操作系统实例向所述目标CPU发送处理器间中断IPI,以触发所述目标CPU进行热插入初始化,包括:
[0016]所述Primary操作系统实例向所述目标CPU发送处理器间中断IPI,以触发所述目标CPU在所述机器物理地址执行所述热插入初始化代码,从而完成实模式到保护模式的转换;
[0017]所述Primary操作系统实例向所述目标CPU发送处理器间中断IPI,以触发所述目标CPU在所述第一物理地址执行所述热插入初始化代码,从而完成从所述Primary操作系统实例的空间到Secondary操作系统实例的空间的转换;
[0018]所述Primary操作系统实例向所述目标CPU发送处理器间中断IPI,以触发所述目标CPU在所述第二物理地址执行所述热插入初始化代码,并执行处理器暂停指令HLT。
[0019]结合第一个方面、第一个方面的第一种或第二种可能的实现方式,在第一个方面的第三种可能的实现方式中,所述Primary操作系统实例为所述Secondary操作系统实例配置热插入初始化代码之前,还包括:
[0020]所述Primary操作系统实例判断所述Secondary操作系统实例中的CPU数量是否小于预设的阀值;
[0021]若小于,则所述Primary操作系统实例为所述Secondary操作系统实例选择所述目标CPU。
[0022]结合第一个方面的第三种可能的实现方式,在第一个方面的第四种可能的实现方式中,所述Primary操作系统实例为所述Secondary操作系统实例选择所述目标CPU,包括:
[0023]所述Primary操作系统实例根据CPU分配状态位图,为所述Secondary操作系统实例选择所述目标CPU,所述CPU分配状态位图记录所述多处理器操作系统中的各CPU的分配状态。
[0024]第二个方面,本发明实施例提供一种中央处理器热插拔的实现方法,适用于具有原始Primary操作系统实例与至少一个第二 Secondary操作系统实例的多处理器操作系统,该方法包括:[0025]所述Secondary操作系统实例清空目标CPU上的工作队列,以使得所述目标CPU执行处理器暂停指令HLT;
[0026]所述Secondary操作系统实例将所述目标CPU标识为空闲CPU ;
[0027]所述Secondary操作系统实例向所述Primary操作系统实例发送所述目标CPU的标识,以使得所述Primary操作系统实例将所述目标CPU存储到所述多处理系统的CPU资源池。
[0028]在第二个方面的第一种可能的实现方式中,所述Secondary操作系统实例清空目标CPU上的工作队列,以使得所述目标CPU执行处理器暂停指令HLT之前,包括:
[0029]所述Secondary操作系统实例选择目标中央处理器CPU ;
[0030]结合第二个方面或第二个方面的第一种可能的实现方式中,所述Secondary操作系统实例将所述目标CPU标识为空闲CPU之后,所述Secondary操作系统实例向所述Primary操作系统实例发送所述目标CPU的标识之前,包括:
[0031]所述Secondary操作系统实例判断是否需要将所述目标CPU返回给所述Primary操作系统实例;
[0032]Secondary操作系统实例向Primary操作系统实例发送目标CPU的标识,包括:
[0033]若Secondary操作系统实例判断判断出需要将目标CPU返回给Primary操作系统实例,则向所述Primary操作系统实例发送目标CPU的标识。
[0034]第三个方面,本发明实施例提供一种中央处理器热插拔的实现装置,包括:
[0035]配置模块,用于为所述Secondary操作系统实例配置热插入初始化代码,所述热插入初始化代码包括在所述Secondary操作系统中插入目标中央处理器CPU时,所述目标CPU进行热插入所需的功能性代码;
[0036]第一发送模块,用于向所述目标CPU发送处理器间中断IPI,以触发所述目标CPU进行热插入初始化,所述热插入初始化为所述目标CPU进行热插入时的初始化过程;
[0037]检测模块,用于检测所述目标CPU是否完成所述热插入初始化;
[0038]第二发送模块,还用于若所述检测模块检测到所述Primary操作系统实例检测到所述目标CPU完成所述热插入初始化,则向所述Secondary操作系统实例发送中断,以使所述Secondary操作系统实例热插入所述目标CPU。
[0039]在第三个方面的第一种可能的实现方式中,所述配置模块包括:
[0040]第一配置模块,用于在所述Primary操作系统实例的机器物理地址配置所述热插入初始化代码;
[0041]第二配置模块,用于在所述Secondary操作系统实例的第一物理地址配置所述热插入初始化代码,所述第一物理地址为低地址;
[0042]第三配置模块,用于在所述Secondary操作系统实例的第二物理地址配置所述热插入初始化代码,所述第二物理地址为低地址,所述第一物理地址与所述第二物理地址为不同的低地址。
[0043]结合第三个方面的第一种可能的实现方式,在第三个方面的第二种可能的实现方式中,所述第一发送模块包括:
[0044]第一发送单元,用于向所述目标CPU发送处理器间中断IPI,以触发所述目标CPU在所述机器物理地址执行所述热插入初始化代码,从而完成实模式到保护模式的转换;[0045]第二发送单元,用于向所述目标CPU发送处理器间中断IPI,以触发所述目标CPU在所述第一物理地址执行所述热插入初始化代码,从而完成从所述Primary操作系统实例的空间到Secondary操作系统实例的空间的转换;
[0046]第三发送单元,用于向所述目标CPU发送处理器间中断IPI,以触发所述目标CPU在所述第二物理地址执行所述热插入初始化代码,并执行处理器暂停指令HLT。
[0047]结合第三个方面、第三个方面的第一种或第二种可能的实现方式,在第三个方面的第三种可能的实现方式种,所述装置还包括:
[0048]判断模块,用于判断所述Secondary操作系统实例中的CPU数量是否小于预设的阀值;
[0049]选择模块,用于若所述判断模块判断出所述Secondary操作系统实例中的CPU数量小于预设的阀值,则为所述Secondary操作系统实例选择所述目标CPU。
[0050]结合第三个方面的第三种可能的实现方式,在第三个方面的第四种可能的实现方式中,所述选择模块,用于根据CPU分配状态位图,为所述Secondary操作系统实例选择所述目标CPU,所述CPU分配状态位图记录所述多处理器操作系统中的各CPU的分配状态。
[0051]第四个方面,本发明实施例提供一种中央处理器热插拔的实现装置,包括:
[0052]处理模块,用于清空目标CPU上的工作队列,以使得所述目标CPU执行处理器暂停指令HLT ;
[0053]标识模块,用于将所述目标CPU标识为空闲CPU ;
[0054]发送模块,用于向所述Primary操作系统实例发送所述目标CPU的标识,以使得所述Primary操作系统实例将所述目标CPU存储到所述多处理系统的CPU资源池。
[0055]在第四个方面的第一种可能的实现方式中,所述装置还包括:
[0056]选择模块,用于选择目标中央处理器CPU。
[0057]结合第四个方面或第四个方面的第一种可能的实现方式中,所述装置还包括:
[0058]判断模块,用于判断是否需要将所述目标CPU返回给所述Primary操作系统实例;
[0059]所述发送模块,用于若所述判断模块判断出需要将目标CPU返回给Primary操作系统实例,则向所述Primary操作系统实例发送目标CPU的标识。
[0060]本发明实施例提供的中央处理器热插拔的实现方法及装置,Primary操作系统实例为Secondary操作系统实例配置热插入初始化代码,并向目标CPU发送IPI,使得目标(PU完成热插入初始化。当检测出目标CPU完成热插入初始化后,向Secondary操作系统实例发送用于启动目标CPU的APIC中断,使Secondary操作系统实例热插入目标CPU,从而为Secondary操作系统实例内进行动态CPU资源调整提供底层技术支撑,将Primary操作系统实例中的空闲CPU热插入到Secondary操作系统,实现在Secondary操作系统内实现CPU 的 Hot Plug。
【专利附图】

【附图说明】
[0061]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0062]图1为本发明中央处理器热插拔的实现方法实施例一的流程图;
[0063]图2为本发明中央处理器热插拔的实现方法实施例二的流程图;
[0064]图3为本发明中央处理器热插拔的实现方法实施例三的流程图;
[0065]图4为本发明中央处理器热插拔的实现方法实施例四的流程图;
[0066]图5为本发明中央处理器热插拔的实现装置实施例一的结构示意图;
[0067]图6为本发明中央处理器热插拔的实现装置实施例二的结构示意图;
[0068]图7为本发明中央处理器热插拔的实现装置实施例三的结构示意图;
[0069]图8为本发明中央处理器热插拔的实现装置实施例四的结构示意图;
[0070]图9为本发明中央处理器热插拔的实现装置实施例五的结构示意图;
[0071]图10为本发明中央处理器热插拔的实现装置实施例六的结构示意图。
【具体实施方式】
[0072]为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0073]图1为本发明中央处理器热插拔的实现方法实施例一的流程图。本实施例适用于具有Primary操作系统实例与至少一个Secondary操作系统实例的多处理器操作系统,应用于Secondary操作系统需要对目标CPU进行Hot plug的情景。具体的,本实施例包括如下步骤:
[0074]101、Primary操作系统实例为Secondary操作系统实例配置热插入初始化代码,热插入初始化代码包括在Secondary操作系统中插入目标中央处理器CPU时,目标CPU进行热插入所需的功能性代码。
[0075]多处理器操作系统中,Primary操作系统实例也可称之为重量级操作系统(HeavyOS),是具有资源分配、回收、虚拟化及协调等功能的通用操作系统,也是在硬件上第一个启动的操作系统实例,负责全局资源的管理,例如,控制多处理器操作系统中的CPU资源、内存资源、物理设备或虚拟设备等资源。Secondary操作系统实例也可称之为轻量级操作系统(Light OS),是基于Heavy OS所管理的资源而创建定制的操作系统,只能管理自身的资源,从Heavy OS申请资源,或将资源释放后返还给Heavy OS。本步骤中,Primary操作系统为Secondary操作系统配置热插入初始话代码,该热插入初始代码包括在Secondary操作系统中热插入目标CPU,即待插入CPU所需的功能性代码,例如,使目标CPU从实模式转换到保护模式的模式转换代码、使目标CPU从Primary操作系统空间转换到Secondary操作系统空间的空间转换代码等。
[0076]102、Primary操作系统实例向目标CPU发送处理器间中断IPI,以触发目标CPU进行热插入初始化,热插入初始化为目标CPU进行热插入时的初始化过程。
[0077]在为目标CPU准备好热插入初始化代码后,Primary操作系统向目标CPU发送处理期间中断(Inter-Processor Interrupt, IPI),触发所述目标CPU进行热插入初始化。例如,根据准备好的热插入初始化代码,从实模式转换到保护模式、从Primary操作系统空间转换到Secondary操作系统空间等。
[0078]103、Primary操作系统实例检测目标CPU是否完成热插入初始化。
[0079]本步骤中,Primary操作系统通过探测目标CPU是否成功的执行完热插入初始化代码等,从而检测目标CPU是否完成热插入初始化。
[0080]104、若Primary操作系统实例检测到目标CPU完成热插入初始化,则向Secondary操作系统实例发送中断,以使Secondary操作系统实例热插入目标CPU。
[0081]本步骤中,当Primary操作系统实现检测到目标CPU已成功的执行完热插入初始化代码,即完成热插入初始化,则向Secondary操作系统实例发送中断,如高级的可编程的中断控制器(Advanced Programmable Interrupt Controller, APIC),从而使得 Secondary操作系统实例启动目标CPU,即热插入目标CPU。
[0082]本发明实施例提供的中央处理器热插拔的实现方法,Primary操作系统实例为Secondary操作系统实例配置热插入初始化代码,并向目标CPU发送IPI,使得目标CPU完成热插入初始化。当检测出目标CPU完成热插入初始化后,向Secondary操作系统实例发送用于启动目标CPU的APIC中断,使Secondary操作系统实例热插入目标CPU,从而为Secondary操作系统实例内进行动态CPU资源调整提供底层技术支撑,将Primary操作系统实例中的空闲CPU热插入到Secondary操作系统,实现在Secondary操作系统内实现CPU的 HotPlug。
[0083]图2为本发明中央处理器热插拔的实现方法实施例二的流程图。本实施例适用于具有Primary操作系统实例与至少一个Secondary操作系统实例的多处理器操作系统,应用于Secondary操作系统需要对目标CPU进行Hot plug的情景。在上述实施例一的基础上,本实施例中,多处理器操作系统具体为Rainforest系统。具体的,本实施例包括如下步骤:
[0084]20UPrimary操作系统实例判断Secondary操作系统实例中的CPU数量是否小于预设的阀值。
[0085]Primary操作系统实例维护一个数据结构,该数据结构中记录有可分配给Secondary操作系统实例的最大CPU数量和已分配数量。对于一个具体的Secondary操作系统实例,如启动大规模应用的、数据计算量大的负荷较重的Secondary操作系统实例,Primary操作系统实例判断已分配给该Secondary操作系统实例的CPU个数M,是否小于该Secondary操作系统实例初始化时支持的最大CPU个数N,即预设的阀值N,若M < N,则继续后续步骤;否则,禁止后续步骤。
[0086]202、Primary操作系统为Secondary操作系统选择目标CPU。
[0087]本步骤中,Primary操作系统从其管理的CPU资源中选择一个空闲的CPU作为目标CPU,即待插入Secondary操作系统实例的CPU。
[0088]可选的,Primary操作系统实例可根据CPU分配状态位图,为Secondary操作系统实例选择目标CPU,其中,CPU分配状态位图例如可以为用于描述当前多处理器系统CPU的资源和APIC资源的描述符和数据结构的MP Table, Primary操作系统实例与Secondary操作系统实例各自具有MP Table。
[0089]具体如步骤2021、2022。
[0090]2021、Primary操作系统维护CPU分配状态位图。[0091]CPU分配状态位图记录多处理器操作系统中的各CPU的分配状态。如果某CPU归Primary操作系统管理,则置位,即标识为1,;否则,若某CPU已被分配给Secondary操作系统,则置零,即标识为O。
[0092]2022,Primary操作系统根据CPU分配状态位图,为Secondary操作系统选择目标CPU。
[0093]Primary操作系统实例扫描CPU分配状态位图,从标识为O的CPU中随机的或是通过计算等,得到一个当前可分配给Secondary操作系统的CPU,作为目标CPU。
[0094]203、Primary操作系统实例为所述Secondary操作系统实例配置热插入初始化代码。
[0095]具体的,本步骤包括如下子步骤:
[0096]2031、Primary操作系统实例在Primary操作系统实例的机器物理地址配置热插入初始化代码。
[0097]Primary操作系统实例为Secondary操作系统实例准备跳板(trampoline)代码,将该trampoline代码拷贝到Primary操作系统实例的机器物理地址处,例如,在Rainforest系统中机器物理地址具体为0x6000处。Primary操作系统实例与Secondary操作系统实例有一段地址空间是一样的,也就是说,对于该段相同的地址空间,虚拟地址和物理地址的对应关系在Primary操作系统实例与Secondary操作系统实例各自的业表中是相同的,切换CR3寄存器,就可以完成地址空间之间的切换。本步骤中,trampoline代码为在计算机操作系统X86架构下,支持CPU从实模式转换到保护模式的功能性代码。
[0098]2032、Primary操作系统实例在Secondary操作系统实例的第一物理地址配置热插入初始化代码,第一物理地址为低地址。
[0099]Primary操作系统实例为Secondary操作系统实例准备跳板(trampoline)代码,将该跳板trampoline代码拷贝到Secondary操作系统实例的第一物理地址处,即低地址处,例如,在Rainforest系统中第一物理地址具体为物理地址phy_space+0x6000处。本步骤中,trampoline代码供目标CPU在后续的热插入初始化的过程中,从Primary操作系统实例的空间转换到Secondary操作系统实例的空间。
[0100]2033、Primary操作系统实例在Secondary操作系统实例的第二物理地址配置热插入初始化代码,第二物理地址为低地址,第一物理地址与第二物理地址为不同的低地址。
[0101]Primary操作系统实例为Secondary操作系统实例准备跳板(trampoline)代码,将该跳板trampoline代码拷贝到Secondary操作系统实例的第二物理地址处,即低地址处,例如,在Rainforest系统中第二物理地址具体为物理地址phy_space+0xl6000处。本步骤中,trampoline代码供目标CPU在后续的热插入初始化的过程中,执行处理器暂停指令(Halt,HLT)ο
[0102]需要说明的是,trampoline代码包括 trampoline_BP 和 trampoline_AP,其中,trampoline_BP为主处理器执行的trampoline,即多处理器操作系统中首先初始化并执行代码的处理器执行的trampoline ;trampoline_AP为从处理器执行的trampoline,即多处理器操作系统中晚于主处理器初始化的其他处理器执行的trampoline。因此,上述的Trampoline代码均为trampoline_AP,各段Tramplione代码跳转的地址是不一样的,跳转效果也不一样。[0103]204、Primary操作系统实例向目标CPU发送处理器间中断IPI,以触发目标CPU进行热插入初始化,热插入初始化为目标CPU进行热插入时的初始化过程。
[0104]本步骤中,Primary操作系统实例向目标CPU发送触发该目标CPU进行初始化和开启的处理器间中断IPI,并将该目标CPU的标识通知给Secondary操作系统实例。目标CPU接收到IPI后,依次执行步骤203中拷贝了三处的tramp0line_AP,完成实模式到保护模式的转换、Primary操作系统实例到Secondary操作系统实例的空间切换等一系列过程。具体的,本步骤包括如下子步骤:
[0105]2041、Primary操作系统实现向目标CPU发送触发该目标CPU进行初始化和开启的处理器间中断IPI。
[0106]2042、目标CPU在机器物理地址执行热插入初始化代码,从而完成实模式到保护模式的转换。
[0107]具体的,目标CPU接收到IPI后,从0X6000处执行trampoline_AP之后,完成实模式到保护模式的转换。
[0108]2043、目标CPU在第一物理地址执行热插入初始化代码,从而完成从Primary操作系统实例的空间到Secondary操作系统实例的空间的转换。
[0109]具体的,目标CPU切换到物理地址phy_space+0x6000处,继续执行trampoline_AP完成从Primary操作系统实例的空间到Secondary操作系统实例的空间的转换。
[0110]2044、目标CPU在第二物理地址执行热插入初始化代码,并执行处理器暂停指令HLT。
[0111]具体的,目标CPU切换到物理地址phy_space+0xl6000处,继续执行trampoline_AP,并执行HLT指令。
[0112]205、Primary操作系统实例检测到目标CPU完成热插入初始化,则向Secondary操作系统实例发送中断。
[0113]具体的,在检测到目标CPU已经执行完trampoline_AP后,Primary操作系统实例修改Secondary操作系统实例的CPU分配状态位图,例如Secondary操作系统的MP Table,并向Secondary操作系统实例发送中断,例如,APIC。
[0114]206、Secondary操作系统实例热插入目标CPU。
[0115]具体的,接收到Primary操作系统实例发送的APIC后,Secondary操作系统实例扫描自身的MP Table,探测到目标CPU,向该目标CPU发送IPI。另外,Secondary操作系统实例执行CPUJtotplug_begin,将目标CPU置位,并在目标CPU上运行Idle进程,从而完成Hot Plug 过程。
[0116]上述实施例一与实施例二是对在Secondary操作系统实例内对CPU进行Hot Plug的详细说明。然而,现有技术中,Secondary操作系统实例在运行的过程中,同样存在无法在Secondary操作系统实例中实现热关闭(Hot Unplugged)的问题。具体的,Secondary操作系统实例调用一系列函数完成一个CPU的关闭。以多处理器系统为Linux系统为例,该过程中,Secondary操作系统实例将目标CPU,即待关闭CPU从Online Map和Present Map中移除,其中,Online Map为Linux中用于记录当前存在的CPU的位图,Present Map为Linux中用于记录当前可用的CPU的位图。然而,上述CPU的Hot Unplug的过程中,仅仅是将目标CPU从Secondary操作系统实例中移除了,目标CPU并没有返回到Primary操作系统实例的资源池中,即无法在Secondary操作系统实例中实现热关闭(Hot Unplugged)。下面,从Secondary操作系统实例对目标CPU进行Hot Unplug的角度对本发明进行详细传输。
[0117]图3为本发明中央处理器热插拔的实现方法实施例三的流程图。本实施例适用于具有Primary操作系统实例与至少一个Secondary操作系统实例的多处理器操作系统,应用于Secondary操作系统需要对目标CPU进行Hot Unplug的情景。具体的,本实施例包括如下步骤:
[0118]301、Secondary操作系统实例清空目标CPU上的工作队列,以使得目标CPU执行处理器暂停指令HLT ;
[0119]本步骤中,Secondary操作系统清空目标CPU上的工作队列,并令目标CPU执行处理器暂停指令HLT,使得目标CPU处于暂停转态,以等待一次外部中断的到来。
[0120]302、Secondary操作系统实例将目标CPU标识为空闲CPU。
[0121]Secondary操作系统将自身CPU分配状态位图中的CPU标识为空闲CPU,例如,置零该CPU。
[0122]303、Secondary操作系统实例向Primary操作系统实例发送目标CPU的标识,以使得Primary操作系统实例将目标CPU存储到多处理系统的CPU资源池。
[0123]在将CPU标识为空闲后,Secondary操作系统实例将该CPU的标识发送给Primary操作系统实例,使得Primary操作系统实例根据目标CPU的标识,将自身的CPU分配状态位图,即多处理器系统的CPU分配位图中的目标CPU置零,从而将目标CPU存储到多处理系统的CPU资源池中。
[0124]本发明实施例提供的中央处理器热插拔的实现方法中,Secondary操作系统实例将待拔出CPU上的工作队列清除,将其标识为空闲CPU,并向Primary操作系统实例发送目标CPU的标识,使得Primary操作系统实例将目标CPU存储到多处理系统的CPU资源池,为Secondary操作系统实例内进行动态CPU资源调整提供底层技术支撑,使得从Secondary操作系统实例中释放出的CPU最终能够归还到Primary操作系统实例,在Secondary操作系统实例中实现热关闭。
[0125]图4为本发明中央处理器热插拔的实现方法实施例四的流程图。本实施例适用于具有Primary操作系统实例与至少一个Secondary操作系统实例的多处理器操作系统,应用于Secondary操作系统需要对目标CPU进行Hot Unplug的情景。在上述实施例一的基础上,本实施例中,多处理器操作系统具体为Rainforest系统。具体的,本实施例包括如下步骤:
[0126]401、Secondary操作系统实例选择目标中央处理器CPU。
[0127]具体的,Secondary操作系统实例从当前处于在线(online),即运行状态的CPU中选择一个CPU作为目标CPU,执行热关闭(Hot Unplug)操作,即执行CPUJtot Unplug,该操作具有独占性,即是不可抢占的。
[0128]402、Secondary操作系统实例清空目标CPU上的工作队列,以使得目标CPU执行处理器暂停指令HLT。
[0129]具体的,Secondary操作系统实例清空目标CPU上的工作队列,即清除目标CPU上运行的APIC信息,以及运行的进程等,直至目标CPU上无进行运行,目标CPU执行HLT。
[0130]403、Secondary操作系统实例将目标CPU标识为空闲CPU。[0131]Secondary操作系统实例修改相应的数据结构,如自身的CPU分配状态位图一MPTable等,置零目标CPU,使其处于离线(offline),即空闲状态。
[0132]404,Secondary操作系统实例判断是否需要将目标CPU返回给Primary操作系统实例。
[0133]Secondary操作系统实例根据自身的情况等,如下一时间段的负荷程度等,判断是否需要将目标CPU返回给Primary操作系统实例。若判断出无需将目标CPU归还给Primary操作系统实例,则该目标CPU等待再次激活;若判断出需要将目标CPU归还给Primary操作系统实例,则置零Present MP中的相应位,并将目标CPU的标识,如APIC-1D传递给Primary操作系统实例。
[0134]405、Primary操作系统实例述目标CPU存储到所述多处理系统的CPU资源池。
[0135]本步骤中,Primary操作系统实例接收到APIC-1D后,修改自身的,即多处理器系统的CPU分配状态位图,从而将目标CPU纳入到Primary操作系统实例的系统资源中。
[0136]图5为本发明中央处理器热插拔的实现装置实施例一的结构示意图。本实施例提供的中央处理器热插拔的实现装置可设置在多处理器操作系统的Primary操作系统实例上,也可以是Primary操作系统实例本身,是与本发明图1实施例对应的装置实施例,具体实现过程在此不再赘述。具体的,本实施例提供的中央处理器热插拔的实现装置100具体包括:
[0137]配置模块11,用于为Secondary操作系统实例配置热插入初始化代码,热插入初始化代码包括在Secondary操作系统中插入目标中央处理器CPU时,目标CPU进行热插入所需的功能性代码;
[0138]第一发送模块12,用于向目标CPU发送处理器间中断IPI,以触发目标CPU进行热插入初始化,热插入初始化为目标CPU进行热插入时的初始化过程;
[0139]检测模块13,用于检测目标CPU是否完成热插入初始化;
[0140]第二发送模块14,还用于若检测模块13检测到Primary操作系统实例检测到目标CPU完成热插入初始化,则向Secondary操作系统实例发送中断,以使Secondary操作系统实例热插入目标CPU。
[0141]本发明实施例提供的中央处理器热插拔的实现装置,Primary操作系统实例为Secondary操作系统实例配置热插入初始化代码,并向目标CPU发送IPI,使得目标CPU完成热插入初始化。当检测出目标CPU完成热插入初始化后,向Secondary操作系统实例发送用于启动目标CPU的APIC中断,使Secondary操作系统实例热插入目标CPU,从而为Secondary操作系统实例内进行动态CPU资源调整提供底层技术支撑,将Primary操作系统实例中的空闲CPU热插入到Secondary操作系统,实现在Secondary操作系统内实现CPU的 HotPlug。
[0142]图6为本发明中央处理器热插拔的实现装置实施例二的结构示意图。如图6所示,本实施例的中央处理器热插拔的实现装置200在图5装置结构的基础上,进一步的,配置模块11包括:
[0143]第一配置模块111,用于在Primary操作系统实例的机器物理地址配置热插入初始化代码;
[0144]第二配置模块112,用于在Secondary操作系统实例的第一物理地址配置热插入初始化代码,第一物理地址为低地址;
[0145]第三配置模块113,用于在Secondary操作系统实例的第二物理地址配置热插入初始化代码,第二物理地址为低地址,第一物理地址与第二物理地址为不同的低地址。
[0146]再请参照图6,进一步的,第一发送模块12包括:
[0147]第一发送单元121,用于向目标CPU发送处理器间中断IPI,以触发目标CPU在机器物理地址执行热插入初始化代码,从而完成实模式到保护模式的转换;
[0148]第二发送单元122,用于向目标CPU发送处理器间中断IPI,以触发目标CPU在第一物理地址执行热插入初始化代码,从而完成从Primary操作系统实例的空间到Secondary操作系统实例的空间的转换;
[0149]第三发送单元123,用于向目标CPU发送处理器间中断IPI,以触发目标CPU在第二物理地址执行热插入初始化代码,并执行处理器暂停指令HLT。
[0150]再请参照图6,进一步的,中央处理器热插拔的实现装置200还包括:
[0151]判断模块15,用于判断Secondary操作系统实例中的CPU数量是否小于预设的阀值;
[0152]选择模块16,用于若判断模块15判断出Secondary操作系统实例中的CPU数量小于预设的阀值,则为Secondary操作系统实例选择目标CPU。
[0153]进一步的,选择模块16,用于根据CPU分配状态位图,为Secondary操作系统实例选择目标CPU,CPU分配状态位图记录多处理器操作系统中的各CPU的分配状态。
[0154]图7为本发明中央处理器热插拔的实现装置实施例三的结构示意图。本实施例提供的中央处理器热插拔的实现装置可设置在多处理器操作系统的Secondary操作系统实例上,也可以是Secondary操作系统实例本身,是与本发明图3实施例对应的装置实施例,具体实现过程在此不再赘述。具体的,本实施例提供的中央处理器热插拔的实现装置300具体包括:
[0155]处理模块21,用于清空目标CPU上的工作队列,以使得目标CPU执行处理器暂停指令 HLT ;
[0156]标识模块22,用于将目标CPU标识为空闲CPU ;
[0157]发送模块23,用于向Primary操作系统实例发送目标CPU的标识,以使得Primary操作系统实例将目标CPU存储到多处理系统的CPU资源池。
[0158]本发明实施例提供的中央处理器热插拔的实现装置,Secondary操作系统实例将待拔出CPU上的工作队列清除,将其标识为空闲CPU,并向Primary操作系统实例发送目标CPU的标识,使得Primary操作系统实例将目标CPU存储到多处理系统的CPU资源池,为Secondary操作系统实例内进行动态CPU资源调整提供底层技术支撑,使得从Secondary操作系统实例中释放出的CPU最终能够归还到Primary操作系统实例,在Secondary操作系统实例中实现热关闭。
[0159]图8为本发明中央处理器热插拔的实现装置实施例四的结构示意图。如图8所示,本实施例的中央处理器热插拔的实现装置400在图7装置结构的基础上,进一步的,还包括:
[0160]选择模块24,用于选择目标中央处理器CPU。
[0161]再请参照图8,进一步的,中央处理器热插拔的实现装置400还包括:[0162]判断模块25,用于判断是否需要将目标CPU返回给Primary操作系统实例;
[0163]发送模块23,用于若判断模块判断出需要将目标CPU返回给Primary操作系统实例,贝1J向Primary操作系统实例发送目标CPU的标识。
[0164]图9为本发明中央处理器热插拔的实现装置实施例五的结构示意图。如图9所示,本实施例提供的中央处理器热插拔的实现装置500包括处理器31和存储器32。中央处理器热插拔的实现装置500还可以包括发射器33、接收器34。发射器33和接收器34可以和处理器31相连。其中,发射器33用于发送数据或信息,接收器34用于接收数据或信息,存储器32存储执行指令,当中央处理器热插拔的实现装置500运行时,处理器31与存储器32之间通信,处理器31调用存储器32中的执行指令,用于执行以下操作:
[0165]为Secondary操作系统实例配置热插入初始化代码,热插入初始化代码包括在Secondary操作系统中插入目标中央处理器CPU时,目标CPU进行热插入所需的功能性代码;
[0166]向目标CPU发送处理器间中断IPI,以触发目标CPU进行热插入初始化,热插入初始化为目标CPU进行热插入时的初始化过程;
[0167]检测目标CPU是否完成热插入初始化;
[0168]若检测到目标CPU完成热插入初始化,则向Secondary操作系统实例发送中断,以使Secondary操作系统实例热插入目标CPU。
[0169]进一步的,为Secondary操作系统实例配置热插入初始化代码,包括:
[0170]在Primary操作系统实例的机器物理地址配置热插入初始化代码;
[0171]在Secondary操作系统实例的第一物理地址配置热插入初始化代码,第一物理地址为低地址;
[0172]在Secondary操作系统实例的第二物理地址配置热插入初始化代码,第二物理地址为低地址,第一物理地址与第二物理地址为不同的低地址。
[0173]进一步的,向目标CPU发送处理器间中断IPI,以触发目标CPU进行热插入初始化,包括:
[0174]向目标CPU发送处理器间中断IPI,以触发目标CPU在机器物理地址执行热插入初始化代码,从而完成实模式到保护模式的转换;
[0175]向目标CPU发送处理器间中断IPI,以触发目标CPU在第一物理地址执行热插入初始化代码,从而完成从Primary操作系统实例的空间到Secondary操作系统实例的空间的转换;
[0176]向目标CPU发送处理器间中断IPI,以触发目标CPU在第二物理地址执行热插入初始化代码,并执行处理器暂停指令HLT。
[0177]进一步的,为Secondary操作系统实例配置热插入初始化代码之前,还包括:
[0178]判断Secondary操作系统实例中的CPU数量是否小于预设的阀值;
[0179]若小于,则为Secondary操作系统实例选择目标CPU。
[0180]进一步的,为Secondary操作系统实例选择目标CPU,包括:
[0181]根据CPU分配状态位图,为Secondary操作系统实例选择目标CPU,CPU分配状态位图记录多处理器操作系统中的各CPU的分配状态。
[0182]图10为本发明中央处理器热插拔的实现装置实施例六的结构示意图。如图10所示,本实施例提供的中央处理器热插拔的实现装置600包括处理器41和存储器42。中央处理器热插拔的实现装置600还可以包括发射器43、接收器44。发射器43和接收器44可以和处理器41相连。其中,发射器43用于发送数据或信息,接收器44用于接收数据或信息,存储器42存储执行指令,当中央处理器热插拔的实现装置600运行时,处理器41与存储器42之间通信,处理器31调用存储器32中的执行指令,用于执行以下操作:
[0183]清空目标CPU上的工作队列,以使得目标CPU执行处理器暂停指令HLT ;
[0184]将目标CPU标识为空闲CPU ;
[0185]向Primary操作系统实例发送目标CPU的标识,以使得Primary操作系统实例将目标CPU存储到多处理系统的CPU资源池。
[0186]进一步的,清空目标CPU上的工作队列,以使得目标CPU执行处理器暂停指令HLT之前,包括:
[0187]选择目标中央处理器CPU。
[0188]进一步的,将目标CPU标识为空闲CPU之后,Secondary操作系统实例向Primary操作系统实例发送目标CPU的标识之前,包括:
[0189]判断是否需要将目标CPU返回给Primary操作系统实例;
[0190]向Primary操作系统实例发送目标CPU的标识,包括:
[0191]若判断判断出需要将目标CPU返回给Primary操作系统实例,则向Primary操作系统实例发送目标CPU的标识。
[0192]本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:R0M、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
[0193]最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
【权利要求】
1.一种中央处理器热插拔的实现方法,其特征在于,适用于具有原始Primary操作系统实例与至少一个第二 Secondary操作系统实例的多处理器操作系统,该方法包括: 所述Primary操作系统实例为所述Secondary操作系统实例配置热插入初始化代码,所述热插入初始化代码包括在所述Secondary操作系统中插入目标中央处理器CPU时,所述目标CPU进行热插入所需的功能性代码; 所述Primary操作系统实例向所述目标CPU发送处理器间中断IPI,以触发所述目标CPU进行热插入初始化,所述热插入初始化为所述目标CPU进行热插入时的初始化过程; 所述Primary操作系统实例检测所述目标CPU是否完成所述热插入初始化; 若所述Primary操作系统实例检测到所述目标CPU完成所述热插入初始化,则向所述Secondary操作系统实例发送中断,以使所述Secondary操作系统实例热插入所述目标CPU。
2.根据权利要求1所述的方法,其特征在于,所述Primary操作系统实例为所述Secondary操作系统实例配置热插入初始化代码,包括: 所述Primary操作系统实例在所述Primary操作系统实例的机器物理地址配置所述热插入初始化代码; 所述Primary操作系统实例在所述Secondary操作系统实例的第一物理地址配置所述热插入初始化代码,所述第一物理地址为低地址; 所述Primary操作系 统实例在所述Secondary操作系统实例的第二物理地址配置所述热插入初始化代码,所述第二物理地址为低地址,所述第一物理地址与所述第二物理地址为不同的低地址。
3.根据权利要求2所述的方法,其特征在于,所述Primary操作系统实例向所述目标CPU发送处理器间中断IPI,以触发所述目标CPU进行热插入初始化,包括: 所述Primary操作系统实例向所述目标CPU发送处理器间中断IPI,以触发所述目标CPU在所述机器物理地址执行所述热插入初始化代码,从而完成实模式到保护模式的转换; 所述Primary操作系统实例向所述目标CPU发送处理器间中断IPI,以触发所述目标CPU在所述第一物理地址执行所述热插入初始化代码,从而完成从所述Primary操作系统实例的空间到Secondary操作系统实例的空间的转换; 所述Primary操作系统实例向所述目标CPU发送处理器间中断IPI,以触发所述目标CPU在所述第二物理地址执行所述热插入初始化代码,并执行处理器暂停指令HLT。
4.根据权利要求1~3任一项所述的方法,其特征在于,所述Primary操作系统实例为所述Secondary操作系统实例配置热插入初始化代码之前,还包括: 所述Primary操作系统实例判断所述Secondary操作系统实例中的CPU数量是否小于预设的阀值; 若小于,则所述Primary操作系统实例为所述Secondary操作系统实例选择所述目标CPU。
5.根据权利要求4所述的方法,所述Primary操作系统实例为所述Secondary操作系统实例选择所述目标CPU,包括: 所述Primary操作系统实例根据CPU分配状态位图,为所述Secondary操作系统实例选择所述目标CPU,所述CPU分配状态位图记录所述多处理器操作系统中的各CPU的分配状态。
6.—种中央处理器热插拔的实现方法,其特征在于,适用于具有原始Primary操作系统实例与至少一个第二 Secondary操作系统实例的多处理器操作系统,该方法包括: 所述Secondary操作系统实例清空目标CPU上的工作队列,以使得所述目标CPU执行处理器暂停指令HLT ; 所述Secondary操作系统实例将所述目标CPU标识为空闲CPU ; 所述Secondary操作系统实例向所述Primary操作系统实例发送所述目标CPU的标识,以使得所述Primary操作系统实例将所述目标CPU存储到所述多处理系统的CPU资源池。
7.根据权利要求6所述的方法,其特征在于,所述Secondary操作系统实例清空目标CPU上的工作队列,以使得所述目标CPU执行处理器暂停指令HLT之前,包括: 所述Secondary操作系统实例选择目标中央处理器CPU。
8.根据权利要求6或7所述的方法,其特征在于,所述Secondary操作系统实例将所述目标CPU标识为空闲CPU之后,所述Secondary操作系统实例向所述Primary操作系统实例发送所述目标CPU的标识之前,包括: 所述Secondary操作系统实例判断是否需要将所述目标CPU返回给所述Primary操作系统实例; Secondary操作系统实例向Primary操作系统实例发送目标CPU的标识,包括: 若Secondary操作系统实例判断判断`出需要将目标CPU返回给Primary操作系统实例,则向所述Primary操作系统实例发送目标CPU的标识。
9.一种中央处理器热插拔的实现装置,其特征在于,包括: 配置模块,用于为所述Secondary操作系统实例配置热插入初始化代码,所述热插入初始化代码包括在所述Secondary操作系统中插入目标中央处理器CPU时,所述目标CPU进行热插入所需的功能性代码; 第一发送模块,用于向所述目标CPU发送处理器间中断IPI,以触发所述目标CPU进行热插入初始化,所述热插入初始化为所述目标CPU进行热插入时的初始化过程; 检测模块,用于检测所述目标CPU是否完成所述热插入初始化; 第二发送模块,还用于若所述检测模块检测到所述Primary操作系统实例检测到所述目标CPU完成所述热插入初始化,则向所述Secondary操作系统实例发送中断,以使所述Secondary操作系统实例热插入所述目标CPU。
10.根据权利要求9所述的装置,其特征在于,所述配置模块包括: 第一配置模块,用于在所述Primary操作系统实例的机器物理地址配置所述热插入初始化代码; 第二配置模块,用于在所述Secondary操作系统实例的第一物理地址配置所述热插入初始化代码,所述第一物理地址为低地址; 第三配置模块,用于在所述Secondary操作系统实例的第二物理地址配置所述热插入初始化代码,所述第二物理地址为低地址,所述第一物理地址与所述第二物理地址为不同的低地址。
11.根据权利要求10所述的装置,其特征在于,所述第一发送模块包括: 第一发送单元,用于向所述目标CPU发送处理器间中断IPI,以触发所述目标CPU在所述机器物理地址执行所述热插入初始化代码,从而完成实模式到保护模式的转换; 第二发送单元,用于向所述目标CPU发送处理器间中断IPI,以触发所述目标CPU在所述第一物理地址执行所述热插入初始化代码,从而完成从所述Primary操作系统实例的空间到Secondary操作系统实例的空间的转换; 第三发送单元,用于向所述目标CPU发送处理器间中断IPI,以触发所述目标CPU在所述第二物理地址执行所述热插入初始化代码,并执行处理器暂停指令HLT。
12.根据权利要求9~11任一项所述的装置,其特征在于,所述装置还包括: 判断模块,用于判断所述Secondary操作系统实例中的CPU数量是否小于预设的阀值; 选择模块,用于若所述判断模块判断出所述Secondary操作系统实例中的CPU数量小于预设的阀值,则为所述Secondary操作系统实例选择所述目标CPU。
13.根据权利要求12所述的装置,其特征在于, 所述选择模块,用于根据CPU分配状态位图,为所述Secondary操作系统实例选择所述目标CPU,所述CPU分配状态位图记录所述多处理器操作系统中的各CPU的分配状态。
14.一种中央处理器热插拔的实现装置,其特征在于,包括: 处理模块,用于清空目标CPU上的工作队列,以使得所述目标CPU执行处理器暂停指令HLT ; 标识模块,用于将所述目标CPU标识为空闲CPU ; 发送模块,用于向所述Primary操作系统实例发送所述目标CPU的标识,以使得所述Primary操作系统实例将所述目标CPU存储到所述多处理系统的CPU资源池。
15.根据权利要求14所述的装置,其特征在于,所述装置还包括: 选择模块, 用于选择目标中央处理器CPU。
16.根据权利要求14或15所述的装置,其特征在于,所述装置还包括: 判断模块,用于判断是否需要将所述目标CPU返回给所述Primary操作系统实例;所述发送模块,用于若所述判断模块判断出需要将目标CPU返回给Primary操作系统实例,则向所述Primary操作系统实例发送目标CPU的标识。
【文档编号】G06F9/50GK103699444SQ201310694881
【公开日】2014年4月2日 申请日期:2013年12月17日 优先权日:2013年12月17日
【发明者】薛栋梁, 解壁伟, 高云伟, 詹剑锋 申请人:华为技术有限公司, 中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1