一种服务器中内存模块的数据迁移方法及服务器与流程

文档序号:11198902阅读:550来源:国知局
一种服务器中内存模块的数据迁移方法及服务器与流程

本发明涉及存储技术领域,尤其涉及一种服务器中内存模块的数据迁移方法及服务器。



背景技术:

内存热插拔主要应用在服务器领域,为服务器带来了更高的可用性和可维护性。在内存热插拔时,一个服务器涉及硬件层、基本输入输出服务器(basicinputoutputsystem,bios)层、操作系统(operatingsystem,os)(也可还包含虚拟机监控器(virtualmachinemonitor,vmm))层,硬件层包含至少两个内存模块,其各层关系图如图1所示。在所示的逻辑结构中,硬件层提供物理上实际可用的资源;bios层对这些物理资源进行配置并上报可用资源以及提供操作接口;os可以直接使用bios上报的资源,也可以由vmm先对资源进行虚拟化,再分配到os使用,也就是os是这些资源的最终使用者。在内存热插拔技术中,硬件层提供了实体的内存模块以及访问通道,bios层对内存进行初始化、分配地址、上报可用地址给os或者vmm,最终os在内存中运行程序或存放数据。内存热插拔包括内存热添加和内存热移除两个过程。

现有技术在进行内存热移除时,需要os先将准备热移除的内存地址上的数据迁移到其他内存地址上,然而,因为os每次搬移一个内存页都要先取得这个页的控制权,暂停其他程序的访问后才能开始搬移,所以如果要迁移的用户态数据被其他程序频繁访问,那么os每次都要花费一定时间才能获得内存页的控制权,结果需要花费很长时间才能完成整个内存模块的数据迁移。

综上,由于内存数据迁移时对os的依赖性很强,os的数据布局以及内存数据迁移的能力都会对内存数据迁移的成败造成影响,所以如何方便地实现内存模块的数据迁移成为目前迫切需要解决的问题。



技术实现要素:

有鉴于此,本发明实施例提供一种服务器中内存模块的数据迁移方法及服务器,以期方便地实现服务器中内存模块的数据迁移。

第一方面,提供了一种服务器中内存模块的数据迁移方法,包括:

当处理器接收到用户对第一内存模块的数据迁移请求时,所述处理器查找第二内存模块,并向第一代理装置发送镜像关系建立指令,所述第一内存模块处于运行状态,所述第二内存模块处于空闲状态;

所述第一代理装置接收所述镜像关系建立指令,与第二代理装置建立镜像关系;

所述处理器向所述第一代理装置发送数据迁移指令;

所述第一代理装置接收所述数据迁移指令,将所述第一内存模块中的数据发送至所述第二代理装置;

所述第二代理装置将所述第一内存模块中的数据写入所述第二内存模块中;

所述处理器向所述第一代理装置发送镜像关系解除指令,将所述第一内存模块和所述第二内存模块分别设置为空闲状态和运行状态;

所述第一代理装置接收所述镜像关系解除指令,解除与所述第二代理装置的所述镜像关系。

在第一种可能的实现方式中,所述第一代理装置接收所述数据迁移指令,将所述第一内存模块中的数据发送至所述第二代理装置,包括:

所述第一代理装置接收所述处理器发送的数据读取指令,读取所述第一内存模块中的数据并将所述第一内存模块中的数据返回给所述处理器;

所述第一代理装置接收所述处理器写入的所述第一内存模块中的数据,将所述第一内存模块中的数据发送至所述第二代理装置。

结合第一方面或第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述处理器向所述第一代理装置发送镜像关系解除指令之前,所述方法还包括:

所述处理器向所述第一代理装置的第一物理地址写入第一数据;

所述第一代理装置接收所述第一数据,并将所述第一数据转发给所述第二代理装置;

所述第二代理装置将所述第一数据写入所述第二内存模块中的所述第一物理地址。

结合第一方面或第一方面的第一种可能的实现方式或第一方面的第二种可能的实现方式,在第三种可能的实现方式中,所述第一代理装置接收所述镜像关系解除指令,解除与所述第二代理装置的所述镜像关系之后,所述方法还包括:

所述处理器断开所述第一内存模块的电源,以移除所述第一内存模块。

结合第一方面或第一方面的第一种可能的实现方式或第一方面的第二种可能的实现方式或第一方面的第三种可能的实现方式,在第四种可能的实现方式中,所述方法还包括:

当所述处理器接收到用户的内存模块添加请求时,所述处理器给添加的内存模块供电,并对所述添加的内存模块进行初始化,所述添加的内存模块进入空闲状态。

第二方面,提供了一种服务器,包括:

处理器、连接所述处理器的第一代理装置和第二代理装置、与所述第一代理装置连接的第一内存模块、以及与所述第二代理装置连接的第二内存模块;

所述处理器,用于当接收到用户对第一内存模块的数据迁移请求后,并且所述第一内存模块为运行状态,所述第二内存模块为空闲状态时,查找第二内存模块,并向第一代理装置发送镜像关系建立指令;

所述第一代理装置,用于接收所述镜像关系建立指令,在接收到所述镜像关系建立指令后,与第二代理装置建立镜像关系;

所述处理器,还用于在所述镜像关系建立完成后,向所述第一代理装置发送数据迁移指令;

所述第一代理装置,还用于接收所述数据迁移指令,在接收到所述数据迁移指令后,将所述第一内存模块中的数据发送至所述第二代理装置;

所述第二代理装置,用于接收所述第一代理装置发出的所述数据,将所述数据写入所述第二内存模块中;

所述处理器,还用于在所述数据迁移完后,向所述第一代理装置发送镜像关系解除指令,以及在发出所述镜像关系解除指令后,将所述第一内存模块和所述第二内存模块分别设置为空闲状态和运行状态;

所述第一代理装置,还用于接收到所述镜像关系解除指令后,解除与所述第二代理装置的所述镜像关系。

在第一种可能的实现方式中,所述第一代理装置还用于接收所述数据迁移指令,在接收到所述数据迁移指令后,将所述第一内存模块中的数据发送至所述第二代理装置,包括:

所述第一代理装置,还用于接收所述处理器发送的数据读取指令,在接收到所述数据读取指令后,读取所述第一内存模块中的数据并将所述第一内存模块中的数据返回给所述处理器;

所述第一代理装置,还用于接收所述处理器写入的所述第一内存模块中的数据,将所述第一内存模块中的数据发送至所述第二代理装置。

结合第二方面或第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述处理器,还用于向所述第一代理装置的第一物理地址写入第一数据;

所述第一代理装置,还用于接收到所述第一数据后,将所述第一数据转发给所述第二代理装置;

所述第二代理装置,还用于在接收到所述第二代理装置转发的所述第一数据后,将所述第一数据写入所述第二内存模块中的所述第一物理地址。

结合第二方面或第二方面的第一种可能的实现方式或第二方面的第二种可能的实现方式,在第三种可能的实现方式中,所述处理器,还用于在所述数据迁移完以及向所述第一代理装置发送镜像关系解除指令后,断开所述第一内存模块的电源,以移除所述第一内存模块。

结合第二方面或第二方面的第一种可能的实现方式或第二方面的第二种可能的实现方式或第二方面的第三种可能的实现方式,在第四种可能的实现方式中,所述处理器,还用于当接收到用户的内存模块添加请求时,给添加的内存模块供电,并对所述添加的内存模块进行初始化,所述添加的内存模块成为空闲内存模块。

采用本发明提供的一种服务器中内存模块的数据迁移方法及服务器的技术方案,处理器通过在两个内存模块的代理装置之间建立镜像关系,指示代理装置在两个内存模块间进行数据迁移,从而完成一个内存模块到另一个内存模块的数据迁移,整个数据迁移过程无需操作系统参与,数据迁移过程耗时短,方便地实现了服务器中内存模块的数据迁移。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为现有技术中内存热插拔时涉及的服务器各层的关系示意图;

图2为本发明提供的一种服务器中内存模块的数据迁移方法的一个实施例的流程图;

图3为本发明提供的一种服务器中内存模块的数据迁移方法的另一个实施例的流程图;

图4为现有技术中的内存模块热移除流程图;

图5为现有技术中的内存模块热添加流程图;

图6a为服务器包含的内存模块结构示意图;

图6b为对服务器中的内存模块的数据迁移示意图;

图6c为服务器中的内存模块完成数据迁移后内存模块的角色转换示意图;

图6d为对服务器中的空闲内存模块进行替换的示意图;

图6e为服务器中的空闲内存模块替换后的示意图;

图7a为代理装置ha和内存模块的结构示意图;

图7b为节点控制器nc和内存模块的结构示意图;

图8a为进行内存模块数据迁移过程的服务器示意图;

图8b为完成内存模块数据迁移过程后的服务器示意图;

图9为本发明的一种服务器的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

图2为本发明提供的一种服务器中内存模块的数据迁移方法的一个实施例的流程图。如图2所示,该方法包括以下步骤:

步骤s101,当处理器接收到用户对第一内存模块的数据迁移请求时,所述处理器查找第二内存模块,并向第一代理装置发送镜像关系建立指令,所述第一内存模块处于运行状态,所述第二内存模块处于空闲状态。

步骤s102,所述第一代理装置接收所述镜像关系建立指令,与第二代理装置建立镜像关系。

在本发明实施例中,服务器包含至少两个内存模块,例如第一内存模块和第二内存模块,其中第一内存模块处于运行状态,第二内存模块处于空闲状态,该内存模块可以是内存卡,即将双列直插式存储模块(dualin-linememorymodule,dimm,又称内存条)安装在内存卡上,再将内存卡插到主板上。其中,第一内存模块中存储有数据,由处理器分配了物理地址并上报给了os,os可以在该第一内存模块中运行程序或存放数据;而处理器仅对第二内存模块进行内存初始化,不为其分配物理地址,也不通知os该第二内存模块的存在,因而os也不会用到该第二内存模块。

在本发明实施例中,参与数据迁移过程的每个内存模块都与一个代理装置相连,该代理装置负责接收处理器的内存地址访问请求,这些内存地址是其所代理的本地(home/local)的内存模块的地址,并将从内存模块返回的结果通过处理器送回原内存访问的请求者。

当用户希望将服务器中第一内存模块的数据全部迁移,以将该第一内存模块移除时,用户向处理器发出数据迁移请求。处理器接收到用户对第一内存模块的数据迁移请求时,查找一个处于空闲状态的内存模块即第二内存模块,向与第一内存模块连接的代理装置a发送镜像关系建立指令,代理装置a接收到该镜像关系建立指令后,与连接于该第二内存模块的代理装置b建立镜像关系。所谓镜像关系是指,第二内存模块在初始化时不具有物理地址,当代理装置a和代理装置b建立镜像关系后,第二内存模块就具有与第一内存模块相同的物理地址,代理装置a在从处理器接收到写入第一内存模块的某物理地址的数据后,除了将该数据写入第一内存模块的该物理地址,还将该数据写入代理装置b,再由代理装置b将数据写入第二内存模块中的相同的物理地址。

可以理解的是,本发明中处理器所执行的操作实际上可以是由处理器上的bios程序来完成的。

步骤s103,所述处理器向所述第一代理装置发送数据迁移指令。

步骤s104,所述第一代理装置接收所述数据迁移指令,将所述第一内存模块中的数据发送至所述第二代理装置。

步骤s105,所述第二代理装置将所述第一内存模块中的数据写入所述第二内存模块中。

代理装置a和代理装置b建立了镜像关系后,处理器向代理装置a发送数据迁移指令,要将第一内存模块的数据逐步迁移至第二内存模块。代理装置a接收到该数据迁移指令后,从第一内存模块获取要迁移的数据,将该数据发送至代理装置b,由代理装置b将数据写入第二内存模块中,写入第二内存模块的数据的物理地址与该数据在第一内存模块中的物理地址是完全一致的。

步骤s106,所述处理器向所述第一代理装置发送镜像关系解除指令,将所述第一内存模块和所述第二内存模块分别设置为空闲状态和运行状态。

步骤s107,所述第一代理装置接收所述镜像关系解除指令,解除与所述第二代理装置的所述镜像关系。

全部迁移完第一内存模块中的数据后,处理器向代理装置a发送镜像关系解除指令,指示代理装置a和代理装置b解除镜像关系,代理装置a接收到该镜像关系解除指令后,解除与代理装置b的镜像关系,并且将接收该段物理地址的读写指令的代理装置由代理装置a修改为代理装置b,这样第一内存模块转为空闲状态,而第二内存模块转为运行状态,处理器对该段物理地址进行数据的读写时,通过代理装置b从第二内存模块读取数据或将数据写入第二内存模块。因为进行数据迁移的前后,第一内存模块的物理地址不变,所以该数据迁移过程对于os及os上运行的应用程序来说是不可见的。

可以理解的是,服务器中不止一个处于运行状态的内存模块和处于空闲状态的内存模块,处理器可以为处于运行状态的内存模块选择合适的处于空闲状态的内存模块进行数据迁移,处理器可以同时或依次完成多个处于运行状态的内存模块的数据迁移。

根据本发明实施例提供的一种服务器中内存模块的数据迁移方法,处理器通过在两个内存模块的代理装置之间建立镜像关系,指示代理装置在两个内存模块间进行数据迁移,从而完成一个内存模块到另一个内存模块的数据迁移,整个数据迁移过程无需操作系统参与,数据迁移过程耗时短,方便地实现了服务器中内存模块的数据迁移。

图3为本发明提供的一种服务器中内存模块的数据迁移方法的另一个实施例的流程图。如图3所示,该方法包括以下步骤:

步骤s201,当处理器接收到用户对第一内存模块的数据迁移请求时,所述处理器查找第二内存模块,并向第一代理装置发送镜像关系建立指令,所述第一内存模块处于运行状态,所述第二内存模块处于空闲状态。

步骤s202,所述第一代理装置接收所述镜像关系建立指令,与第二代理装置建立镜像关系。

如图6a所示,服务器中包括多个内存模块,其中内存模块1、2和3为处于运行状态的内存模块,其中存储有数据,由处理器分配了物理地址并上报给了os,os可以在该内存模块中运行程序或存放数据;内存模块4为处于空闲状态的内存模块,处理器仅对内存模块4进行了内存初始化,不为其分配物理地址,也不通知os该空闲内存模块的存在,因而os也不会用到该内存模块4。在该具有多个内存模块的服务器中,可以选取其中容量最大的一个内存模块作为空闲状态的内存模块,同时,不论设置为运行状态的内存模块和空闲状态的内存模块,可以选择插有相同容量的内存条,这样任何一个内存模块都可以成为空闲状态的内存模块以方便进行数据迁移。

当用户希望将服务器中某个处于运行状态的内存模块的数据全部迁移,以将该内存模块移除时,用户向处理器发出数据迁移请求。对服务器的内存模块进行结构设计时一般会有一个用户的操作接口来接收用户的热插拔命令,并且能够向用户提示热插拔的进度。如图4的内存模块热移除流程图和图5的内存模块热添加流程图中,该用户操作接口为一个按钮。用户按下该按钮,即向处理器发出数据迁移和内存模块移除命令。

在本发明实施例中,与内存模块连接的代理装置为如图7a所示的本地代理(homeagent,ha),ha是英特尔(intel)的快速通道互联(quick-pathinterconnect,qpi)协议中的一个组件,现代的intel处理器之间使用qpi总线进行互联。ha负责接收来自qpi的对内存模块的访问请求,并将从内存模块返回的结果送回原内存访问的请求者。

图7a展示了两个intel处理器的互联方法,每个处理器内部可以划分为许多单元,这里仅画出计算单元和互联单元,计算单元发出对地址的访问请求,互联单元将地址请求分配到对应的子模块,比如ha,或者通过qpi转发到其他处理器的互联单元。ha是互联单元的一个子模块,它接收来自互联单元的对它所挂内存的访问请求,这个请求可以来自它自身所在处理器的计算单元,也可以来自的其他处理器的计算单元。

与内存模块连接的代理装置还可以是图7b所示的扩展节点控制器(extendednodecontroller,xnc)/节点控制器(nodecontroller,nc)。如图7b所示,处理器之间的互联除了使用qpi以外,还可以使用xnc/nc,每个处理器的qpi先连接到xnc上,再由xnc的互联网络将所有处理器组合成一个大服务器。每个xnc下面的所有处理器、内存、i/o等统称一个节点(node),所以xnc的众多功能中有一个是类似于ha的,那就是接收从互联组织发来的对自身node内的内存的访问请求。

概括来说,ha和xnc/nc在本发明实施例中都有相同的功能,即:接收这样内存地址访问请求,这些内存地址是其所代理的本地的内存模块的地址。

如图8a所示,处理器接收到用户对一个处于运行状态的内存模块的数据迁移请求时,查找一个处于空闲状态的内存模块,向与处于运行状态的内存模块连接的代理装置ha0发送镜像关系建立指令,代理装置ha0接收该镜像关系建立指令,与连接于该处于空闲状态的内存模块的代理装置ha1建立镜像关系。所谓镜像关系是指,处于空闲状态的内存模块在初始化时不具有物理地址,当代理装置ha0和代理装置ha1建立了镜像关系后,处于空闲状态的内存模块就具有了与处于运行状态的内存模块相同的物理地址pa0-pa1,代理装置ha0在从处理器接收到写入处于运行状态的内存模块的某物理地址的数据后,除了将该数据写入该处于运行状态的内存模块的该物理地址,还将该数据写入代理装置ha1,再由ha1将数据写入处于空闲状态的内存模块中的相同的物理地址中。

步骤s203,所述处理器向所述第一代理装置发送数据迁移指令。

步骤s204,所述第一代理装置接收所述处理器发送的数据读取指令,读取所述第一内存模块中的数据并将所述第一内存模块中的数据返回给所述处理器。

步骤s205,所述第一代理装置接收所述处理器写入的所述第一内存模块中的数据,将所述第一内存模块中的数据发送至所述第二代理装置。

步骤s206,所述第二代理装置将所述第一内存模块中的数据写入所述第二内存模块中。

如图6b所示,将处于运行状态的内存模块3中的数据逐步迁移至处于空闲状态的内存模块4,该数据迁移的过程包括数据读取和数据写入的过程。处理器向ha0发送数据读取指令,ha0接收该数据读取指令,读取处于运行状态的内存模块中的数据并将该处于运行状态的内存模块中的数据返回给处理器。处理器将该处于运行状态的内存模块中的数据写入ha0,然后ha0将该处于运行状态的内存模块中的数据转发给ha1,由ha1将该处于运行状态的内存模块中的数据写入处于空闲状态的内存模块4中。

具体地,ha0和ha1的工作原理为:ha0和ha1建立镜像关系后,服务器中的两个ha组成镜像对,如图7a所示。这两个ha组成镜像对后,会有一个ha是主镜像端(mirroredmasterside),另一个是从镜像端(mirroredslaveside)。在内存模块数据迁移这个应用实例中,主镜像端就是一直在服务器中使用的ha,而从镜像端是用来备份等待迁移的ha。在建立起临时镜像对的一开始,从ha便具有与主ha相同的物理地址,但是它们当中的数据并不一致,所以就要进行数据迁移。

具体的数据迁移过程是处理器从低地址到高地址把ha的所有地址进行遍历,每次执行一部分地址:

1.从内存模块中将某个地址pa0的数据读到处理器;

2.将数据原样写回原地址pa0;

3.主ha收到这个地址写请求,会做两件事,一件是把数据写到自己内存的pa0地址上;

4.主ha知道此时服务器有一个它的镜像ha存在,所以另一件事是它将这个数据包转发给从ha;

5.从ha收到数据包,将数据写到自己内存的pa0地址上。

到此,地址pa0在两个ha里都有了相同的副本,相当于完成了将主ha的pa0上的数据迁移到了从ha的pa0地址上。

当处理器完成对整个主ha的地址遍历,也就完成了ha内存数据迁移。

步骤s207,所述处理器向所述第一代理装置的第一物理地址写入第一数据。

步骤s208,所述第一代理装置接收所述第一数据,并将所述第一数据转发给所述第二代理装置。

步骤s209,所述第二代理装置将所述第一数据写入所述第二内存模块中的所述第一物理地址。

内存模块的数据迁移不是一个瞬间就能完成的任务,需要消耗一段时间,这个时间长度与待迁移的内存模块的容量成正比。在迁移的一段时间里有两个主设备可能会对处于运行状态的内存模块3进行读写操作:一个是处于运行状态的内存模块3上的ha0,它在逐渐遍历处于运行状态的内存模块3的地址,将数据拷贝到处于空闲状态的内存模块4;另一个是服务器总线(比如qpi)上发来的读写请求,这是服务器正常运行时对处于运行状态的内存模块3的读写请求。如果没有镜像关系存在,那么当ha0迁移了一部分地址的数据,而qpi上又发来对这些地址的写操作修改了这里内存的值,这样当迁移完成时,两个内存模块的数据不一致,就不可能倒换。镜像使得所有写操作会将数据同时写到两个内存模块上,因此保证了一致性。

在迁移过程中,如果os需要对主ha的地址pa1进行写操作,实际上就是以上步骤的2~5步,因此依然可以保证两个ha的数据一致性。

步骤s210,所述处理器向所述第一代理装置发送镜像关系解除指令,将所述第一内存模块和所述第二内存模块分别设置为空闲状态和运行状态。

步骤s211,所述第一代理装置接收所述镜像关系解除指令,解除与所述第二代理装置的所述镜像关系处于空闲状态的内存模块处于运行状态的内存模块。

如图6c所示,全部迁移完处于运行状态的内存模块中的数据后,向ha0发送镜像关系解除指令,ha0和ha1解除镜像关系,并且将接收该段物理地址的读写指令的代理装置由ha0修改为ha1,这样原来的处于运行状态的内存模块转为空闲状态,其物理地址失效,处理器不能往该物理地址中写入或从该物理地址中读取数据,原来的处于空闲状态的内存模块转为运行状态,该原来的处于空闲状态的内存模块具有与原来处于运行状态的内存模块相同的物理地址pa0-pa1,接收处理器对该段物理地址的读写操作,也即如图8b所示,处于空闲状态的内存模块和处于运行状态的内存模块的角色发生了转换。但因为进行数据迁移及角色倒换的前后,物理地址不变,所以对于os及os上运行的应用程序来说是不可见的。也因为其不可见性,对于ha0对应的内存模块,无论上面是否有os的内核态数据,以及无论上面的数据是否被应用程序(比如数据库)频繁占用,迁移都是可以完成的,因此大大提高了内存热移除的可行性。

步骤s212,所述处理器断开所述第一内存模块的电源,以移除所述第一内存模块。

由于原来的处于运行状态的内存模块完成了数据迁移以及角色倒换后,实际上转为空闲状态,可以断开该内存模块的电源,以移除该内存模块。

现有的内存模块热移除的流程如图4所示,其包括以下步骤:

a)按下按钮,表示发起命令;

b)按钮led开始闪烁,表示命令已经收到;

c)bios转发命令到os,通知os对要移除的内存进行迁移;

d)与上一步同时,电源led开始闪烁,表示热移除的流程开始进行;

e)os进行内存迁移,将这部分内存地址上运行的业务迁移到其他内存地址上;

f)与上一步同时,bios开始不断查询os是否已完成数据迁移;

g)如果os迁移数据成功,则通知bios迁移成功的结果;

h)如果os迁移数据失败,则将电源led恢复到常亮状态,表示热移除过程停止,并将按钮led设为常亮,通知用户热添加失败(led的操作实际是bios的行为,bios因为收不到os的通知而出现超时,从而判断os数据迁移失败);

i)如果bios收到了os的通知,则删除物理地址,实际是禁用到被移除内存模块的地址请求;

j)如果bios操作成功,则对内存板停止供电,并将电源led设为常灭,表示热移除完成;

k)如果bios操作失败,则对将电源led恢复到常亮状态,表示热移除过程停止,并将按钮led设为常亮,通知用户热添加失败。

与图4所示的内存模块热移除流程不同的是,采用本发明实施例提供的数据迁移方法进行内存模块热移除,不需要os的参与,全部由处理器也即其上的bios程序控制主ha完成,也即将上述步骤c)-步骤i)替换为本发明实施例的步骤s201-步骤s211。

步骤s213,当所述处理器接收到用户的内存模块添加请求时,所述处理器给添加的内存模块供电,并对所述添加的内存模块进行初始化,所述添加的内存模块进入空闲状态处于空闲状态的内存模块。

如图6d所示,将图6c中的处于空闲状态的内存模块3移除后,可以热添加新内存模块5,用户通过操作接口比如按键来发起对新内存模块的热添加操作,该热添加操作的流程与现有技术相同。

如图5为现有技术的内存模块热添加流程,其包括以下步骤:

a.按下按钮,表示发起命令;

b.按钮led开始闪烁,表示命令已经收到;

c.给内存卡(内存板)供电;

d.电源led开始闪烁,在热添加完成之前会一直闪烁;

e.bios进行内存初始化;

f.为初始化好的内存分配地址;

g.通知os新添加的内存可用,并同时上报新添加内存的地址和容量;

h.os完成其内存上线(online)操作;

i.整个过程如果成功完成,则将电源led变为常亮,表示热添加结束;

j.如果出现添加失败,则将电源led设为常灭,并给内存板断电,同时将按钮led设为常亮,通知用户热添加失败。

然而,在本发明实施例中,将新内存模块添加为处于空闲状态的内存模块时,不需要执行上述流程中的步骤f)至步骤h),即对图6d中的内存模块5供电并进行初始化,但是不为其分配物理地址,使之成为这个服务器中的处于空闲状态的内存模块(如图6e所示),为其他处于运行状态的内存模块(1,2,4)的热移除提供了ha到ha地址迁移的条件。

根据本发明实施例提供的一种服务器中内存模块的数据迁移方法,处理器通过在两个内存模块的代理装置之间建立镜像关系,指示代理装置在两个内存模块间进行数据迁移,从而完成一个内存模块到另一个内存模块的数据迁移,整个数据迁移过程无需操作系统参与,数据迁移过程耗时短,方便地实现了服务器中内存模块的数据迁移,能方便地对处于运行状态的内存模块进行热移除,且在数据迁移过程中,仍然可以接收处理器对运行的内存模块的读写操作,不会造成数据错误。

图9为本发明一种服务器的一个实施例的结构示意图。如图9所示,该服务器1000包括:

处理器11、连接处理器11的第一代理装置12和第二代理装置13、与第一代理装置12连接的第一内存模块14、以及与第二代理装置13连接的第二内存模块15;

处理器11,用于当接收到用户对第一内存模块14的数据迁移请求后,并且第一内存模块14为运行状态,第二内存模块15为空闲状态时,查找第二内存模块15,并向第一代理装置12发送镜像关系建立指令;

第一代理装置12,用于接收所述镜像关系建立指令,在接收到所述镜像关系建立指令后,与第二代理装置13建立镜像关系;

处理器11,还用于在所述镜像关系建立完成后,向第一代理装置12发送数据迁移指令;

第一代理装置12,还用于接收所述数据迁移指令,在接收到所述数据迁移指令后,将第一内存模块14中的数据发送至第二代理装置13;

第二代理装置13,用于接收第一代理装置12发出的所述数据,将所述数据写入第二内存模块15中;

处理器11,还用于在所述数据迁移完后,向第一代理装置12发送镜像关系解除指令,以及在发出所述镜像关系解除指令后,将所述第一内存模块和所述第二内存模块分别设置为空闲状态和运行状态;

第一代理装置12,还用于接收到所述镜像关系解除指令后,解除与第二代理装置13的所述镜像关系。

根据本发明实施例提供的一种服务器,其中的处理器通过在两个内存模块的代理装置之间建立镜像关系,指示代理装置在两个内存模块间进行数据迁移,从而完成一个内存模块到另一个内存模块的数据迁移,整个数据迁移过程无需操作系统参与,数据迁移过程耗时短,方便地实现了服务器中内存模块的数据迁移。

本发明还提供了一种服务器的另一个实施例。该服务器包括:

处理器、连接所述处理器的第一代理装置和第二代理装置、与所述第一代理装置连接的第一内存模块、以及与所述第二代理装置连接的第二内存模块;

所述处理器,用于当接收到用户对第一内存模块的数据迁移请求后,并且所述第一内存模块为运行状态,所述第二内存模块为空闲状态时,查找第二内存模块,并向第一代理装置发送镜像关系建立指令;

所述第一代理装置,用于接收所述镜像关系建立指令,在接收到所述镜像关系建立指令后,与第二代理装置建立镜像关系;

所述处理器,还用于在所述镜像关系建立完成后,向所述第一代理装置发送数据迁移指令;

所述第一代理装置,还用于接收所述处理器发送的数据读取指令,,在接收到所述数据读取指令后,读取所述第一内存模块中的数据并将所述第一内存模块中的数据返回给所述处理器;

所述第一代理装置,还用于接收所述处理器写入的所述第一内存模块中的数据,将所述第一内存模块中的数据发送至所述第二代理装置;

所述第二代理装置,用于接收所述第一代理装置发出的所述数据,将所述数据写入所述第二内存模块中;

所述处理器,还用于向所述第一代理装置的第一物理地址写入第一数据;

所述第一代理装置,还用于接收到所述第一数据后,将所述第一数据转发给所述第二代理装置;

所述第二代理装置,还用于在接收到所述第二代理装置转发的所述第一数据后,将所述第一数据写入所述第二内存模块中的所述第一物理地址;

所述处理器,还用于在所述数据迁移完后,向所述第一代理装置发送镜像关系解除指令,以及在发出所述镜像关系解除指令后,将所述第一内存模块和所述第二内存模块分别设置为空闲状态和运行状态;

所述第一代理装置,还用于接收到所述镜像关系解除指令后,解除与所述第二代理装置的所述镜像关系。

所述处理器,还用于在所述数据迁移完以及向所述第一代理装置发送镜像关系解除指令后,断开所述第一内存模块的电源,以移除所述第一内存模块;

所述处理器,还用于当接收到用户的内存模块添加请求时,给添加的内存模块供电,并对所述添加的内存模块进行初始化,所述添加的内存模块成为空闲内存模块。

根据本发明实施例提供的一种服务器,其中的处理器通过在两个内存模块的代理装置之间建立镜像关系,指示代理装置在两个内存模块间进行数据迁移,从而完成一个内存模块到另一个内存模块的数据迁移,整个数据迁移过程无需操作系统参与,数据迁移过程耗时短,方便地实现了服务器中内存模块的数据迁移,能方便地对处于运行状态的内存模块进行热移除,且在数据迁移过程中,仍然可以接收处理器对运行的内存模块的读写操作,不会造成数据错误。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的设备和模块的具体工作过程,可以参考前述方法实施例中的对应过程描述,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个设备中,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部,模块来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件设备的形式体现出来,该计算机软件设备可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

以上所述的实施方式,并不构成对该技术方案保护范围的限定。任何在上述实施方式的精神和原则之内所作的修改、等同替换和改进等,均应包含在该技术方案的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1