专利名称:基于分布式内存虚拟化的numa结构的实现方法
技术领域:
本发明利用最新的硬件虚拟化技术,采用国际上惯用的分布式共享存储算法对内存资源 进行整合.它涉及计算机虚拟化技术中的内存虚拟化以及分布式系统中的分布式共享存储, 尤其涉及一种基于分布式内存虚拟化的非均匀内存访问(NUMA)结构的实现方法。属于计算 机技术领域。
背景技术:
早在上个世纪60年代末70年代初IBM公司就在大型机上实现了商用的虚拟机(Virtual Machine, VM)。虚拟机可以看作通过软件模拟或者硬件辅助的具有完整硬件系统功能的、运 行在一个完全隔离环境中的完整计算机系统。经典的虚拟机实现借助虚拟机监控器(Virtual Machine Monitor, XEN)来完成。虚拟机监控器用于控制虚拟机行为并通过陷入-模拟的方 式完成对必要事件的处理或模拟。下面介绍几种虚拟化方式
1.软件虚拟化
全虚拟化
完全虚拟化的典型代表产品是VM370和VMWare。
VMM在客户操作系统和硬件之间用于工作协调。 一些受保护的指令必须由VMM来捕获和 处理。因为操作系统是通过来分享底层硬件。对底层硬件进行了完全虚拟化的实现,而并非 是半虛拟化的方法提供给Guest OS—个修改后的接口。
完全虚拟化技术最大的好处就是可以无需修改操作系统,直接移植到虚拟环境中,支持 多个Guest 0S。但是完全虚拟化的缺点就是虚拟机的Guest OS的系统性能会受到影响,而 且往往比原有的系统性能下降不少。尤其是在IA32等常见体系结构上。类似VMWare的软件 往往性能下降特别严重。
完全虚拟化虽然能够更容易地支持商业版本的操作系统,但是却大大降低了性能。其他 常见的完全虚拟化软件包括微软推出的Microsoft Virtual Server。准虚拟化
与二进制翻译动态修改客户操作系统不同,准虚拟化方式采用静态改写客户操作系统源 代码的方式显式与虚拟机监控器(在这种方式下也被称为超级监控器hypervisor)协作。 这种方式的特点是
通过客户操作系统与超级监控器(hypervisOT)之间的主动协作提高性能以及效率,更 改客户操作系统源代码将不可虚拟化指令替换为直接与超级监控器通信的超级调用 (hypercall)。监控器还提供了内核其他关键操作的接口如内存管理,中断处理等。 准虚拟化与全虚拟化存在显著的区别
全虚拟化的虚拟机上运行未经修改的客户操作系统,操作系统对不能感知自己运行于虚 拟机制上,敏感的操作系统调用会引发陷入。
准虚拟化的操作系统可以感知自己运行在虚拟机制上,并通过超级调用与超级监控器通信。
准虚拟化的代表是由剑桥大学研发的Xen。 Xen运行在最高特权级做为超级监控器 (Hypervisor)监控虚拟机行为,虚拟机中运行经过修改过的操作系统,这些操作系统通过 超级调用的方式请求Xen完成关键的特权操作,包括内存管理,1/0操作等。另外Xen最新 版本还支持硬件辅助的虚拟化技术实现全虚拟化,被称为硬件虚拟机(Hardware Virtual Machine)。准虚拟化的特点是其高性能,在大多数情况下准虚拟化可以达到原始性能的 90%_95%。
相对于Xen采用的手工更改客户操作系统源代码的方式,之后又有人提出了一种半自动 化的更改客户操作系统的方法,称为预虚拟化(Pre-virtulization)。这种方法的特点是在 编译器完成编译之后,在汇编器开始汇编之前插入一个脚本。该脚本以自动化的方式替换不 可虚拟化的指令。这种方式已经在L4, vNUMA中实现,并可以极大地减少准虚拟化带来的 操作系统移植的工作量。
由于支持准虚拟化的虚拟机监控器种类越来越多,所以急需一种hypercall标准来规范 虚拟机监控器超级调用接口以及避免重复进行操作系统移植。在这方面,Lirmx走在了前列 目前Linux准虚拟化标准paravirt_ops已经被合并到Linux源代码树中。这个标准规范了 Linux支持的超级调用接口。基于该接口的示范虚拟机Lguest ,已经被合并到Linux源代 码树中。
2.硬件虚拟化
因为软件虚拟化技术的种种难以克服的缺点,CPU厂商推出了基于CPU的硬件虚拟化技 术。支持虚拟技术的CPU带有特别优化过的指令集来控制虚拟过程,通过这些指令集,XEN 会很容易提高性能,相比软件的虚拟实现方式会很大程度上提高性能。硬件虚拟化技术可提 供基于芯片的功能,借助兼容XEN软件能够改进纯软件解决方案。由于虚拟化硬件可提供全 新的架构,支持操作系统直接在上面运行,从而无需进行二进制转换,减少了相关的性能开 销,极大简化了XEN设计,进而使XEN能够按通用标准进行编写,性能更加强大。另外,在 纯软件XEN中,目前缺少对64位客户操作系统的支持,而随着64位处理器的不断普及,这 一严重缺点也日益突出。而CPU的虚拟化技术除支持广泛的传统操作系统之外,还支持64 位客户操作系统。
虚拟化技术是一套解决方案。完整的情况需要CPU、主板芯片组、BIOS和软件的支持, 例如XEN软件或者某些操作系统本身。即使只是CPU支持虚拟化技术,在配合XEN的软件情况下,也会比完全不支持虚拟化技术的系统有更好的性能。
两大CPU厂商Intel和AMD都已经制定了硬件虚拟化策略,并发布了一系列支持虚拟化 的产品。Intel已经发布了具有Intel VT虚拟化技术的一系列处理器产品,包括桌面平台 的Pentium 4 6X2系列、Pentium D 9X0系列和Pentium EE 9XX系列,还有Core Duo系列 和Core Solo系列中的部分产品,以及服务器/工作站平台上的Xeon LV系列、Xeon 5000 系列、Xeon 5100系列、Xeon MP 7000系列以及Itanium 2 9000系列同时绝大多数的Intel 下一代主流处理器,包括Merom核心移动处理器,Conroe核心桌面处理器,Woodcrest核心 服务器处理器,以及基于Montecito核心的Itanium 2高端服务器处理器都将支持Intel VT 虚拟化技术。
而AMD方面也己经发布了支持AMD Virtual Technology (AMD VT)虚拟化技术的一系 列处理器产品,包括Socket SI接口的Turion 64 X2系列以及Socket AM2接口的Athlon 64 X2系列和Athlon 64FX系列,以及最新的Socket F接口的0pteron等等。
发明内容
1目的:
本发明的目的是提供一种基于分布式内存虚拟化的NUMA结构的实现方法,它主要采用 了当前主流处理器的硬件辅助虚拟化技术,结合分布式共享存储算法对多机资源进行整合, 实现硬件辅助策略下的NUMA结构的单一物理地址空间,对多机内存资源进行统一管理和使 用。
2技术方案:
2. 1设计概述
本发明专利基于多机集群系统,集群中各节点的内存以分布的方式位于各个节点之间, 集群中的计算机需要通过网络连接,通过网络传递消息。本发明专利的目标是要基于机群系 统,利用虚拟化和分布式共享技术提供具有共享单一地址空间特性的虚拟机,但整个系统的 内存容量是各个节点内存容量加成。多个节点的多个处理器之间共享内存,并通过共享内存 完成多机资源的整合。
本发明专利通过借助部署在机群每个节点上的Xen,在机群系统结构上提供具有共享物 理内存特性的客户系统。通过在Xen中实现分布式共享存储为客户系统提供共享的物理地址 空间,并借助硬件辅助的内存虚拟化技术来实现,使现有操作系统无需修改即可运行,从而 实现完全虚拟化。以虚拟机中的客户操作系统的观点来看,其运行于正常的单机节点之上。
在Xen中实现内存虚拟化是为客户操作系统提供单一客户物理地址空间,并且对内存寻 址过程进行虚拟化,同时结合分布式共享存储为客户操作系统呈现与单节点条件下无异的的 环境。
分布式共享存储实现缓存一致性,使该客户操作系统看不到具体的共享内存实现过程, 从而保证了客户操作系统以及应用程序运行的正确性。整个系统按功能可以分为4个模块-
1) EPT模块用于为虚拟机提供一个共享客户物理地址空间。
2) NIMA模块用于实现基于分布式共享存储算法的NUMA结构共享内存空间。
3) ARL模块用为其它虚拟化模块提供访问共享内存的方法。
4) 其它虚拟化模块。
与本发明相关的模块包括 EPT模块
Xen利用EPT为虚拟机提供虚拟化的内存空间,地址转换以及相应寻址。EPT中记录的 是客户物理地址到机器物理地址的映射。通过查询客户页表可得到客户线性地址到客户物理 地址的映射,再通过査询EPT可得到客户物理地址到机器物理地址的映射,最终得到线性地 址到机器物理地址的映射。
EPT表保存客户物理地址到机器地址的映射,映射的内容包括-
本地客户物理页面和对应的机器页面号。
*映射权限读写权限以及是否有效。
*映射类型内存映射还是内存映射I/0映射。
* NUMA元数据用于实现NUMA的相关数据结构,NUMA算法依据这些结构做出决策。 EPT模块维护客户物理地址到机器物理地址的映射来实现内存虚拟化,使客户系统不用 考虑虚拟地址的转换,完成对客户系统的透明操作。物理硬件使用Xen维护的EPT表进行寻 址。EPT表中的映射内容由Xen启动时硬件完成,保存由客户物理地址到机器地址的映射。 EPT的生成和同步由Xen负责完成,客户系统的缺页和异常都由自己完成,只有当Xen捕获 EPT产生的缺页异常时,EPT模块才会进行同步操作。当EPT缺页的映射为远程映射时,就 会触发NU做模块进行远程缺页异常操作。
EPT是由系统启动时自动生成并由硬件来维护的,EPT的结构类似于普通的内存页表, 具有分级结构。在虚拟机运行时,硬件使用EPT进行最终寻址。当EPT中存在有效映射项时, 此次寻址请求可以直接完成;当EPT中的映射项或者寻址请求与映射权限冲突时产生的缺页 异常会被Xen所捕获,触发内存虚拟化策略以及NUMA算法。
NUMA模块
NUMA模块主要利用现有的分布式共享存储算法,实现NUMA结构内存共享,对内存资源 进行管理。对于每个共享页面都有唯一的home节点,home节点分布在所有节点中,每个节 点至多只能是一块共享页面的home。 EPT映射的是本地客户物理地址与对应的机器地址,因 此当客户指令尝试访问本地共享页面时和正常访存过程相同,当访问远程共享页面时就会产 生缺页异常,并触发NUMA算法从此共享页面的home节点取得并缓存在本地。当NUMA算法 迁移对应的页面至本地后,会更新相应EPT表映射。待EPT完成更新后,再次寻址此页面就 不会引发缺页。缓存的页面的地址空间在所有的处理器中都是一致的,因此远程访问时就不 需要就行地址转换。由于整个页面迁移过程对客户操作系统透明,使客户操作系统认为自己 可以对共享的地址空间进行寻址。
客户操作系统通过EPT并借助NUMA模块完成了对整个共享地址空间的寻址。而其它的 虚拟化模块需要直接的请求NUMA:
1)处理器虚拟化模块在模拟指令执行时的取指令与取操作数都必须请求NUMA模块,因为对应的操作数与指令所在页面可能位于远程。 2) 1/0虚拟化模块:在模拟匿A的时候,对应的客户操作系统主存访问也必须通过NUMA。
API模块
为了实现单一地址空间,必须为其它的虚拟化模块如1/0虚拟化以及指令集虚拟化模块 提供访问客户操作系统主存的方式。与EPT不同,接口模块就为这些模块提供了调用NUMA 模块的接口,其它的虚拟化模块需要主动的调用NUMA算法,确保访问到正确的客户主存数 据。
2. 3工作流程
初始化阶段
系统在初始化阶段分为两类节点系统中选取一个节点作为主节点,其余节点作为从节点。
EPT初始化EPT的初始化包含初始化EPT映射以及初始化NUMA元数据。系统初始化时, 在各自节点分配内存供客户操作系统使用,并初始化对应的EPT映射。对于各个节点,以此 节点为home节点的共享页面被设定为读写,而其他页面映射权限被设定为缺页。图MA元数 据按照对应NUMA算法的要求进行初始化工作。
客户操作系统的启动遵循SMP多处理器启动序列首先客户操作系统会在主节点的启动 处理器(虚拟处理器)(Bootstrapping Processor, BSP)上启动,此时对应的虚拟处理器 位于实模式,其直接使用EPT作为页表。当其完成页表初始化并开启分页后,客户操作系统 建立自己的线性地址与客户物理地址的映射,此时虚拟处理器对应的物理处理器使用EPT进 行实际的硬件寻址。当寻址的页面的home节点是本节点时,不会引发缺页,直接进行访存; 当访问的页面的h咖e节点不是本节点时,就会引发缺页,通过NUMA米快将页面请求发送至 请求页面的home节点,然后由home节点来处理缺页请求。当BSP启动辅助处理器(Auxiliary Processor, AP)时,AP会根据BSP发来的消息从指定的地址启动。位于从节点的AP启动 时由于指定地址对应的映射在EPT表中可能不存在,从而引发缺页异常,同样通过NUMA模 块进行页面迁移。之后AP所需要的数据和指令都通过NUMA从所需页面的h咖e节点迁移到 被启动节点,这就确保了 AP的启动和运行。当AP开启分页后,与BSP—样,客户操作系统 会建立自己的线性地址与客户物理地址的映射。当多处理器启动完毕后,整个系统进入正常 工作模式。
系统正常工作阶段
系统中客户操作系统的寻址首先会查询客户操作系统的页表GPT,由客户操作系统的线 性地址查找到客户操作系统的物理地址,进而査找EPT,客户操作系统的物理地址再通过EPT 表査找对应的机器地址,若查找成果就称为命中,此时继续执行访存等指令,若没有对应的 机器页面就会产生缺页异常,此时EPT模块就要与NUMA模块进行配合,进行远程页面的迁 移,将远程的页面迁移到本地,进而执行正常访存操作。
与其它虚拟化模块的协作
NUMA模块同时负责为其它虚拟化模块提供一个访问主存的接口 ,确保其它虚拟化模块可 以访问到正确的主存的数据。当其它虚拟化模块访问的页面位于远程时,NUMA模块负责将 其迁移到本地,并供其它的内存虚拟化模块访问。
综上所述,本发明是一种基于分布式内存虚拟化的NUMA结构的实现方法,此方法具体实现步骤如下 设虚拟机主存容量为M, 步骤一、准备阶段
1. 各结点Xen分配EPT表所需空间,并将EPT对应所有内容清零;
2. 各节点Xen分别分配M大小的内存供虚拟机使用,并按照1: 1映射的方式初始化EPT 表中客户物理页面到机器页面的映射关系;
3. 所有节点的Xen标记其EPT表中以本节点为home节点的共享页面映射有效,标记其它
所有共享页面映射无效。
4. 各个节点将对应虚拟处理器的页表基址寄存器指向EPT表基址;
5. 当客户操作系统开启分页时,Xen将对应虚拟处理使用的页表机制更换为对应的客户操 作系统页表GPT基址。
步骤二、正常工作阶段
在客户操作系统启动并正常运行之后,客户操作系统及应用程序在全虚拟化的环境下,与正 常的操作系统的寻址过程一致,此时的客户操作系统寻址首先由客户线性地址,通过查找客 户页表找到相应的客户物理地址,之后由Xen继续寻址过程,Xen会查询EPT表找到之前客 户物理地址对应的机器地址
a) 若对应EPT映射存在且是以本节点为home节点的共享页面则有效,然后转向步骤三;
b) 若对应EPT映射存在但不是以本节点为home节点的共享页面且为读操作则有效,然
后转向步骤三;
c) 若对应EPT映射存在但不是以本节点为home节点的共享页面且为写操作,或者对应 EPT映射不存在则无效,然后转向步骤四;
步骤三、NUMA处理本地请求过程
1. 获得请求客户物理页面与所需权限;
2. 若为读操作则直接从home中或是本地cache中获得相应EPT表对应的机器页面;
3. 若为写操作则由home节点根据home中NUMA元数据保存的该页面的使用节点副本,向 其他节点发送页面无效通知,之后对页面进行写操作。
4. 完成本地处理过程。
步骤四、NUMA处理远程请求的过程
1. 获取请求页面号以及权限;
2. 若对应EPT映射不存在且为读操作,则需向home节点发送请求,由home节点将页面和 权限发送到请求节点,请求节点缓存在本地cache后,继续读操作。
3. 若对应EPT映射存在但不是以本节点为home节点的共享页面且为写操作,或者对应EPT 映射不存在且为写操作,则需向home节点发送请求,由home节点根据home中NUMA元 数据保存的该页面的使用节点副本,向其他节点发送页面无效通知,之后将请求的页面 副本和权限发送给请求节点,请求节点将页面缓存在cache中后,继续访存操作。
4. 完成远程处理过程。
(3)优点及效果
通过结合内存虚拟化技术与分布式共享存储技术,本发明为分布式系统提供了紧耦合的 共享内存视图,极大的提高了分布式系统中的可管理性以及可编程性。通过结合其它的虚拟 化策略,同时可以使商业化的操作系统以及应用软件跨节点的运行于分布式的集群系统中, 降低了软件移植带来的复杂度。本发明在现有的成熟技术基础上进行创新,实施不难,具有 良好的使用和发展前景。
图l系统整体结构示意图
图2 EPT表寻址示意图
图3 NUMA内存组织示意图
图4 NUMA与EPT写作示意图
具体实施例方式
见图l、图2、图3、图4所示, 一种基于分布式内存虚拟化的NUMA结构的实现方法,该方 法具体实施步骤如下 设虚拟机主存容量为M, 步骤一、准备阶段
1. 各结点Xen分配EPT表所需空间,并将EPT对应所有内容清零;
2. 各节点Xen分别分配M大小的内存供虚拟机使用,并按照1: 1映射的方式初始化EPT 表中客户物理页面到机器页面的映射关系;
3. 所有节点的Xen标记其EPT表中以本节点为home节点的共享页面映射有效,标记其它 所有共享页面映射无效。
4. 各个节点将对应虚拟处理器的页表基址寄存器指向EPT表基址;
5. 当客户操作系统开启分页时,Xen将对应虚拟处理使用的页表机制更换为对应的客户操 作系统页表GPT基址。
步骤二、正常工作阶段-
在客户操作系统启动并正常运行之后,客户操作系统及应用程序在全虚拟化的环境下,与正 常的操作系统的寻址过程一致,此时的客户操作系统寻址首先由客户线性地址,通过查找客 户页表找到相应的客户物理地址,之后由Xen继续寻址过程,Xen会査询EPT表找到之前客 户物理地址对应的机器地址
a) 若对应EPT映射存在且是以本节点为home节点的共享页面则有效,然后转向步骤三;
b) 若对应EPT映射存在但不是以本节点为home节点的共享页面且为读操作则有效,然 后转向步骤三;
c) 若对应EPT映射存在但不是以本节点为home节点的共享页面且为写操作,或者对应 EPT映射不存在则无效,然后转向步骤四;
步骤三、NUMA处理本地请求过程
1. 获得请求客户物理页面与所需权限;
2. 若为读操作则直接从home中或是本地cache中获得相应EPT表对应的机器页面;
3. 若为写操作则由home节点根据home中NUMA元数据保存的该页面的使用节点副本,向 其他节点发送页面无效通知,之后对页面进行写操作。
4. 完成本地处理过程。
步骤四、NUMA处理远程请求的过程
1. 获取请求页面号以及权限;
2. 若对应EPT映射不存在且为读操作,则需向home节点发送请求,由home节点将页面和权限发送到请求节点,请求节点缓存在本地cache后,继续读操作。
3. 若对应EPT映射存在但不是以本节点为home节点的共享页面且为写操作,或者对应EPT 映射不存在且为写操作,则需向home节点发送请求,由home节点根据home中NUMA元 数据保存的该页面的使用节点副本,向其他节点发送页面无效通知,之后将请求的页面 副本和权限发送给请求节点,请求节点将页面缓存在cache中后,继续访存操作。
4. 完成远程处理过程。
权利要求
1、一种基于分布式内存虚拟化的NUMA结构的实现方法,该实现方法步骤如下设虚拟机主存容量为M,步骤一、准备阶段(1)各结点Xen分配EPT表所需空间,并将EPT对应所有内容清零;(2)各节点Xen分别分配M大小的内存供虚拟机使用,并按照1∶1映射的方式初始化EPT表中客户物理页面到机器页面的映射关系;(3)所有节点的Xen标记其EPT表中以本节点为home节点的共享页面映射有效,标记其它所有共享页面映射无效;(4)各个节点将对应虚拟处理器的页表基址寄存器指向EPT表基址;(5)当客户操作系统开启分页时,Xen将对应虚拟处理使用的页表机制更换为对应的客户操作系统页表GPT基址;步骤二、正常工作阶段在客户操作系统启动并正常运行之后,客户操作系统及应用程序在全虚拟化的环境下,与正常的操作系统的寻址过程一致,此时的客户操作系统寻址首先由客户线性地址,通过查找客户页表找到相应的客户物理地址,之后由Xen继续寻址过程,Xen会查询EPT表找到之前客户物理地址对应的机器地址a)若对应EPT映射存在且是以本节点为home节点的共享页面则有效,然后转向步骤三;b)若对应EPT映射存在但不是以本节点为home节点的共享页面且为读操作则有效,然后转向步骤三;c)若对应EPT映射存在但不是以本节点为home节点的共享页面且为写操作,或者对应EPT映射不存在则无效,然后转向步骤四;步骤三、NUMA处理本地请求过程(1)获得请求客户物理页面与所需权限;(2)若为读操作则直接从home中或是本地cache中获得相应EPT表对应的机器页面;(3)若为写操作则由home节点根据home中NUMA元数据保存的该页面的使用节点副本,向其他节点发送页面无效通知,之后对页面进行写操作;(4)完成本地处理过程;步骤四、NUMA处理远程请求的过程(1)获取请求页面号以及权限;(2)若对应EPT映射不存在且为读操作,则需向home节点发送请求,由home节点将页面和权限发送到请求节点,请求节点缓存在本地cache后,继续读操作;(3)若对应EPT映射存在但不是以本节点为home节点的共享页面且为写操作,或者对应EPT映射不存在且为写操作,则需向home节点发送请求,由home节点根据home中NUMA元数据保存的该页面的使用节点副本,向其他节点发送页面无效通知,之后将请求的页面副本和权限发送给请求节点,请求节点将页面缓存在cache中后,继续访存操作;(4)完成远程处理过程。
全文摘要
本发明是一种基于分布式硬件辅助内存虚拟化的NUMA结构的实现方法,该方法有四个步骤。步骤一、准备阶段步骤二、正常工作阶段步骤三、NUMA处理本地请求过程步骤四、NUMA处理远程请求的过程本发明采用最新的硬件辅助内存虚拟化技术,以及分布式共享存储算法,对多机内存资源进行虚拟化和整合,为上层客户操作系统提供一个NUMA结构的共享的单一物理地址空间,实现客户操作系统对多机内存资源的透明化统一管理,降低了应用程序编程的复杂性,提高了系统资源的利用性。本发明具有良好的使用和发展前景。
文档编号G06F12/08GK101477496SQ20081024666
公开日2009年7月8日 申请日期2008年12月29日 优先权日2008年12月29日
发明者姜兆龙, 彭近兵, 珊 曾, 祝明发, 肖利民, 博 马 申请人:北京航空航天大学