一种内存数据迁移方法、装置及系统的制作方法

文档序号:6400470阅读:225来源:国知局
专利名称:一种内存数据迁移方法、装置及系统的制作方法
技术领域
本发明涉及计算机领域,尤其涉及一种内存数据迁移方法、装置及系统。
背景技术
随着计算机技术的发展,内存数据迁移技术的应用范围越来越广泛,如内存热备、热节点插拔、节能等 RAS(Reliability, Availability and Serviceability,可靠性、可用性、可服务性)技术都是基于或者用到内存数据迁移技术。所述内存数据迁移,是把内存上的数据从一个地方迁移到另一个地方的技术,同时要求在内存数据迁移过程中保证系统正常运行,不出现死机现象。现有技术中,采用硬件实现内存数据迁移的方法如下:当需要进行内存数据迁移时,系统中的内存控制器和B10S(Basic Input OutputSystem,基本输入输出系统)对备份内存初始化,然后把待迁移内存所在内存块中的所有数据拷贝到备份内存,当数据拷贝完成后停用待迁移内存所在内存块,启用备份内存;因为所述备份内存的物理地址与所述待迁移内存的物理地址之间存在镜像关系,这样对操作系统来说,迁移前后访问待迁移内存存储的数据的物理地址并没发生改变,但实际使用的物理内存设备已经改变。该方法虽然能实现内存的迁移,但是迁移时要迁移待迁移内存所在内存块中的所有数据。当系统只需对几个物理内存页进行迁移时,采用这种方法必然会造成资源的浪费。针对用硬件实现内存数据迁移所产生的问题,现有技术中从软件层面做了一些改进,方法如下:当需要进行内存数据迁移时,系统首先分配新的物理内存给待迁移内存,接着删除所述待迁移内存中的数据的虚拟地址与待迁移内存的物理地址之间的映射关系,然后将所述待迁移内存中的数据拷贝到所述新的物理内存中,并建立所述待迁移内存中的数据的虚拟地址与新的物理内存的物理地址之间的映射关系。但因为Linux操作系统对内存数据迁移的支持还不够完善,用户态任务可以被睡眠或打断,内核态任务由于具有最高优先级,不能被打断,如果运行过程中被打断则可能面临死机的危险,所以目前Linux操作系统一般只有对用户态程序使用的内存才可以进行内存数据迁移,对内核态的内存(即内核使用的内存)是无法迁移的,随着Linux应用越来越广,目前急需解决对内核态内存的数据的迁移问题。

发明内容
本发明的实施例提供一种内存数据迁移方法、装置及系统,能够实现内核态内存数据的迁移,并且适用于用户态内存数据的迁移。本发明的实施例采用如下技术方案:第一方面,提供了一种内存数据迁移方法,所述方法包括:当前处理器核接收内存数据迁移的指示信息,所述指示信息用于指示迁移第一内存上的待迁移数据;通知其它处理器核进入静默stop-machine状态;分配第二内存给所述第一内存上的待迁移数据;将所述第一内存上的待迁移数据存储到所述第二内存上;基于所述第二内存的物理地址,修改所述待迁移数据的地址映射信息,其中,所述修改后的地址映射信息表示在数据迁移完成后,所述待迁移数据的虚拟地址与所述第二内存上所述待迁移数据所占用的物理地址之间的映射关系,其中所述待迁移数据在迁移前后的虚拟地址保持不变。在第一种可能的实现方式中,根据第一方面,所述第一内存存放内核态数据。在第二种可能的实现方式中,根据第一种可能的实现方式,所述第一内存为对等映射区中内核态数据的内存;所述基于所述第二内存的物理地址,修改所述待迁移数据的地址映射信息,其中,所述修改后的地址映射信息表示在数据迁移完成后,所述待迁移数据的虚拟地址与所述第二内存上所述待迁移数据所占用的物理地址之间的映射关系,其中所述待迁移数据在迁移前后的虚拟地址保持不变,包括:基于所述第二内存的物理地址,修改所述待迁移数据所在的对等映射区对应的页表中所述待迁移数据的地址映射信息,其中,所述修改后的地址映射信息表示在数据迁移完成后,所述待迁移数据的虚拟地址与所述第二内存上所述待迁移数据所占用的物理地址之间的映射关系,其中所述待迁移数据在迁移前后的虚拟地址保持不变。在第三种可能的实现方式中,根据第一种可能的实现方式,所述第一内存为虚拟内存映射Vme_ap区中内核态数据的内存;所述基于所述第二内存的物理地址,修改所述待迁移数据的地址映射信息,其中,所述修改后的地址映射信息表示在数据迁移完成后,所述待迁移数据的虚拟地址与所述第二内存上所述待迁移数据所占用的物理地址之间的映射关系,其中所述待迁移数据在迁移前后的虚拟地址保持不变,包括:基于所述第二内存的物理地址,修改所述待迁移数据所在的Vmemmap区对应的页表中所述待迁移数据的地址映射信息,其中,所述修改后的地址映射信息表示在数据迁移完成后,所述待迁移数据的虚拟地址与所述第二内存上所述待迁移数据所占用的物理地址之间的映射关系,其中所述待迁移数据在迁移前后的虚拟地址保持不变。在第四种可能的实现方式中,根据第三种可能的实现方式,在所述接收内存数据迁移的指示信息前,还包括:对指定内核态数据,将所述Vme_ap区的虚拟地址分配给存放所述指定内核态数据的第一内存。在第五种可能的实现方式中,根据第一方面至第四种可能的实现方式,在所述基于所述第二内存的物理地址,修改所述待迁移数据的地址映射信息后,还包括:通知所述其它处理器核退出所述Stop-machine状态。第二方面,提供了一种内存数据迁移装置,所述内存数据迁移装置包括:接收单元,用于接收内存数据迁移的指示信息,所述指示信息用于指示迁移第一内存上的待迁移数据;
通知单元,用于通知本处理器核之外的其它处理器核进入静默Stop-machine状态;内存分配单元,用于分配第二内存给所述第一内存上的待迁移数据;存储单元,用于将所述第一内存上的待迁移数据存储到所述第二内存上;映射信息修改单元,用于基于所述第二内存的物理地址,修改所述待迁移数据的地址映射信息,其中,所述修改后的地址映射信息表示在数据迁移完成后,所述待迁移数据的虚拟地址与所述第二内存上所述待迁移数据所占用的物理地址之间的映射关系,其中所述待迁移数据在迁移前后的虚拟地址不变。在第一种可能的实现方式中,根据第二方面,所述第一内存存放内核态数据。在第二种可能的实现方式中,根据第一种可能的实现方式,所述第一内存为对等映射区中内核态数据的内存;所述映射信息修改单元具体用于基于所述第二内存的物理地址,修改所述待迁移数据所在的对等映射区对应的页表中所述待迁移数据的地址映射信息,其中,所述修改后的地址映射信息表示在数据迁移完成后,所述待迁移数据的虚拟地址与所述第二内存上所述待迁移数据所占用的物理地址之间的映射关系,其中所述待迁移数据在迁移前后的虚拟地址保持不变。在第三种可能的实现方式中,根据第一种可能的实现方式,所述第一内存为虚拟内存映射Vme_ap区中内核态数据的内存;所述映射信息修改单元具体用于基于所述第二内存的物理地址,修改所述待迁移数据所在的Vmemmap区对应的页表中所述待迁移数据的地址映射信息,其中,所述修改后的地址映射信息表示在数据迁移完成后,所述待迁移数据的虚拟地址与所述第二内存上所述待迁移数据所占用的物理地址之间的映射关系,其中所述待迁移数据在迁移前后的虚拟地址保持不变。在第四种可能的实现方式中,根据第三种可能的实现方式,所述内存数据迁移装置还包括:虚拟地址分配单元,用于在所述接收单元接收内存数据迁移的指示信息前,对指定内核态数据,将所述Vme_ap区的虚拟地址分配给存放所述指定内核态数据的第一内存。在第五种可能的实现方式中,根据第二方面至第四种可能的实现方式,所述通知单元,还用于在所述映射信息修改单元基于所述第二内存的物理地址,修改所述待迁移数据的地址映射信息后,通知所述其它处理器核退出所述Stop-machine状态。第三方面,提供了一种计算机系统,包括:总线;与总线相连的多核处理器;与总线相连的内存;其中,所述多核处理器包括多个处理器核,当前处理器核通过所述总线调用所述内存中的执行指令,以用于:接收内存数据迁移的指示信息,所述指示信息用于指示迁移第一内存上的待迁移数据;通知其它处理器核进入静默Stop-machine状态;分配第二内存给所述第一内存上的待迁移数据;将所述第一内存上的待迁移数据存储到所述第二内存上;基于所述第二内存的物理地址,修改所述待迁移数据的地址映射信息,其中,所述修改后的地址映射信息表示在数据迁移完成后,所述待迁移数据的虚拟地址与所述第二内存上所述待迁移数据所占用的物理地址之间的映射关系,其中所述待迁移数据在迁移前后的虚拟地址保持不变。基于上述本发明的描述,由于当前处理器核在接收内存数据迁移的指示信息后,首先通知其它处理器核进入静默Stop-machine状态,即停止其它正在运行的处理器核,且不受中断打断,然后再分配第二内存给所述第一内存上的待迁移数据,并将所述第一内存上的待迁移数据存储到第二内存上,基于所述第二内存的物理地址,修改所述待迁移数据的地址映射信息,这样就不存在当前处理器核中发生内核态内存数据迁移时,其它处理器核中正在运行的内核态任务被中断打断的问题,解决了操作系统不够完善,由于内核态任务具有最高优先级,不能被打断,如果运行过程中被打断则可能面临死机的危险而不能进行内存数据迁移的问题,最终实现了内核态内存的迁移,并且该方法同样适用于用户态内存的迁移。


图1为本发明实施例提供的一种内存数据迁移方法;图2为虚拟地址到物理地址的映射索引示意图;图3为X86-64虚拟地址空间分布图;图4为本发明实施例提供的另一种内存数据迁移方法;图5为本发明实施例提供的又一种内存数据迁移方法;图6为本发明实施例提供的一种内存数据迁移装置;图7为本发明实施例提供的另一种内存数据迁移装置;图8为本发明实施例提供的一种计算机系统。
具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。为了方便理解本发明实施例,首先在此介绍本发明实施例描述中会引入的几个要素:Linux:一种自由和开放源码的类Unix操作系统;DIMM =Dual Inline Memory Modules,双列直插式存储模块,即我们平时计算机上看到的内存条;Page:物理内存页,x86架构下一个page大小为4KB ;Pfn:page frame number,物理页号,比如pfnO对应物理地址0-4KB的区域;内存数据迁移:在不影响系统正常运行的前提下,把该内存数据从一个page迁移到另一个page ;内核态内存/用户态内存:由内核线程/用户进程所使用的内存;
Vmemmap区:x86_64中的一个虚拟地址空间区域,用于存放page结构体;对等映射区:x86-64中的一个虚拟地址空间区域,一般内存分配时默认使用此区域的虚拟地址,且虚拟地址到物理地址的转换结果差一个固定的偏移量(即:物理地址=虚拟地址-偏移量),但具体转换时是CPU根据页表来计算的;Stop-machine:系统当前只有一个处理器核在运行,其他处理器核处于挂起状态,且不受中断打断;热插拔:在系统运行过程中,移除以及插入硬件设备,并且不影响系统正常运行。需要说明的是,为了便于描述,本发明实施例提供的内存数据迁移方法、装置和系统均在Linux操作系统下进行说明,当然,所述内存数据迁移方法、装置和系统也可适用于其它操作系统,本发明实施例在此不再一一说明。实施例一、本发明实施例提供一种内存数据迁移方法,本实施例的方法可以由当前处理器核执行,所述当前处理器核通常以硬件和/或软件的方式来实现,可以集成在内存数据迁移的网络设备中。参照图1,当内存数据迁移开始后,本发明实施例的内存数据迁移方法包括如下步骤:101、当前处理器核接收内存数据迁移的指示信息,所述指示信息用于指示迁移第一内存上的待迁移数据。具体的,Linux操作系统所在的计算机系统中,包含多核处理器,所述多核处理器由多个处理器核构成,在内存数据迁移开始前,其中的一个处理器核(当前处理器核)会接收内存数据迁移的指示信息,所述指示信息用于指示迁移第一内存上的待迁移数据。需要说明的是,所述第一内存中的“第一”不具有任何特殊的含义,仅是为了区别于要迁移到的目标内存,即下述的第二内存。具体的,所述第一内存和所述第二内存都属于内存,内存包括用户态内存和内核态内存,所以内存数据迁移时,可以迁移用户态内存(例如被用户锁定的内存),也可以迁移内核态内存,本发明实施例对此不作具体限定。102、通知其它处理器核进入静默Stop-machine状态。具体的,所述Stop-machine状态对应系统当前只有一个处理器核在运行,其它处理器核处于挂起状态,且不受中断打断的状态。故所述通知其它处理器核进入所述Stop-machine状态,即停止其它正在运行的处理器核,且不受中断打断。具体的,当多核处理器中的某个处理器核(当前处理器核)接收到内存数据迁移的指示信息后,会通知其它处理器核进入所述Stop-machine状态,所述其它处理器核接收到进入Stop-machine状态的通知后,停止处理器核中正在运行的任务,且不受中断打断,这样仅发出通知的当前处理器核在运行,执行内存数据迁移的操作,防止了当前处理器核进行内存数据迁移时,其它处理器核中正在运行的内核态任务被随意打断的问题,解决了Linux操作系统不够完善,由于内核态任务由于具有最高优先级,不能被打断,如果运行过程中被打断则可能面临死机的危险而不能进行内存数据迁移的问题。103、分配第二内存给所述第一内存上的待迁移数据。104、将所述第一内存上的待迁移数据存储到所述第二内存上。具体的,所述将所述第一内存上的待迁移数据存储到所述第二内存上,可以通过将第一内存上的待迁移数据拷贝到所述第二内存的方式进行存储,也可以是通过其它途径,本发明实施例对此不作具体限定,仅说明将所述第一内存上的待迁移数据存储到所述
第二内存上。105、基于所述第二内存的物理地址,修改所述待迁移数据的地址映射信息。其中,所述修改后的地址映射信息表示在数据迁移完成后,所述待迁移数据的虚拟地址与所述第二内存上所述待迁移数据所占用的物理地址之间的映射关系,其中所述待迁移数据在迁移前后的虚拟地址保持不变。具体的,所述第一内存的物理地址对应第一虚拟地址,当内存数据迁移发生后,所述第一内存上待迁移数据的物理地址变化,从第一内存的物理地址变化为所述第二内存的物理地址,但与所述第二内存的物理地址对应的虚拟地址没有发生变化,仍是第一虚拟地址。因为内存数据迁移发生后,待迁移数据的物理地址发生变化,虚拟地址不变,故所述待迁移数据的虚拟地址与物理地址之间的映射关系发生变化,所以需要根据所述第二内存的物理地址,修改所述待迁移数据的地址映射信息。具体的,虚拟地址与物理地址之间存在映射关系,在L i nux操作系统中,对于一个四层页管理架构,虚拟地址由五部分构成,具体如图2所示,包括页全局目录、页上级目录、页中间目录、页表、页内偏移。其中,页全局目录的物理地址存放在CPU(CentralProcessing Unit,中央处理器)的CR3 (Control Register3,控制寄存器3)中,当虚拟地址转换成物理地址时,第一,CPU根据所述CR3中的值,找到页全局目录所在的物理页,第二根据虚拟地址中的所述页全局目录索引,查询到相应的页全局目录项,页全局目录项中存储了该虚拟地址所对应页上级目录的物理地址,第三根据虚拟地址中的所述页上级目录索弓丨,查询到所述页上级目录中相应的页上级目录项,页上级目录项中存储了该虚拟地址所对应页中间目录的物理地址,第四根据虚拟地址中的所述页中间目录索引,查询到所述页中间目录中相应的页中间目录项,页中间目录项中存储了该虚拟地址所对应页表的物理地址,第五根据虚拟地址中的所述页表索引,查询到所述页表中相应的页表项,所述页表项中存储了该虚拟地址所对应物理页的物理地址,最后用虚拟地址的最低12位,也就是页内偏移,加上所述物理页的物理地址,就得到该虚拟地址所对应的物理地址。故基于所述第二内存的物理地址,修改所述待迁移数据的地址映射信息,实质是修改所述待迁移数据的虚拟地址所对应物理页的物理地址,也就是修改所述待迁移数据的虚拟地址所对应的页表。其中,所述修改后的地址映射信息表示在数据迁移完成后,所述待迁移数据的虚拟地址与所述第二内存上所述待迁移数据所占用的物理地址之间的映射关系。需要说明的是,上述虚拟地址与物理地址之间的转换是现有技术,本发明实施例旨在说明基于所述第二内存的物理地址,修改所述待迁移数据的地址映射信息,对具体如何修改所述待迁移数据的地址信息不作具体限定。至此,本发明实施例提供的内存数据迁移方法的过程结束。应当理解的是,基于本发明的内存数据迁移方法之后,进一步的能执行内存热备、节点热插拔、节能等RAS技术。下面以内存热备、节点热插拔,节能为例进行说明:
在内存热备场景下,当某一块内存检测到超过一定阈值数量的错误后,管理程序判断该内存即将发生故障,此时应该及时把该内存上的数据迁移到另一块新的内存上(其中,新内存在系统启动时已经预留,操作系统不可以使用),在此过程中使用本发明实施例提供的内存数据迁移方法,可以解决目前通过硬件实现内存热备中的内存数据迁移所导致的成本较高的问题。在节点热插拔场景下,如果一个节点发生故障或者一个节点的负载很低,则可以把该节点的数据迁移至其它节点,然后对该节点做下电处理,在此节点热移除过程中可以使用本发明实施例提供的内存数据迁移方法。当然,如果机器负载持续增加,最后发现计算能力不足时,可以添加一个节点,来减少其它节点的负担,在此节点热添加过程中也可以使用本发明实施例提供的内存数据迁移方法。和节点热插拔场景下的节点热移除类似,节能也基于上述内存数据迁移方法。但是节点热移除针对的粒度是一整个NUMA (Non Uniform Memory Access Achitecture,非一致访问共享存储)节点,从节能角度来讲,我们可以把粒度做的更小,比如一个内存控制器或者一根01丽(0皿1-111111^^61110^^0(111168,双列直插式存储模块)条。当系统有大量内存空闲不用时,我们完全可以把这些内存进行下电处理,从而节省能耗,在下电前该内存区域如果有数据存在,则会涉及内存数据迁移,在进行内存数据迁移时可以使用本发明实施例提供的内存数据迁移方法。需要说明的是,上述内 容仅是示例性的提供三种基于本发明的内存数据迁移方法的RAS技术,当然还存在其它应用场景,本发明实施例在此不再一一描述。本发明实施例提供的内存数据迁移方法,由于当前处理器核在接收内存数据迁移的指示信息后,首先通知其它处理器核进入静默Stop-machine状态,即停止其它正在运行的处理器核,且不受中断打断,然后再分配第二内存给所述第一内存上的待迁移数据,并将所述第一内存上的待迁移数据存储到第二内存上,基于所述第二内存的物理地址,修改所述待迁移数据的地址映射信息,这样就不存在当前处理器核中发生内核态内存数据迁移时,其它处理器核中正在运行的内核态任务被中断打断的问题,解决了 Linux操作系统不够完善,由于内核态任务具有最高优先级,不能被打断,如果运行过程中被打断则可能面临死机的危险而不能进行内存数据迁移的问题,最终实现了内核态内存的迁移,并且该方法同样适用于用户态内存的迁移。实施例二、本发明实施例提供一种内存数据迁移方法,本实施例的方法可以由当前处理器核执行,所述当前处理器核通常以硬件和/或软件的方式来实现,可以集成在内存数据迁移的网络设备中。如图3所示,该图为X86-64虚拟地址空间分布图,本实施例的方法具体以待迁移数据的内存存放内核态数据,且所述待迁移数据的内存为图3对等映射区中内核态数据的内存为例进行说明,参照图4,当内存数据迁移开始后,本发明实施例的内存数据迁移方法包括如下步骤:401、当前处理器核接收内存数据迁移的指示信息,所述指示信息用于指示迁移第一内存上的待迁移数据,其中,所述第一内存为对等映射区中内核态数据的内存。具体的,Linux操作系统所在的计算机系统中,包含多核处理器,所述多核处理器由多个处理器核构成,在内存数据迁移开始前,其中的一个处理器核(当前处理器核)会接收内存数据迁移的指示信息。具体的,这里所述指示信息用于指示迁移第一内存上的待迁移数据,其中,所述第一内存为对等映射区中内核态数据的内存。需要说明的是,所述第一内存中的“第一”不具有任何特殊的含义,仅是为了区别于要迁移到的目标内存,即下述的第二内存。402、通知其它处理器核进入静默stop-machine状态。具体的,所述Stop-machine状态对应系统当前只有一个处理器核在运行,其它处理器核处于挂起状态,且不受中断打断的状态。故所述通知其它处理器核进入所述Stop-machine状态,即停止其它正在运行的处理器核,且不受中断打断。具体的,当多核处理器中的某个处理器核(当前处理器核)接收到内存数据迁移的指示信息后,会通知其它处理器核进入所述Stop-machine状态,所述其它处理器核接收到进入Stop-machine状态的通知后,停止处理器核中正在运行的任务,且不受中断打断,这样仅发出通知的当前处理器核在运行,执行内存数据迁移的操作,防止了当前处理器核进行内存数据迁移时,其它处理器核中正在运行的内核态任务被随意打断的问题,解决了Linux操作系统不够完善,由于内核态任务由于具有最高优先级,不能被打断,如果运行过程中被打断则可能面临死机的危险而不能进行内存数据迁移的问题。403、分配第二内存给所述第一内存上的待迁移数据。404、将所述第一内存上的待迁移数据存储到所述第二内存上。405、基于所述第二内存的物理地址,修改所述待迁移数据所在的对等映射区对应的页表中所述待迁移数据的地址映射信息。其中,所述修改后的地址映射信息表示在数据迁移完成后,所述待迁移数据的虚拟地址与所述第二内存上所述待迁移数据所占用的物理地址之间的映射关系,其中所述待迁移数据在迁移前后的虚拟地址保持不变。需要说明的是,所述第一内存的物理地址对应第一虚拟地址,当内存数据迁移发生后,所述第一内存上待迁移数据的物理地址变化,从第一内存的物理地址变化为所述第二内存的物理地址,但与所述第二内存的物理地址对应的虚拟地址没有发生变化,仍是第一虚拟地址。因为内存数据迁移发生后,待迁移数据的物理地址发生变化,虚拟地址不变,故所述待迁移数据的虚拟地址与物理地址之间的映射关系发生变化,具体的,虚拟地址与物理地址之间的映射关系可参见实施例一步骤105的描述,本发明实施例对此不再赘述。具体的,本发明实施例中所述第一内存为对等映射区中内核态数据的内存,所以基于所述第二内存的物理地址,修改所述待迁移数据的地址映射信息,实质是基于所述第二内存的物理地址,修改所述待迁移数据所在的对等映射区对应的页表中所述待迁移数据的地址映射信息。至此,本发明实施例提供的内存数据迁移方法的过程结束。本发明实施例提供的实现对等映射区内核态数据的内存数据迁移方法,由于内存数据迁移过程中,系统进入静默stop-machine状态,即内核线程短暂休眠,因此解决了内核态任务具有最高优先级,不能被打断,如果运行过程中被打断则可能面临死机的危险而不能进行内存数据迁移的问题,使得可以实现对等映射区大片或小块内核态数据的迁移;同时由于该方法在迁移前后仍可按照原先的虚拟地址进行访问,不会造成内核缺页异常。本发明实施例还提供一种内存数据迁移方法,本实施例的方法可以由当前处理器核执行,所述当前处理器核通常以硬件和/或软件的方式来实现,可以集成在内存数据迁移的网络设备中。具体以待迁移数据的内存存放内核态数据,且所述待迁移数据的内存为图3Vmemmap (Virtual memory mapping,虚拟内存映射)区中内核态数据的内存为例进行说明,参照图5,当内存数据迁移开始后,本发明实施例的内存数据迁移方法包括如下步骤:501、当前处理器核接收内存数据迁移的指示信息,所述指示信息用于指示迁移第一内存上的待迁移数据,其中,所述第一内存为虚拟内存映射Vme_ap区中内核态数据的内存。具体的,Linux操作系统所在的计算机系统中,包含多核处理器,所述多核处理器由多个处理器核构成,在内存数据迁移开始前,其中的一个处理器核(当前处理器核)会接收内存数据迁移的指示信息。具体的,这里所述指示信息用于指示迁移第一内存上的待迁移数据,其中,所述第一内存为Vmemmap区中内核态数据的内存。需要说明的是,所述第一内存中的“第一”不具有任何特殊的含义,仅是为了区别于要迁移到的目标内存,即下述的第二内存。502、通知其它处理器核进入静默Stop-machine状态。具体的,所述Stop-machine状态对应系统当前只有一个处理器核在运行,其它处理器核处于挂起状态,且不受中断打断的状态。故所述通知其它处理器核进入所述Stop-machine状态,即停止其它正在运行的处理器核,且不受中断打断。具体的,当多核处理器中的某个处理器核(当前处理器核)接收到内存数据迁移的指示信息后,会通知其它处理器核进入所述Stop-machine状态,所述其它处理器核接收到进入Stop-machine状态的通知后,停止处理器核中正在运行的任务,且不受中断打断,这样仅发出通知的当前处理器核在运行,执行内存数据迁移的操作,防止了当前处理器核进行内存数据迁移时,其它处理器核中正在运行的内核态任务被随意打断的问题,解决了Linux操作系统不够完善,由于内核态任务由于具有最高优先级,不能被打断,如果运行过程中被打断则可能面临死机的危险而不能进行内存数据迁移的问题。503、分配第二内存给所述第一内存上的待迁移数据。504、将所述第一内存上的待迁移数据存储到所述第二内存上。505、基于所述第二内存的物理地址,修改所述待迁移数据所在的Vmemmap区对应的页表中所述待迁移数据的地址映射信息。其中,所述修改后的地址信息表示在数据迁移完成后,所述待迁移数据的虚拟地址与所述第二内存上所述待迁移数据所占用的物理地址之间的映射关系,其中所述待迁移数据在迁移前后的虚拟地址保持不变。需要说明的是,所述第一内存的物理地址对应第一虚拟地址,当内存数据迁移发生后,所述第一内存上待迁移数据的物理地址变化,从第一内存的物理地址变化为所述第二内存的物理地址,但与所述第二内存的物理地址对应的虚拟地址没有发生变化,仍是第一虚拟地址。因为内存数据迁移发生后,待迁移数据的物理地址发生变化,虚拟地址不变,故所述待迁移数据的虚拟地址与物理地址之间的映射关系发生变化,具体的,虚拟地址与物理地址之间的映射关系可参见实施例一步骤105的描述,本发明实施例对此不再赘述。具体的,本发明实施例中所述第一内存为虚拟内存映射Vmemmap区中内核态数据的内存,所以基于所述第二内存的物理地址,修改所述待迁移数据的地址映射信息,实质是基于所述第二内存的物理地址,修改待迁移数据所在的Vmemmap区对应的页表中所述待迁移数据的地址映射信息。至此,本发明实施例提供的内存数据迁移方法的过程结束。本发明实施例提供的实现Vmemmap区内核态数据内存数据迁移的方法,由于内存数据迁移过程中,系统进入静默Stop-machine状态,即内核线程短暂休眠,因此解决了内核态任务具有最高优先级,不能被打断,如果运行过程中被打断则可能面临死机的危险而不能进行内存数据迁移的问题,使得可以实现Vme_ap区大片或小块内核态数据的迁移;同时由于该方法在迁移前后仍可按照原先的虚拟地址进行访问,不会造成内核缺页异常。进一步的,因为一般在内存分配时,默认使用对等映射区中的虚拟地址,所以要想将所述第一内存中的待迁移数据在所述Vmemmap区进行迁移,则所述方法还包括:在所述接收内存数据迁移的指示信息前,对指定内核态数据,将所述Vmemmap区的虚拟地址分配给存放所述指定内核态数据的第一内存。进一步的,为了在所述内存数据迁移后,不影响其它处理器核中任务的正常运行,则在所述基于所述第二内存的物理地址,修改所述待迁移数据的地址映射信息后,所述方法还包括:通知所述其它处理器核退出所述Stop-machine状态。具体的,通知所述其它处理器核退出所述Stop-machine状态,即启动所述停止的其它进入短暂休眠状态的处理器核继续运行,这样可以保证不因为内存数据迁移,影响到系统的正常运行。实施例三、本发明实施例提供一种内存数据迁移装置60,具体如图6所示,所述内存数据迁移装置60包括:接收单元61、通知单元62、内存分配单元63、存储单元64、映射信息修改单元65。应当理解的是,本发明实施例的内存数据迁移装置60的功能是由当前处理器核来操作的,换言之,在一种物理产品形态下,本发明实施例的内存数据迁移装置60具体可以是当前处理器核60 (亦可称为本处理器核60)。所述接收单元61,用于接收内存数据迁移的指示信息,所述指示信息用于指示迁移第一内存上的待迁移数据。具体的,Linux操作系统所在的计算机系统中,包含多核处理器,所述多核处理器由多个处理器核构成,在内存数据迁移开始前,其中的一个处理器核(当前处理器核60)会接收内存数据迁移的指示信息,所述指示信息用于指示迁移第一内存上的待迁移数据。需要说明的是,所述第一内存中的“第一”不具有任何特殊的含义,仅是为了区别于要迁移到的目标内存,即下述的第二内存。具体的,所述第一内存和所述第二内存都属于内存,内存包括用户态内存和内核态内存,所以内存数据迁移时,可以迁移用户态内存(例如被用户锁定的内存),也可以迁移内核态内存,本发明实施例对此不作具体限定。
所述通知单元62,用于通知本处理器核之外的其它处理器核进入静默Stop-machine 状态。具体的,所述Stop-machine状态对应系统当前只有一个处理器核在运行,其它处理器核处于挂起状态,且不受中断打断的状态。故所述通知其它处理器核进入所述Stop-machine状态,即停止其它正在运行的处理器核,且不受中断打断。具体的,当多核处理器中的某个处理器核(当前处理器核60)接收到内存数据迁移的指示信息后,会通知其它处理器核进入所述Stop-machine状态,所述其它处理器核接收到进入Stop-machine状态的通知后,停止处理器核中正在运行的任务,且不受中断打断,这样仅发出通知的当前处理器核60在运行,执行内存数据迁移的操作,防止了当前处理器核60进行内存数据迁移时,其它处理器核中正在运行的内核态任务被随意打断的问题,解决了 Linux操作系统不够完善,由于内核态任务由于具有最高优先级,不能被打断,如果运行过程中被打断则可能面临死机的危险而不能进行内存数据迁移的问题。所述内存分配单元63,用于分配第二内存给所述第一内存上的待迁移数据。所述存储单元64,用于将所述第一内存上的待迁移数据存储到所述第二内存上。所述映射信息修改单元65,用于基于所述第二内存的物理地址,修改所述待迁移数据的地址映射信息,其中,所述修改后的地址映射信息表示在数据迁移完成后,所述待迁移数据的虚拟地址与所述第二内存上所述待迁移数据所占用的物理地址之间的映射关系,其中,所述待迁移数据在迁移前后的虚拟地址不变。具体的,所述第一内存的物理地址对应第一虚拟地址,当内存数据迁移发生后,所述第一内存上待迁移数据的物理地址变化,从第一内存的物理地址变化为所述第二内存的物理地址,但与所述第二内存的物理地址对应的虚拟地址没有发生变化,仍是第一虚拟地址。因为内存数据迁移发生后,待迁移数据的物理地址发生变化,虚拟地址不变,故所述待迁移数据的虚拟地址与物理地址之间的映射关系发生变化,所以所述映射信息修改单元65需要根据所述第二内存的物理地址,修改所述待迁移数据的地址映射信息。具体的,虚拟地址与物理地址之间的映射关系可参见实施例一步骤105的描述,本发明实施例对此不再赘述。具体的,通过实施例一步骤105的描述,所述映射信息修改单元65基于所述第二内存的物理地址,修改所述待迁移数据的地址映射信息,实质是修改所述待迁移数据的虚拟地址所对应物理页的物理地址,也就是修改所述待迁移数据的虚拟地址所对应的页表。需要说明的是,上述虚拟地址与物理地址之间的转换是现有技术,本发明实施例旨在说明基于所述第二内存的物理地址,修改所述待迁移数据的地址信息,对具体如何修改所述待迁移数据的地址信息不作具体限定。进一步的,所述第一内存存放内核态数据。具体的,所述第一内存存放内核态数据,所述内核态数据可以是图3所示的x86-64虚拟地址空间分布图中对等映射区的内核态数据,也可以是虚拟内存映射Vmemmap区中内核态数据,本发明实施例对此不作具体限定。进一步的,所述第一内存为对等映射区中内核态数据的内存。相应的,所述映射信息修改单元具体用于基于所述第二内存的物理地址,修改所述待迁移数据所在的对等映射区对应的页表中所述待迁移数据的地址映射信息,其中,所述修改后的地址映射信息表示在数据迁移完成后,所述待迁移数据的虚拟地址与所述第二内存上所述待迁移数据所占用的物理地址之间的映射关系,其中所述待迁移数据在迁移前后的虚拟地址保持不变。可选的,所述第一内存为虚拟内存映射Vmemmap区中内核态数据的内存。相应的,所述映射信息修改单元具体用于基于所述第二内存的物理地址,修改所述待迁移数据所在的Vme_ap区对应的页表中所述待迁移数据的地址映射信息,其中,所述修改后的地址映射信息表示在数据迁移完成后,所述待迁移数据的虚拟地址与所述第二内存上所述待迁移数据所占用的物理地址之间的映射关系,其中所述待迁移数据在迁移前后的虚拟地址保持不变。进一步的,如图7所示,因为一般在内存分配时,默认使用对等映射区中的虚拟地址,所以要想将所述第一内存中的待迁移数据在所述Vme_ap区进行迁移,所述内存数据迁移装置60还包括虚拟地址分配单元66。所述虚拟地址分配单元66,用于在所述接收单元61接收内存数据迁移的指示信息前,对指定内核态数据,将所述Vme_ap区的虚拟地址分配给存放所述指定内核态数据的第一内存。进一步的,如图7所示,为了在所述内存数据迁移后,不影响其它处理器核中任务的正常运行,还包括:所述通知单元62,还用于在所述映射信息修改单元65基于所述第二内存的物理地址,修改所述待迁移数据的地址映射信息后,通知所述其它处理器核退出所述Stop-machine 状态。具体的,通知所述其它逻辑处理器核退出所述Stop-machine状态,即启动所述停止的其它正在运行的逻辑进入短暂休眠状态的处理器核继续运行,这样可以保证不因为内存数据迁移,影响到系统的正常运行。所述内存数据迁移装置60进行内存数据迁移的方法具体可参见实施例一和实施例二的描述,本发明实施例对此不再赘述。本发明实施例提供一种内存数据迁移装置,由于接收单元在接收内存数据迁移的指示信息后,通知单元通知本处理器核之外的其它处理器核进入静默Stop-machine状态,即停止其它正在运行的处理器核,且不受中断打断,然后内存分配单元分配第二内存给所述第一内存上的待迁移数据,存储单元将所述第一内存上的待迁移数据存储到所述第二内存,最后映射信息修改单元基于所述第二内存的物理地址,修改所述待迁移数据的地址映射信息,这样就不存在当前处理器核中发生内存数据迁移时,其它处理器中核正在运行的内核态任务被中断打断的问题,解决了 Linux操作系统不够完善,由于内核态任务具有最高优先级,不能被打断,如果运行过程中被打断则可能面临死机的危险而不能进行内存数据迁移的问题,最终实现了内核态内存的迁移,并且当前处理器核同样适用于用户态内存的迁移。实施例四、本发明实施例还提供一种计算机系统80,具体如图8所示,包括:总线81;
与所述总线81相连的多处理器核82 ;与所述总线相连的内存83。其中,所述多核处理器82包括多个处理器核,如处理器核821、处理器核822、……、处理器核823,若要在其中某个处理器核(如处理器核821)中进行内存数据迁移,则处理器核821通过所述总线81调用所述内存中的执行指令,以用于:接收内存数据迁移的指示信息,所述指示信息用于指示迁移第一内存上的待迁移数据;通知其它处理器核进入静默Stop-machine状态;分配第二内存给所述第一内存上的待迁移数据;将所述第一内存上的待迁移数据存储到所述第二内存上;基于所述第二内存的物理地址,修改所述待迁移数据的地址映射信息,其中,所述修改后的地址映射信息表示在数据迁移完成后,所述待迁移数据的虚拟地址与所述第二内存上所述待迁移数据所占用的物理地址之间的映射关系,其中,所述待迁移数据在迁移前后的虚拟地址保持不变。在一些实施方式中,内存83存储了如下的元素,可执行模块或者数据结构,或者他们的子集,或者他们的扩展集:
操作系统,包含各种系统程序,用于实现各种基础业务以及处理基于硬件的任务。应用模块,包含各种应用程序,用于实现各种应用业务。应用模块中包括但不限于接收单元,通知单元,内存分配单元,映射信息修改单元和虚拟地址分配单元,其中各单元的功能参见前述实施例,在此不赘述。本发明实施例提供的一种计算机系统,通过其中要进行内存数据迁移的处理器核接收内存数据迁移的指示信息,通知本处理器核之外的其它处理器核进入静默Stop-machine状态,即停止其它正在运行的处理器核,且不受中断打断,然后分配第二内存给所述第一内存上的待迁移数据,并将所述待迁移数据存储到所述第二内存,最后基于所述第二内存的物理地址,修改所述待迁移数据的地址映射信息,解决了 Linux操作系统不够完善,由于内核态任务具有最高优先级,不能被打断,如果运行过程中被打断则可能面临死机的危险而不能进行内存数据迁移的问题,最终实现了内核态内存的迁移,并且该方法同样适用于用户态内存的迁移。综上所述,本发明实施例提供一种基于内核虚拟地址空间映射关系修改的内存数据迁移方法,其中,所述方法在内存数据迁移过程中,系统进入静默Stop-machine状态,即当前处理器核在运行,其它处理器核短暂休眠的状态,解决了操作系统不够完善,由于内核态任务具有最高优先级,不能被打断,如果运行过程中被打断则可能面临死机的危险而不能进行内存数据迁移的问题,使得操作系统除了在不依赖硬件的情况下实现用户态的内存数据迁移以外,还能在不依赖硬件的情况下实现内核态的内存数据迁移;同时由于该方法在迁移前后仍可按照原先的虚拟地址进行访问,不会造成内核缺页异常,从而避免了传统技术中采用数据拷贝或更新指针地址的内存数据迁移方法所导致的迁移前后内核产生缺页异常,导致系统崩溃的缺陷;最后由于在内存数据迁移结束后,系统退出静默Stop-machine状态,即启动所述进入短暂休眠状态的处理器核继续运行,保证了系统继续正常运行,不受内存数据迁移的影响。以上所述,仅为本发明的具体实施方式
,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
权利要求
1.一种内存数据迁移方法,其特征在于,所述方法包括: 当前处理器核接收内存数据迁移的指示信息,所述指示信息用于指示迁移第一内存上的待迁移数据; 通知其它处理器核进入静默Stop_machine状态; 分配第二内存给所述第一内存上的待迁移数据; 将所述第一内存上的待迁移数据存储到所述第二内存上; 基于所述第二内存的物理地址,修改所述待迁移数据的地址映射信息,其中,所述修改后的地址映射信息表示在数据迁移完成后,所述待迁移数据的虚拟地址与所述第二内存上所述待迁移数据所占用的物理地址之间的映射关系,其中所述待迁移数据在迁移前后的虚拟地址保持不变。
2.根据权利要求1所述的内存数据迁移方法,其特征在于,所述第一内存存放内核态数据。
3.根据权利要求2所述的内存数据迁移方法,其特征在于,所述第一内存为对等映射区中内核态数据的内存; 所述基于所述第二内存的物理地址,修改所述待迁移数据的地址映射信息,其中,所述修改后的地址映射信息表示在数据迁移完成后,所述待迁移数据的虚拟地址与所述第二内存上所述待迁移数据所占用的物理地址之间的映射关系,其中所述待迁移数据在迁移前后的虚拟地址保持不变,包括: 基于所述第二内存的物理地址,修改所述待迁移数据所在的对等映射区对应的页表中所述待迁移数据的地址映射信息,其中,所述修改后的地址映射信息表示在数据迁移完成后,所述待迁移数据的虚拟地址与所述第二内存上所述待迁移数据所占用的物理地址之间的映射关系,其中所述待迁移数据在迁移前后的虚拟地址保持不变。
4.根据权利要求2所述的内存数据迁移方法,其特征在于,所述第一内存为虚拟内存映射Vmemmap区中内核态数据的内存; 所述基于所述第二内存的物理地址,修改所述待迁移数据的地址映射信息,其中,所述修改后的地址映射信息表示在数据迁移完成后,所述待迁移数据的虚拟地址与所述第二内存上所述待迁移数据所占用的物理地址之间的映射关系,其中所述待迁移数据在迁移前后的虚拟地址保持不变,包括: 基于所述第二内存的物理地址,修改所述待迁移数据所在的Vme_ap区对应的页表中所述待迁移数据的地址映射信息,其中,所述修改后的地址映射信息表示在数据迁移完成后,所述待迁移数据的虚拟地址与所述第二内存上所述待迁移数据所占用的物理地址之间的映射关系,其中所述待迁移数据在迁移前后的虚拟地址保持不变。
5.根据权利要求4所述的内存数据迁移方法,其特征在于,在所述接收内存数据迁移的指示信息前,还包括: 对指定内核态数据,将所述Vme_ap区的虚拟地址分配给存放所述指定内核态数据的第一内存。
6.根据权利要求1-5任一项所述的内存数据迁移方法,其特征在于,在所述基于所述第二内存的物理地址,修改所述待迁移数据的地址映射信息后,还包括: 通知所述其它处理器核退出所述Stop_machine状态。
7.—种内存数据迁移装置,其特征在于,所述内存数据迁移装置包括: 接收单元,用于接收内存数据迁移的指示信息,所述指示信息用于指示迁移第一内存上的待迁移数据; 通知单元,用于通知本处理器核之外的其它处理器核进入静默Stopjnachine状态; 内存分配单元,用于分配第二内存给所述第一内存上的待迁移数据; 存储单元,用于将所述第一内存上的待迁移数据存储到所述第二内存上; 映射信息修改单元,用于基于所述第二内存的物理地址,修改所述待迁移数据的地址映射信息,其中,所述修改后的地址映射信息表示在数据迁移完成后,所述待迁移数据的虚拟地址与所述第二内存上所述待迁移数据所占用的物理地址之间的映射关系,其中所述待迁移数据在迁移前后的虚拟地址不变。
8.根据权利要求7所述的内存数据迁移装置,其特征在于,所述第一内存存放内核态数据。
9.根据权利要求8所述的内存数据迁移装置,其特征在于,所述第一内存为对等映射区中内核态数据的内存; 所述映射信息修改单元具体用于基于所述第二内存的物理地址,修改所述待迁移数据所在的对等映射区对应的页表中所述待迁移数据的地址映射信息,其中,所述修改后的地址映射信息表示在数据迁移完 成后,所述待迁移数据的虚拟地址与所述第二内存上所述待迁移数据所占用的物理地址之间的映射关系,其中所述待迁移数据在迁移前后的虚拟地址保持不变。
10.根据权利要求8所述的内存数据迁移装置,其特征在于,所示第一内存为虚拟内存映射Vmemmap区中内核态数据的内存; 所述映射信息修改单元具体用于基于所述第二内存的物理地址,修改所述待迁移数据所在的Vme_ap区对应的页表中所述待迁移数据的地址映射信息,其中,所述修改后的地址映射信息表示在数据迁移完成后,所述待迁移数据的虚拟地址与所述第二内存上所述待迁移数据所占用的物理地址之间的映射关系,其中所述待迁移数据在迁移前后的虚拟地址保持不变。
11.根据权利要求10所述的内存数据迁移装置,其特征在于,所述内存数据迁移装置还包括: 虚拟地址分配单元,用于在所述接收单元接收内存数据迁移的指示信息前,对指定内核态数据,将所述Vme_ap区的虚拟地址分配给存放所述指定内核态数据的第一内存。
12.根据权利要求7-11任一项所述的内存数据迁移装置,其特征在于, 所述通知单元,还用于在所述映射信息修改单元基于所述第二内存的物理地址,修改所述待迁移数据的地址映射信息后,通知所述其它处理器核退出所述Stopjnachine状态。
13.一种计算机系统,其特征在于,包括: 总线; 与总线相连的多核处理器; 与总线相连的内存; 其中,所述多核处理器包括多个处理器核,当前处理器核通过所述总线调用所述内存中的执行指令,以用于:接收内存数据迁移的指示信息,所述指示信息用于指示迁移第一内存上的待迁移数据;通知其它处理器核进入静默Stopjnachine状态;分配第二内存给所述第一内存上的待迁移数据;将所述第一内存上的待迁移数据存储到所述第二内存上;基于所述第二内存的物理地址,修改所述待迁移数据的地址映射信息,其中,所述修改后的地址映射信息表示在数据迁移完成后,所述待迁移数据的虚拟地址与所述第二内存上所述待迁移数据所占用的物理地址之间的映射关系,其中所述待迁移数据在迁移前后的虚拟地址保持不变 。
全文摘要
本发明实施例提供了一种内存数据迁移方法、装置及系统,能够实现内核态内存数据的迁移,并且适用于用户态内存数据的迁移。所述方法包括当前处理器接收内存数据迁移的指示信息,所述指示信息用于指示迁移第一内存上的待迁移数据;通知其它处理器核进入静默Stop-machine状态;分配第二内存给所述第一内存上的待迁移数据;将所述第一内存上的待迁移数据存储到所述第二内存;基于所述第二内存的物理地址,修改所述待迁移数据的地址映射信息。本发明涉及计算机领域,应用于通过内存数据迁移实现高级功能的场景。
文档编号G06F12/10GK103198028SQ20131008627
公开日2013年7月10日 申请日期2013年3月18日 优先权日2013年3月18日
发明者裘稀石, 吴建国 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1