一种云计算主机节点间物理内存共享方法和系统的制作方法
【技术领域】
[0001 ] 本发明涉及计算机操作系统内核中内存管理,具体是一种云集群环境中主机间物 理内存共享的方法。
【背景技术】
[0002] 云计算、分布式等相关技术在近几年来得到迅猛发展,改变了用户使用计算机的 方式和信息处理的计算模式。云计算技术使得用户无需像从前一样购买计算机硬件资源, 而只需购买硬件的存储、计算能力即可;分布式技术实现了大数据的并行处理,提升了处理 效率,节约了处理时间。
[0003] 这些技术的实现与应用都需要相应的软件硬件环境的支持,由于单个计算机的性 能有限,计算机的组织形式不再是分散式的,而是以集群的形式出现。集群环境通过对计算 机软件硬件资源实行集中化管理、按需分配,提升了服务性能、任务吞吐量和软件硬件资源 的利用率。但集群环境并不是完全理想化的,集群在物理上仍然由是多个物理主机组成,各 计算机拥有自己的操作系统和独立的硬件资源。逻辑上是通过在操作系统层面之上的安装 中间件,中间件之间相互通信实现主机资源的集中使用的。这样的结构带来了很多问题,如 中间件需要针对应用进行特定的开发,增加了集群的管理难度,增加了开发人员的开发难 度等。
[0004] 内存是计算机运行当中使用量非常大的物理资源之一,由于成本、硬件环境等因 素限制,单台主机内存资源有限且容量固定,会造成内存资源不足或浪费。为解决此问题, 设计一种主机间内存共用的方式,实现内存的高效利用成为一项热门研究内容。公开号 CN102609305A,公开日2012 - 07 - 25,名称为"一种服务器集群中内存共享方法"的中国专 利文献,提出了一种集群中服务器间内存共享方法,但该方案中需要应用程序参与内存的 共享过程,没有实现对应用程序的透明处理。公开号CN1972215A,公开日2007 - 05 - 30, 名称为"一种远程内存共享系统及其实现方法"的中国专利文献,提出的内存共享系统 由多个计算结点、一个管理器和一个内存服务器组成,当计算结点不能满足应用的内 存需求时结点才会向管理器申请内存从其他结点分配内存块;内存块以应用为单位分 配,并通过多个列表进行管理,造成了寻址困难,运行开销大。文献(Niswar Muh, Sabri A. Auliaj ffarni Elly, Musa Muh Nur. Memory sharing management on virtual private server [C]. 2013International Conference on ICT for Smart Society (ICISS), 2013.) 公开为提升虚拟服务器性能,提出一种内存资源共享方法,虚拟服务器可以将自己的内存 借给其他内存资源趋于用尽的虚拟服务器。提出的共享内存方法在一定程度上均提升了虚 拟机或主机的性能,因此设计一种主机间动态借用内存装置实现内存在主机之间的借用有 助于提升主机性能。
[0005] 现有应用技术已经在某种程度上实现了内存共享。文献(MemoryCached [DB/0L]. http://memcached. org/about. 2009 - 4 - 20/2015 - 4 - 25.)中提到的 MemCached 实现了 一种分布式内存缓存系统,该系统中存在一个服务器结点和多个客户端结点,服务器结点 将客户端节点的空闲缓存在逻辑上集中起来,并统一向外提供服务。该系统通过在系统中 安装中间件的方式实现服务器节点和客户端节点的功能,并提供了用于操作的API接口。 这种"一个服务节点+多个客户节点"的模式被广泛应用在资源共享的解决方案当中,如 Hadoop、HBase 等。
[0006] 随着计算机软硬件技术的成熟,通过网络共享物理设备已经有一些成熟的技术。 常见的商业版操作系统(如Windows、Ubuntu等)当中均包含打印机共享功能,该功能使得 多台计算机可以使用同一台打印机,而不必为每一台计算机都配备打印机,节约了硬件成 本。该技术使用最为广泛,常见于办公环境或家庭环境当中。此外,KVM虚拟化技术实现的 VMffare和VirtualBox,Xen虚拟化技术实现的XenServer等虚拟化平台已经日趋成熟并得 到了广泛的应用,在这些平台上,用户可以根据自己需要调整虚拟机的性能,如内存大小, 硬盘大小等。虚拟机中的设备全部都是通过虚拟化技术虚拟出来的,用户使用过程中不会 感觉到与使用实际的硬件设备有任何差别。这些实例及平台的成功实现表明,将内存虚拟 化并通过网络共享是存在理论基础和实现的可行性的。
[0007] 现有技术内存共享方法主要针对的是特定体系结构的主机而设计的。需要为每个 节点设置信息收集处理模块、内存申请模块、远端链接管理模块和通信模块等,当某一节点 内存不足时,收集节点信息,并向其他空闲节点发送内存申请,以此来平衡空闲内存在各个 内存节点的分布,提升主机性能。该方法针对的是主机内存节点之间内存共享的问题,而不 是针对云计算集群主机间内存共享的。
[0008] 节点分为多种角色,节点间不是完全对等关系。在节点有实现内存共享和管理内 存块的内存池驱动模块;所有计算结点的内存池驱动模块为远程内存共享系统提供的物理 内存和内存服务器所提供的内存组成一个内存池,内存池中的内存供各计算节点共享。由 于存在一个管理节点和多个内存服务器,内存的共享过程需要管理节点进行处理;当管理 节点失效时,整个系统就无法运行。如果将主机节点之间的关系看作是完全对等关系,则当 前存在的方法在节点之间内存共享上是无法实现的。内存共享不透明。内存服务器的虚拟 内存管理器为应用程序分配虚拟内存后,根据虚拟内存的地址构造重定向文件读写代码; 执行读写代码前,在代码缓冲区指令前增加间接跳转指令,使缓冲区指令被执行时,可以从 虚拟内存获取数据。该方法需要修改应用程序中的指令调用方式才可以使用共享的内存, 某种程度上开发人员需要重新考虑软件设计与实现的问题。根据物理机上的各个虚拟机所 属的用户,将所述物理机上的虚拟机划分为至少两个用户组,每个用户组内的虚拟机共享 一个进程,不同的用户组对应不同的进程;通过进程扫描对应的用户组内的虚拟机所占用 的存储重复数据的内存页面;对存储重复数据的内存页面进行删除冗余数据处理。该方法 在一定程度上降低了物理内存的重复率,但没有提供单台物理主机内存不足时解决方法。
【发明内容】
[0009] 本发明针对现有技术存在的上述问题,提出一种云集群主机节点间物理内存共享 方法,该方法采用一种临时借用策略。设置两种角色的物理主机:服务主机和客户主机。客 户主机可申请向服务主机临时借用内存资源,服务主机可将自身空闲内存资源临时借用给 客户主机,两者均处于集群环境中,通过高速网络相互连接。某一台物理主机既可以是服务 主机也可以是客户主机,两种角色是通过在操作系统中安装服务模块或客户模块实现的。 模块在内核模式下实现,在客户主机内存不足时,客户模块自动向服务主机借用内存资源, 而不需要应用程序的参与,保证了对现有应用程序的兼容性。客户模块将借用的内存映射 到虚拟内存对象当中,操作虚拟内存对象的方式与操作物理内存对象的方式相同,模块屏 蔽了实现细节的不同,实现了向上的透明性。
[0010] 本发明提供一种主机间物理内存借用的方法,内存借出方主机和内存借入方主机 的操作系统分别安装相应的内核模块,内核模块工作于操作系统内核中,用户空间程序无 法对其直接操作,需使用用户空间管理程序,通过模块提供的用户空间接口实现属性配置、 信息获取等。内存借出方主机简称服务主机,内存借入方主机简称客户主机。具体步骤包 括:服务主机内核模块响应客户主机的借用请求,并注册一个内存池对象,维护一个内存池 信息表MemPoolTable ;客户主机内核模块创建一个虚拟内存对象,维护一个记录了远端内 存在虚拟内存对象中映射情况列表MemMapTable,以及一个服务主机列表ServerList ;当 客户主机本地内存不足,需要扩展系统内存时,系统自动开启远程内存扩展机制;客户主机 从ServerList中选择一个服务主机发送服务请求,如满足借用条件,服务主机从本地内存 池信息表MemPoolTable中选择一块大小为MemSize的物理内存,将这块物理内存的基本信 息返回至客户主机;客户主机将借来的内存资源映射到虚拟内存对象中,将基本信息记录 在映射情况列表MemMapTable中,与服务主机建立必要的数据通信连接与内存映射,并将 本机虚拟内存对象容量CVMT和虚拟内存对象空闲量CVMF的值分别增加 MemSize,完成远端 内存的借用和映射。
[0011] 本发明的其中一个实施例进一步包括,客户主机内核模块检测系统当前状态,当 满足条f
λ为当前客户主机内存使用率过高,需要扩展系统内存,其 中,CPMT为客户主机本地物理内存容量,CPMF为本地物理内存空闲量,CVMT为虚拟内存对 象容量,CVMF为虚拟内存对象空闲量,PL为系统空闲内存百分比下限值。
[0012] 本发明的其中一个实施例进一步包括,客户主机进程模块申请内存分配时,如 果本地物理内存对象有空闲内存时,直接从本地物理内存分配内存资源给进程,如果本 地物理内存不足,客户主机操作系统从虚拟内存对象中分配内存资源给进程,并映射到 进程的地址空间中。当客户主机内核模块连续三次检测到操作系统当前状态满足条件:
PHV时,开启远程内存归还机制:选择虚拟内存对象中最后 一块远端内存作为需要归还的内存块,删除该内存块在虚拟内存对象当中的映射,向该内 存块所对应的服务主机发送归还通知,从MemMapTable删除对应的表项,并将本机虚拟内 存对象容量CVMT和虚拟内存对象空闲量CVMF的值分别减去该块的大小。其中,PH为客户 主机系统空闲内存百分比上限值,PHV为虚拟内存对象空闲内存百分比。
[0013] 本发明进一步提供一种主机间物理内存借用的装置,包括:客户主机和服务主机, 客户主机内核模块用于客户主机操作系统在本地内存不足时向服务主机申请借用内存、建 立网络通信连接、维护远端内存在本地虚拟内存对象上的映射,当前空闲内存率过高时,将 映射到虚拟内存对象中的远端内存归还给相应的服务主机,向用户层提供信息查询、配置 修改的接口