CN105094997B - 一种云计算主机节点间物理内存共享方法和系统 - Google Patents
一种云计算主机节点间物理内存共享方法和系统 Download PDFInfo
- Publication number
- CN105094997B CN105094997B CN201510579599.3A CN201510579599A CN105094997B CN 105094997 B CN105094997 B CN 105094997B CN 201510579599 A CN201510579599 A CN 201510579599A CN 105094997 B CN105094997 B CN 105094997B
- Authority
- CN
- China
- Prior art keywords
- memory
- host
- user
- service
- virtual
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种云环境中主机节点间物理内存共享的方法和系统。云环境集群中的某一台主机的空闲物理内存量不足时,通过操作系统中的内存借用模块向集群中的其他主机申请借用其物理内存。操作系统中含有内存借用组件的主机在接收到申请后,根据自身情况决定是否将自身空闲内存借出,如果服务主机同意借出部分物理内存资源,则建立客户主机和服务主机之间的内存映射;进程释放内存时客户主机将借用的物理内存归还给服务主机。整个过程中客户主机进程不会感觉到与使用本地内存有任何差异,实现细节全部由操作系统屏蔽。通过主机节点角色的转换,可实现主机节点间互相借用物理内存,达到主机节点间物理内存共享的目的。
Description
技术领域
本发明涉及计算机操作系统内核中内存管理,具体是一种云集群环境中主机间物理内存共享的方法。
背景技术
云计算、分布式等相关技术在近几年来得到迅猛发展,改变了用户使用计算机的方式和信息处理的计算模式。云计算技术使得用户无需像从前一样购买计算机硬件资源,而只需购买硬件的存储、计算能力即可;分布式技术实现了大数据的并行处理,提升了处理效率,节约了处理时间。
这些技术的实现与应用都需要相应的软件硬件环境的支持,由于单个计算机的性能有限,计算机的组织形式不再是分散式的,而是以集群的形式出现。集群环境通过对计算机软件硬件资源实行集中化管理、按需分配,提升了服务性能、任务吞吐量和软件硬件资源的利用率。但集群环境并不是完全理想化的,集群在物理上仍然由是多个物理主机组成,各计算机拥有自己的操作系统和独立的硬件资源。逻辑上是通过在操作系统层面之上的安装中间件,中间件之间相互通信实现主机资源的集中使用的。这样的结构带来了很多问题,如中间件需要针对应用进行特定的开发,增加了集群的管理难度,增加了开发人员的开发难度等。
内存是计算机运行当中使用量非常大的物理资源之一,由于成本、硬件环境等因素限制,单台主机内存资源有限且容量固定,会造成内存资源不足或浪费。为解决此问题,设计一种主机间内存共用的方式,实现内存的高效利用成为一项热门研究内容。公开号CN102609305A,公开日2012‐07‐25,名称为“一种服务器集群中内存共享方法”的中国专利文献,提出了一种集群中服务器间内存共享方法,但该方案中需要应用程序参与内存的共享过程,没有实现对应用程序的透明处理。公开号CN1972215A,公开日2007‐05‐30,名称为“一种远程内存共享系统及其实现方法”的中国专利文献,提出的内存共享系统由多个计算结点、一个管理器和一个内存服务器组成,当计算结点不能满足应用的内存需求时结点才会向管理器申请内存从其他结点分配内存块;内存块以应用为单位分配,并通过多个列表进行管理,造成了寻址困难,运行开销大。文献(Niswar Muh,Sabri A.Aulia,Warni Elly,Musa Muh Nur.Memory sharing management on virtual private server[C].2013International Conference on ICT for Smart Society(ICISS),2013.)公开为提升虚拟服务器性能,提出一种内存资源共享方法,虚拟服务器可以将自己的内存借给其他内存资源趋于用尽的虚拟服务器。提出的共享内存方法在一定程度上均提升了虚拟机或主机的性能,因此设计一种主机间动态借用内存装置实现内存在主机之间的借用有助于提升主机性能。
现有应用技术已经在某种程度上实现了内存共享。文献(MemoryCached[DB/OL].http://memcached.org/about.2009‐4‐20/2015‐4‐25.)中提到的MemCached实现了一种分布式内存缓存系统,该系统中存在一个服务器结点和多个客户端结点,服务器结点将客户端节点的空闲缓存在逻辑上集中起来,并统一向外提供服务。该系统通过在系统中安装中间件的方式实现服务器节点和客户端节点的功能,并提供了用于操作的API接口。这种“一个服务节点+多个客户节点”的模式被广泛应用在资源共享的解决方案当中,如Hadoop、HBase等。
随着计算机软硬件技术的成熟,通过网络共享物理设备已经有一些成熟的技术。常见的商业版操作系统(如Windows、Ubuntu等)当中均包含打印机共享功能,该功能使得多台计算机可以使用同一台打印机,而不必为每一台计算机都配备打印机,节约了硬件成本。该技术使用最为广泛,常见于办公环境或家庭环境当中。此外,KVM虚拟化技术实现的VMWare和VirtualBox,Xen虚拟化技术实现的XenServer等虚拟化平台已经日趋成熟并得到了广泛的应用,在这些平台上,用户可以根据自己需要调整虚拟机的性能,如内存大小,硬盘大小等。虚拟机中的设备全部都是通过虚拟化技术虚拟出来的,用户使用过程中不会感觉到与使用实际的硬件设备有任何差别。这些实例及平台的成功实现表明,将内存虚拟化并通过网络共享是存在理论基础和实现的可行性的。
现有技术内存共享方法主要针对的是特定体系结构的主机而设计的。需要为每个节点设置信息收集处理模块、内存申请模块、远端链接管理模块和通信模块等,当某一节点内存不足时,收集节点信息,并向其他空闲节点发送内存申请,以此来平衡空闲内存在各个内存节点的分布,提升主机性能。该方法针对的是主机内存节点之间内存共享的问题,而不是针对云计算集群主机间内存共享的。
节点分为多种角色,节点间不是完全对等关系。在节点有实现内存共享和管理内存块的内存池驱动模块;所有计算结点的内存池驱动模块为远程内存共享系统提供的物理内存和内存服务器所提供的内存组成一个内存池,内存池中的内存供各计算节点共享。由于存在一个管理节点和多个内存服务器,内存的共享过程需要管理节点进行处理;当管理节点失效时,整个系统就无法运行。如果将主机节点之间的关系看作是完全对等关系,则当前存在的方法在节点之间内存共享上是无法实现的。内存共享不透明。内存服务器的虚拟内存管理器为应用程序分配虚拟内存后,根据虚拟内存的地址构造重定向文件读写代码;执行读写代码前,在代码缓冲区指令前增加间接跳转指令,使缓冲区指令被执行时,可以从虚拟内存获取数据。该方法需要修改应用程序中的指令调用方式才可以使用共享的内存,某种程度上开发人员需要重新考虑软件设计与实现的问题。根据物理机上的各个虚拟机所属的用户,将所述物理机上的虚拟机划分为至少两个用户组,每个用户组内的虚拟机共享一个进程,不同的用户组对应不同的进程;通过进程扫描对应的用户组内的虚拟机所占用的存储重复数据的内存页面;对存储重复数据的内存页面进行删除冗余数据处理。该方法在一定程度上降低了物理内存的重复率,但没有提供单台物理主机内存不足时解决方法。
发明内容
本发明针对现有技术存在的上述问题,提出一种云集群主机节点间物理内存共享方法,该方法采用一种临时借用策略。设置两种角色的物理主机:服务主机和客户主机。客户主机可申请向服务主机临时借用内存资源,服务主机可将自身空闲内存资源临时借用给客户主机,两者均处于集群环境中,通过高速网络相互连接。某一台物理主机既可以是服务主机也可以是客户主机,两种角色是通过在操作系统中安装服务模块或客户模块实现的。模块在内核模式下实现,在客户主机内存不足时,客户模块自动向服务主机借用内存资源,而不需要应用程序的参与,保证了对现有应用程序的兼容性。客户模块将借用的内存映射到虚拟内存对象当中,操作虚拟内存对象的方式与操作物理内存对象的方式相同,模块屏蔽了实现细节的不同,实现了向上的透明性。
本发明提供一种主机间物理内存借用的方法,内存借出方主机和内存借入方主机的操作系统分别安装相应的内核模块,内核模块工作于操作系统内核中,用户空间程序无法对其直接操作,需使用用户空间管理程序,通过模块提供的用户空间接口实现属性配置、信息获取等。内存借出方主机简称服务主机,内存借入方主机简称客户主机。具体步骤包括:服务主机内核模块响应客户主机的借用请求,并注册一个内存池对象,维护一个内存池信息表MemPoolTable;客户主机内核模块创建一个虚拟内存对象,维护一个记录了远端内存在虚拟内存对象中映射情况列表MemMapTable,以及一个服务主机列表ServerList;当客户主机本地内存不足,需要扩展系统内存时,系统自动开启远程内存扩展机制;客户主机从ServerList中选择一个服务主机发送服务请求,如满足借用条件,服务主机从本地内存池信息表MemPoolTable中选择一块大小为MemSize的物理内存,将这块物理内存的基本信息返回至客户主机;客户主机将借来的内存资源映射到虚拟内存对象中,将基本信息记录在映射情况列表MemMapTable中,与服务主机建立必要的数据通信连接与内存映射,并将本机虚拟内存对象容量CVMT和虚拟内存对象空闲量CVMF的值分别增加MemSize,完成远端内存的借用和映射。
本发明的其中一个实施例进一步包括,客户主机内核模块检测系统当前状态,当满足条件:认为当前客户主机内存使用率过高,需要扩展系统内存,其中,CPMT为客户主机本地物理内存容量,CPMF为本地物理内存空闲量,CVMT为虚拟内存对象容量,CVMF为虚拟内存对象空闲量,PL为系统空闲内存百分比下限值。
本发明的其中一个实施例进一步包括,客户主机进程模块申请内存分配时,如果本地物理内存对象有空闲内存时,直接从本地物理内存分配内存资源给进程,如果本地物理内存不足,客户主机操作系统从虚拟内存对象中分配内存资源给进程,并映射到进程的地址空间中。当客户主机内核模块连续三次检测到操作系统当前状态满足条件:且时,开启远程内存归还机制:选择虚拟内存对象中最后一块远端内存作为需要归还的内存块,删除该内存块在虚拟内存对象当中的映射,向该内存块所对应的服务主机发送归还通知,从MemMapTable删除对应的表项,并将本机虚拟内存对象容量CVMT和虚拟内存对象空闲量CVMF的值分别减去该块的大小。其中,PH为客户主机系统空闲内存百分比上限值,PHV为虚拟内存对象空闲内存百分比。
本发明进一步提供一种主机间物理内存借用的装置,包括:客户主机和服务主机,客户主机内核模块用于客户主机操作系统在本地内存不足时向服务主机申请借用内存、建立网络通信连接、维护远端内存在本地虚拟内存对象上的映射,当前空闲内存率过高时,将映射到虚拟内存对象中的远端内存归还给相应的服务主机,向用户层提供信息查询、配置修改的接口,客户主机监控进程通过客户主机内核模块提供的接口周期性查询当前远端内存映射到本地的状况;服务主机实现本地内存的借出、回收服务,服务主机内核模块用于响应、验证客户主机的内存借用申请、分配本地内存映射到客户主机虚拟内存对象、客户主机归还内存后将内存归还给内存池,同时向上提供用户的信息查询、配置修改的接口,服务主机监控进程通过服务主机内核模块提供的接口周期性查询本地内存映射到远端的状况,通过监控进程设置相应运行参数;客户主机和服务主机通过网络实现通信连接。
本发明模块实现了内存的单向借用,在此基础上,通过节点主机角色的转换,实现物理内存在不同节点主机之间相互借调,达到节点主机间物理内存共享的目的。除客户主机主动申请外,也可以在云集群中设置管理主机,通过管理主机,对所有的物理节点的物理内存进行统一分配和调度管理。
本发明设置集群环境中的主机为客户主机或服务主机两种角色之一,当客户主机空闲内存比例低于某一值时,自发向服务主机申请远端内存借用并完成远端内存到本地虚拟内存对象的映射,调整内存总量和可用内存量。当客户主机空闲内存比例高于某一值,且虚拟内存对象空闲内存比例高于某一值时,客户主机归还一部分借用的远端内存。这样可以将某些主机闲置的内存资源借给其他主机使用,提高了内存的利用率;且在不改变单台主机物理内存大小的情况下根据需求动态调整可用内存容量,提升了主机性能。
附图说明
图1为服务主机内存池结构图;
图2为本发明中内存借用的主要流程示意图;
图3为客户主机虚拟内存对象结构;
图4为本发明内存归还的主要流程示意图;
图5为本发明的装置结构示意图;
图6为本发明方法中通信报文格式。
具体实施方式
本发明实施例提供了一种主机间物理内存共用的装置,包括以下三部分:客户主机,客户主机透明实现向服务主机借入、归还内存,包含客户主机内核模块和客户主机监控进程。所述客户主机内核模块用于客户主机操作系统在本地内存不足时自发向服务主机申请内存借用、建立网络通信连接、维护远端内存在本地虚拟内存对象上的映射、内存归还给服务主机,向用户层面提供信息查询、配置修改的接口。所述客户主机监控进程通过内核模块提供的接口周期性查询当前远端内存映射到本地的状况,用户可以通过监控进程设置相应的运行参数。
服务主机,服务主机实现本地内存的借出、回收服务;包含服务主机内核模块和服务主机监控进程。服务主机内核模块用于响应客户主机的内存借用申请、验证申请是否通过、分配本地内存映射到客户主机虚拟内存对象、客户主机使用完毕归还内存后将内存归还给内存池,同时向上提供用户层面的信息查询、配置修改的接口。服务主机监控进程通过内核模块提供的接口周期性查询本地内存映射到远端的状况,用户可以通过监控进程设置相应的运行参数。
客户主机和服务主机通信通过网络实现物理和逻辑链路连接。
虚拟内存对象扩展了客户主机可用内存的容量。早期的CPU与操作系统的寻址宽度为32位,即允许管理的最大的物理内存容量为232Byte=4GByte,这样的内存容量仅仅可以满足普通PC的配置要求,而已经无法满足云集群节点计算机的配置要求。随着技术发展,CPU与操作系统的寻址宽带可达到64位,理论上允许管理的最大的物理内存容量为264Byte;但考虑计算机硬件技术的发展情况,实际上目前单台主机最大只能支持1TByte物理内存,同时考虑成本问题,多数主机物理内存远低于1TByte。因此,虚拟内存对象完全可以在不影响原有物理内存的情况下添加到操作系统系统当中,并由操作系统进行管理。
图1为服务主机内存池结构图。
服务主机内存池呈线性结构,内存池的大小SMemPool的初始值由SPMF决定,根据公式:其中,SPer表示内存池比例,(如初始值设为0.5,即内存池容量为当前服务主机空闲内存的50%。MemBlk为需要对齐到内存的分配粒度。内存池按照MemBlk的大小划分为多个内存块,内存块呈线性排列。内存块为内存借用的最小单位,一个内存块或者全部借给某一台客户主机,或者全部为空闲状态。
在服务主机中的服务主机内存池表MemPoolTable记录了内存池中内存块信息,该表每一项代表内存池中一块内存块。根据上面的描述,可知MemPoolTable表中所含项数为SMemPool/MemBlk。MemPoolTable所含字段包括内存块在内存池中的编号SMBIndex、当前状态SMBState、该内存块映射到的客户主机的编号CliNum和网络地址CliAddr。内存块编号既是内存块在MemPoolTable的索引,也是内存块在内存池中的顺序位置。当前状态指明该内存块的使用情况:当前状态为空闲,则表明该块内存块没有被借出,CliNum和CliAddr值为空;当前状态为借用,则表明该内存块已经被借出,CliNum和CliAddr记录借用者信息。
图中所示的内存块的状态记录在MemPoolTable中的结果如表1所示:
表1:服务主机内存池表MemPoolTable格式。
SMBIndex | SMBState | CliNum | CliAddr |
0 | 借用 | 主机号1 | 网络地址1 |
1 | 借用 | 主机号2 | 网络地址2 |
2 | 借用 | 主机号2 | 网络地址2 |
3 | 空闲 | ||
…… | …… | …… | …… |
N‐1 | 借用 | 主机号M | 网络地址M |
图2为本发明方法中内存借用的主要流程示意图,其步骤主要包括:
步骤201:客户主机内核模块检测系统当前内存使用情况;
内核模块在系统启动后,每隔T时间检测系统当前内存使用情况。T默认值为120s,即可每两分钟检测一次。该值可通过客户主机用户空间管理程序进行修改,根据客户主机运行情况、内存使用增长率修改为相应值。每次检测的结果记录在系统日志当中。
步骤202:当客户主机空闲内存比例小于下限值PL,即满足
时,则认为可用内存量不足,需要从服务主机借用内存资源。
步骤203:启用内存扩展机制,确定需要借用的内存量;内存扩展机制是本机可用内存不足时,由客户主机内核模块自行发起的系统功能调用。该过程不需要主机用户或用户层面的程序进行干预,完全由内核模块发起操作,并处理过程中产生的错误。根据公式:计算客户主机需要借用的内存量BorMem。其中,CPer表示分配比例,初始值可为0.2,即本次需要借用的内存量BorMem为现有内存比例的20%。BorMem值需要向上对齐到内存分配粒度MemBlk。
步骤204:判断客户主机的ServerList是否为空。客户主机保存一个服务主机列表ServerList,列表内容为所在集群中所有服务主机的信息,包括每台服务主机的网络地址ServAddr、主机编号ServNo、允许借用的最大内存容量MaxMem、已向其借用的内存容量CurMem等信息。该列表可通过客户主机管理程序添加、删除或修改条目。ServAddr、ServNo用于服务主机的识别,MaxMem、CurMem用于判断是否可以向该服务主机借用内存。如果客户主机当中服务主机列表为空,则表明无内存可借用,内存借用过程失败,跳转至步骤210;不为空跳转至步骤205。步骤205:从ServerList选择一项符合要求的服务主机。客户主机内核模块遍历ServerList列表,选择其中一台服务主机,查看该服务主机当前状态,判断是否还可以向该服务主机借用内存,即是否满足:BorMem≤(MaxMem-CurMem),如果满足则选定该主机,转至步骤206,不满足则从ServerList中选择下一台主机判断其是否满足条件。
步骤206:向服务主机发送内存借用申请。客户主机按照一定的格式构造内存借用请求包,包含本机编号,步骤205选定的服务主机的编号,服务主机网络地址,请求借用的内存的大小,内存分配粒度等信息,向该服务主机发送内存借用请求。
步骤207:服务主机判断是否满足借用条件。服务主机收到借用申请,判断请求信息中服务主机编号、网络地址信息是否与本机信息相同,判断客户主机的体系结构是否与本机相同。并判断当前本地内存池可借用物理内存剩余量是否满足客户主机申请借用的申请量。若满足借用条件,则转至步骤210;不满足借用条件则转至步骤208。
步骤208:通知客户主机不满足借用条件。服务主机无法满足客户主机的申请时,向客户主机发送通知,告知客户主机该服务主机不满足借用条件,并返回具体的原因。
步骤209:客户主机的ServerList仍然有可选项。客户主机向ServerList中某台服务主机发送内存借用申请但被拒绝后,需判断ServerList中是否还有其他服务主机可选。可选的含义是该服务主机在本次远程内存分配过程中还没有向其发送过借用申请。如果没有服务主机可选,即客户主机向ServerList中所有对象都发送过借用申请,但仍然没有借用到远程内存,则表明内存分配失败;如果有服务主机可选,则跳转至步骤205,进行新的内存借用申请过程。
步骤210:服务主机申请内存池内存成功。客户主机申请内存的大小BorMem是对齐到MemBlk的,服务主机内存块也是以MemBlk为单位划分的,则服务主机需要将BorMem/MemBlk个内存块借给该客户主机。
服务主机遍历MemPoolTable查询内存池中内存块的信息。如果检测到内存池当中空闲内存块数量≥BorMem/MemBlk,则从中选出BorMem/MemBlk个内存块作为借出给该客户主机的内存,申请内存池内存成功;如果检测到内存池当中空闲内存块数量<BorMem/MemBlk,则申请内存池内存失败。
申请成功则跳转至步骤211,申请失败则跳转至步骤208。
步骤211:服务主机将申请到的内存分配给客户主机。服务主机从内存池申请到内存后,将内存的信息反馈给客户主机,其中包括借用到的一个或多个内存块在内存池中的顺序编号,内存块的大小等信息。
步骤212:客户主机将借用到的远端内存添加至虚拟内存对象。客户主机在向服务主机借用到内存后,将其添加到虚拟内存对象当中,并在MemMapTable中记录借用到的内存在虚拟内存对象当中所在位置,并更新CVMT和CVMF的值,完成内存借用过程。
图3为客户主机虚拟内存对象结构。
客户主机虚拟内存对象初始化大小为0,即CVMT=0,CVMF=0。客户主机空闲内存不足时由客户主机内核模块向集群服务主机借用远端内存并添加到虚拟内存对象当中,扩大虚拟内存容量,并将CVMT和CVMF的值在原值的基础上分别增加借用的远端内存的大小。虚拟内存对象为线性结构,由多个顺序排列的内存块组成。在管理上遵循先进后出原则:当有新的内存块添加到虚拟内存对象时,将该新内存块添加到内存块序列的末尾;当需要归还内存块时,需首先归还内存块序列末尾的内存块。内存块大小均为MemBlk,则CVMT大小必然为MemBlk的整数倍。每个内存块的来源信息记录在MemMapTable当中,MemMapTable所含字段包括内存块本地编号CMBIndex、内存块来源的服务主机的编号SerNum、服务主机的网络地址SerAddr、内存块在其来源的服务主机中的编号MBSerIndex。
服务主机模块作用是创建内存池对象,被动响应客户主机的内存借用请求,将内存池资源借出。客户主机模块作用是创建虚拟内存对象,在本地物理内存不足时主动发送申请借用内存,将借用的内存添加到虚拟内存对象当中;在本地物理内存充足时主动归还借用的内存。模块的实现不会修改原有操作系统内核提供给进程的内存分配、读取、释放的接口,而是对接口进行改进,使得内存分配时如果本地物理内存不能满足分配要求,则从虚拟内存对象中分配;访问或释放内存时接口自动判断访问的内存是本地物理内存还是虚拟内存对象当中的内存才,从而做出相应的处理;整体上保持向上接口的一致性。进程在申请分配、读取、释放远端物理内存时不会与使用本地内存有任何差异,如同使用本地物理内存一样。
客户主机为操作系统中安装有客户模块的计算机,是借用内存的获取方。通过客户模块提供的接口可以在客户主机中配置服务主机列表ServerList,ServerList内容至少包括服务主机号、网络地址、主机体系结构、操作系统类型、最大可借物理内存量。客户主机中存在一个虚拟内存对象,虚拟内存对象的作用与本地物理内存都可以向进程提供内存资源。两者不同之处在于:只有本地物理内存可以映射到操作系统内核的地址空间当中,虚拟内存对象的内存资源只可以分配给一般的用户进程使用;用户进程申请内存资源分配,且在本地物理内存不足时,才会去分配虚拟内存对象当中内存资源;访问本地物理内存同一般访存规则无差别,而访问虚拟内存对象时,内核模块会自发访问实际存在于服务主机上的相应内存页面,并将结果返回到客户主机当中,整个过程用户进程不会感觉与访问本地物理内存有任何差别。
图中所示状态如表2所示:
表2:客户主机虚拟内存对象中映射情况表MemMapTable格式
图4为本发明方法中内存归还的主要示意图,其主要包括:
步骤401:客户主机检测系统当前符合归还内存的条件。客户主机每隔T时间检测系统当前内存使用情况,计算空闲内存比满足且时,则认为系统当前空闲内存率过高,当连续三次检测并计算的结果均显示当前空闲内存率过高时,则认为满足归还内存的条件,需要归还部分借用的远端内存,并转至步骤202,反之不做处理,过程结束。
步骤402:确定需要归还的内存块为空闲。客户主机检测映射到虚拟内存对象的最后一个内存块的使用情况。如果该内存块为完全空闲状态,没有被使用的页面,则表明可以释放该内存块,转至步骤403。如果有页面被使用,则启用内存页面迁移机制:首选将该内存块中所有正在被使用的页面复制一份副本到客户主机借用的其他的内存块或者客户主机的本地物理内存当中;随后修改使用这些页面进程的内存映射情况,通过修改进程的页表,使得进程对原页面的访问重定向至该页面的副本,原页面变为空闲状态;在确保最后一个内存块的页面全部空闲后,转至步骤403。
步骤403:删除内存块在虚拟内存对象中的映射。客户主机修改MemMapTable,从该表中删除最后一项,即删除最后一个内存块在虚拟内存对象当中的映射。修改CVMT和CVMF的值。
步骤404:客户主机向服务主机归还借用内存。客户主机构造网络数据包,通知相应的服务主机归还内存,并附带所要归还的内存块在服务主机中的编号。
步骤405:服务主机将申请的内存归还给内存池。服务主机修改MemPoolTable,将被归还的内存块的对应的SMBState改为空,并清除对应的CliNum和CliAddr的内容,完成整个归还过程。
图5为本发明的装置结构示意图,组成部分包括客户主机51,服务主机52和网络53。
客户主机所涉及的模块或对象包括:用户进程控制模块511,用户进程地址空间512,客户主机的本地物理内存513,内存借用管理程序客户主机部分514,客户主机内核模块515,虚拟内存516和网络设备517。客户主机内核模块负责完成网络通信,页面映射到进程地址空间,虚拟内存的创建、管理,向上提供管理接口,同时也是虚拟内存与网络设备之间的桥梁。
服务主机所涉及的模块或对象包括:内存借用管理程序服务主机部分521,服务主机内核模块522,内存池523,服务主机的本地物理内存524和网络设备525;服务主机内核模块为最核心内容,负责完成网络通信,本地内存申请,将申请到的内存共享至远端,向上提供管理接口,同时也是本地物理内存与网络设备之间的桥梁。
网络可以为集群环境中常见的网络类型,如以太网、光纤网络。
图6为本实施例通信报文格式示例。该报文可为TCP/IP模型中传输层报文,下层直接交付给IP层由IP协议封装发送。报文结构包括下面内容:
版本号:占8位,其中高3位为主版本号,低5位为次版本号,版本号用于协议扩展控制。
首部长度:占8位,其大小表示报文首部长度,报文首部必要字段占20字节,则该值最小为20。
类型:占4位,指明报文类型,包含以下三种:
控制报文:编号0x1,客户主机向服务主机发送申请内存、释放内存,不包含数据;通知报文:编号0x2,服务主机向客户主机发送消息报告、错误报告,不包含数据;数据报文:编号0x4,数据字段为内存页面的数据。
消息:占4位,指明具体的消息类型,每一个报文的具体含义需要通过报文类型和消息类型共同确定。
保留:占8位,暂不使用。
客户主机编号:占16位,客户主机ID,用于身份确认。
服务主机编号:占16位,服务主机ID,用于身份确认。
数据长度:占16位,表明数据部门内容长度,该值最大可为65535,则报文最大长度不得大于该值。
首部校验和:占16位,用于接收方计算首部是否在传输中产生差错。
序号:占32位。数据传输以字节流形式,每一个字节都按顺序编号,编号循环使用。序号表明了该报文数据的起始编号。
确认号:占32位。表明发送方希望从接收方接收其发回来的数据的起始编号。
报文头可变部分:根据报文类型和消息类型的不同提供不同的附加信息。
数据:所要传输的数据内容,长度不定,单个报文最大可容纳数据为65535字节。
每一个报文的具体含义是通过报文类型和消息类型共同确定的,且报文含义的不同,报文头可变部分的内容也不相同,常见的组合如表3所示。
表3:报文类型与消息的组合
假设主机地址总线长度AddrBusLen为64,即寻址空间可以达到264Byte;MemBlkShift值为30,即MemBlk=2MemBlkShift=1GByte,即一个内存块大小为1GByte。客户主机MemMapTable当中的项数为CVMT/MemBlk,MemMapTable中内存块编号CMBIndex值的范围为[0,CVMT/MemBlk‐1]。
假设进程访问虚拟内存对象地址为VMAddr的内容,根据内存块大小、客户主机虚拟内存对象结构和服务主机内存池内存在虚拟内存对象当中的映射状态,进程访问虚拟内存对象的页面时,访问地址从客户主机到服务主机的转换过程如下:
1.VMAddr以二进制表示,提取VMAddr的低MemBlkShift位作为块内偏移量MemBlkOff。
2.VMAddr以二进制表示,提取VMAddr的高AddrBusLen‐MemBlkShift位作为虚拟内存对象内存块块编号VMBIndex。
3.查询客户主机MemMapTable,查找到某一个内存块满足:CMBIndex=VMBIndex即查找到要访问的目标内存块。
4.获取目标内存块的MBSerIndex值,该值即为目标内存块在服务主机内存池当中的内存块编号。获取相应的SerNum和SerAddr可得到对应的服务主机信息,向该服务主机发送数据包,数据包包括MBSerIndex和MemBlkOff。
5.服务主机收到数据包后,根据数据包中MBSerIndex和MemBlkOff的值确定要访问的内存在内存池中的地址PMAddr。MBSerIndex作为PMAddr的高AddrBusLen‐MemBlkShift位,MemBlkOff作为PMAddr的低MemBlkShift,可还原出长度为AddrBusLen位的内存池地址。并以此访问数据。
以上对本发明所提供的云集群主机物理内存借用的方法和模块进行了详细的介绍,本文中应用了具体流程对本发明的原理及实施方式进行了阐述,而非对其限制;以上实施例仅用以说明本发明的技术方案,只是用于帮助理解本发明的方法及其核心思想,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变,本领域的普通技术人员应当理解:其依然可以对各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。综上所述,本实施例内容不应理解为对本发明的限制。本领域普通技术人员将会理解:实现上述方法实施例的全部步骤应当在操作系统内核范围内实现,程序源代码作为内核源代码的一部分参与内核文件的编译生成过程,并可存储于计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤。
文中涉及到的符号的含义如下(其中给出的具体值为参考值):
●客户主机本地物理内存容量表示为CPMT,初始值为客户主机本地物理内存实际容量,由系统配置决定,单位Byte;
●客户主机本地物理内存空闲量表示为CPMF,初始值为客户主机本地物理内存实际空闲量,由当前运行状态决定,单位Byte;
●客户主机虚拟内存对象容量表示为CVMT,初始值为0,单位Byte;
●客户主机虚拟内存对象空闲量表示为CVMF,初始值为0,单位Byte;
●客户主机系统空闲内存百分比下限值表示为PL,建议参考值为0.1;
●客户主机系统空闲内存百分比上限值表示为PH,建议参考值为0.4;虚拟内存对象空闲内存百分比为PHV,建议参考值为0.7。
●客户主机内核模块检测内存状态的周期表示为T,初始值为120s。
●客户主机需要借用的内存量表示为BorMem。
●内存分配粒度表示为MemBlk,MemBlkShift表示其二进制偏移量,值为30,则MemBlk初始值为2MemBlkShift,单位Byte,即1GByte;一次借用内存的大小必须为MemBlk的倍数。
●服务主机本地物理内存容量表示为SPMT,初始值为服务主机本地物理内存实际容量,由系统配置决定,单位Byte;
●服务主机本地物理内存空闲量表示为SPMF,初始值为服务主机本地物理内存实际空闲量,由当前运行状态决定,单位Byte;
●内存池为服务主机内核模块安装并启动后由模块创建的对象,内存池大小表示为SMemPool,单位Byte。
●服务主机内存池信息表表示为MemPoolTable。
●远端内存的来源和在客户主机虚拟内存对象中映射情况表表示为MemMapTable。
Claims (11)
1.一种云计算主机间物理内存借用的方法,其特征在于:服务主机内核模块响应客户主机的借用请求,并注册一个内存池对象,维护一个内存池信息表MemPoolTable;客户主机内核模块创建一个虚拟内存对象,维护一个记录了借用远端内存在虚拟内存对象中映射情况的列表MemMapTable,以及一个服务主机列表ServerList;当客户主机本地内存不足,需要扩展系统内存,自动开启远程内存扩展机制;客户主机从ServerList中选择一个服务主机发送服务请求;如满足借用条件,服务主机从本地分配相应的物理内存资源返回至客户主机,并与客户主机建立必要的数据通信连接与内存映射;客户主机进程申请内存分配,将借来的内存资源映射到虚拟内存对象中,并调整虚拟内存对象容量CVMT和虚拟内存对象空闲量CVMF的值,完成远端内存的借用和映射。
2.根据权利要求1所述的方法,其特征在于,所述借用条件为:客户主机内核模块检测系统当前状态,当满足条件:认为当前客户主机内存使用率过高,需要扩展系统内存;其中CPMT为客户主机本地物理内存容量,CPMF为本地物理内存空闲量,CVMT为虚拟内存对象容量,CVMF为虚拟内存对象空闲量,PL为系统空闲内存百分比下限值。
3.根据权利要求1所述的方法,其特征在于,所述开启远程内存扩展机制具体为,服务主机从本地内存池信息表MemPoolTable中选择一块大小为MemSize的物理内存,将这块物理内存的基本信息返回至客户主机,客户主机将借来的内存资源映射到虚拟内存对象中,将基本信息记录在映射情况列表MemMapTable中,与服务主机建立必要的数据通信连接与内存映射,并将本机虚拟内存对象容量CVMT和虚拟内存对象空闲量CVMF的值分别增加MemSize,完成远端内存的借用和映射,其中,CPMT为客户主机本地物理内存容量,CPMF为本地物理内存空闲量,PL为系统空闲内存百分比下限值。
4.根据权利要求1所述的方法,其特征在于,客户主机进程模块申请内存分配时,如果本地物理内存对象有空闲内存时,直接从本地物理内存分配内存资源给进程,如果本地物理内存不足,客户主机操作系统从虚拟内存对象中分配内存资源给进程,并映射到进程的地址空间中。
5.根据权利要求1所述的方法,其特征在于,当客户主机内核模块连续三次检测到操作系统当前状态满足条件:且时,选择虚拟内存对象中最后一块远端内存作为需要归还的内存块,删除该内存块在虚拟内存对象当中的映射,向该内存块所对应的服务主机发送归还通知,从MemMapTable删除对应的表项,并将本机虚拟内存对象容量CVMT和虚拟内存对象空闲量CVMF的值分别减去该块的大小,其中,PH为客户主机系统空闲内存百分比上限值,PHV为虚拟内存对象空闲内存百分比,CPMT为客户主机本地物理内存容量,CPMF为本地物理内存空闲量。
6.一种主机间物理内存借用的装置,其特征在于,包括:客户主机和服务主机,客户主机内核模块用于客户主机操作系统在本地内存不足时向服务主机申请借用内存、建立网络通信连接、维护远端内存在本地虚拟内存对象上的映射,当前空闲内存率过高时,将映射到虚拟内存对象中的远端内存归还给相应的服务主机,向用户层提供信息查询、配置修改的接口,客户主机监控进程通过客户主机内核模块提供的接口周期性查询当前远端内存映射到本地的状况;服务主机实现本地内存的借出、回收服务,服务主机内核模块用于响应、验证客户主机的内存借用申请、分配本地内存映射到客户主机虚拟内存对象、客户主机归还内存后将内存归还给内存池,同时向上提供用户的信息查询、配置修改的接口,服务主机监控进程通过服务主机内核模块提供的接口周期性查询本地内存映射到远端的状况,通过监控进程设置相应运行参数;客户主机和服务主机通过网络实现通信连接。
7.根据权利要求6所述的装置,其特征在于,服务主机内存池呈线性结构,内存池按照MemBlk的大小划分为多个内存块,内存块呈线性排列,内存池的大小SMemPool的初始值根据公式:SMsmPool=|(SPMF×SPer)÷MemBlk|×MemBlk确定,其中,SPMF表示服务主机本地物理内存空闲量,SPer表示内存池比例,MemBlk为需要对齐到内存的分配粒度。
8.根据权利要求6所述的装置,其特征在于,服务主机中进一步包括服务主机内存池表,服务主机内存池表MemPoolTable记录了内存池中内存块信息,MemPoolTable所含字段包括内存块在内存池中的编号SMBIndex、当前状态SMBState、该内存块映射到的客户主机的编号CliNum和网络地址CliAddr。
9.根据权利要求6所述的装置,其特征在于,客户主机内核模块检测系统当前状态,当满足条件:时,认为当前客户主机内存使用率过高,本地内存不足,其中,CPMT为客户主机本地物理内存容量,CPMF为本地物理内存空闲量,CVMT为虚拟内存对象容量,CVMF为虚拟内存对象空闲量,PL为系统空闲内存百分比下限值。
10.根据权利要求6所述的装置,其特征在于,客户主机进程模块申请内存分配时,如果本地物理内存对象有空闲内存时,直接从本地物理内存分配内存资源给进程,如果本地物理内存不足,客户主机操作系统从虚拟内存对象中分配内存资源给进程,并映射到进程的地址空间中。
11.根据权利要求6所述的装置,其特征在于,当客户主机内核模块连续三次检测到操作系统当前状态满足条件:且时,选择虚拟内存对象中最后一块远端内存作为需要归还的内存块,删除该内存块在虚拟内存对象当中的映射,向该内存块所对应的服务主机发送归还通知,从MemMapTable删除对应的表项,并将本机虚拟内存对象容量CVMT和虚拟内存对象空闲量CVMF的值分别减去该块的大小,其中,PH为客户主机系统空闲内存百分比上限值,PHV为虚拟内存对象空闲内存百分比,CPMT为客户主机本地物理内存容量,CPMF为本地物理内存空闲量。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510579599.3A CN105094997B (zh) | 2015-09-10 | 2015-09-10 | 一种云计算主机节点间物理内存共享方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510579599.3A CN105094997B (zh) | 2015-09-10 | 2015-09-10 | 一种云计算主机节点间物理内存共享方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105094997A CN105094997A (zh) | 2015-11-25 |
CN105094997B true CN105094997B (zh) | 2018-05-04 |
Family
ID=54575502
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510579599.3A Active CN105094997B (zh) | 2015-09-10 | 2015-09-10 | 一种云计算主机节点间物理内存共享方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105094997B (zh) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105760230B (zh) * | 2016-02-18 | 2019-06-07 | 广东睿江云计算股份有限公司 | 一种自动调整云主机运行的方法及装置 |
CN110019475B (zh) * | 2017-12-21 | 2021-07-20 | 华为技术有限公司 | 数据持久化处理方法、装置及系统 |
CN109918217A (zh) * | 2019-03-21 | 2019-06-21 | 联想(北京)有限公司 | 一种控制方法及终端 |
CN110347475B (zh) * | 2019-06-19 | 2022-03-04 | 东软集团股份有限公司 | 服务调用方法、服务调用装置及服务调用系统 |
CN110928680B (zh) * | 2019-11-09 | 2023-09-12 | 上交所技术有限责任公司 | 一种适用于证券交易系统的订单内存分配方法 |
CN111444119B (zh) * | 2020-03-25 | 2023-06-02 | 北京计算机技术及应用研究所 | 一种基于内核参数的飞腾平台非易失内存注册方法 |
CN111459673A (zh) * | 2020-03-31 | 2020-07-28 | 支付宝(杭州)信息技术有限公司 | 安全内存扩展、释放方法及装置和电子设备 |
CN113014308B (zh) * | 2021-02-23 | 2022-08-02 | 湖南斯北图科技有限公司 | 一种卫星通信大容量通道并行的物联网数据接收方法 |
CN113204407B (zh) * | 2021-04-22 | 2024-01-09 | 新华三大数据技术有限公司 | 一种内存超配管理方法及装置 |
CN115794368A (zh) * | 2021-09-11 | 2023-03-14 | 华为技术有限公司 | 业务系统、内存管理方法及装置 |
CN114595029B (zh) * | 2022-02-15 | 2023-05-09 | 黄淮学院 | 一种基于自动学习的云容器资源调度方法及系统 |
CN117631958A (zh) * | 2022-08-19 | 2024-03-01 | 成都华为技术有限公司 | 一种dpu的存储空间扩展方法、装置及系统 |
CN116028232B (zh) * | 2023-02-27 | 2023-07-14 | 浪潮电子信息产业股份有限公司 | 跨机柜服务器内存池化方法、装置、设备、服务器及介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1972215A (zh) * | 2006-12-06 | 2007-05-30 | 中国科学院计算技术研究所 | 一种远程内存共享系统及其实现方法 |
CN102609305A (zh) * | 2012-02-07 | 2012-07-25 | 中山爱科数字科技股份有限公司 | 一种服务器集群中内存共享方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8565120B2 (en) * | 2011-01-05 | 2013-10-22 | International Business Machines Corporation | Locality mapping in a distributed processing system |
-
2015
- 2015-09-10 CN CN201510579599.3A patent/CN105094997B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1972215A (zh) * | 2006-12-06 | 2007-05-30 | 中国科学院计算技术研究所 | 一种远程内存共享系统及其实现方法 |
CN102609305A (zh) * | 2012-02-07 | 2012-07-25 | 中山爱科数字科技股份有限公司 | 一种服务器集群中内存共享方法 |
Non-Patent Citations (1)
Title |
---|
"内存管理机制的高效实现研究";魏海涛,姜昱明,李建武,张娅;《计算机工程与设计》;20090828;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN105094997A (zh) | 2015-11-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105094997B (zh) | 一种云计算主机节点间物理内存共享方法和系统 | |
CN103905503B (zh) | 数据存取方法、调度方法、设备及系统 | |
CN111966500B (zh) | 资源调度方法、装置、电子设备及存储介质 | |
CN107247778B (zh) | 用于实施可扩展数据存储服务的系统和方法 | |
Sonbol et al. | EdgeKV: Decentralized, scalable, and consistent storage for the edge | |
US20060168107A1 (en) | Generalized on-demand service architecture for interactive applications | |
CN107567696A (zh) | 计算集群内的资源实例群组的自动扩展 | |
CN108351806A (zh) | 分布式基于流的数据库触发器 | |
CN104679594B (zh) | 一种中间件分布式计算方法 | |
CN109313564A (zh) | 用于支持多个不同租户的高度可用虚拟桌面的服务器计算机管理系统 | |
CN101360123B (zh) | 一种网络系统及其管理方法 | |
CN110661842B (zh) | 一种资源的调度管理方法、电子设备和存储介质 | |
Guerrero-Contreras et al. | A context-aware architecture supporting service availability in mobile cloud computing | |
CN104050042A (zh) | Etl作业的资源分配方法及装置 | |
WO2020215752A1 (zh) | 图计算方法及装置 | |
CN113382077B (zh) | 微服务调度方法、装置、计算机设备和存储介质 | |
CN106533961A (zh) | 一种流量控制方法及装置 | |
Pujol et al. | Scaling online social networks without pains | |
CN110177144B (zh) | 一种基于私有云一键复制应用环境的方法 | |
CN105827744A (zh) | 云存储平台的数据处理方法 | |
CN113485830A (zh) | 一种电网监控系统微服务自动扩容方法 | |
CN115037757B (zh) | 一种多集群服务管理系统 | |
CN116954810A (zh) | 容器应用实例的创建方法、系统、存储介质及程序产品 | |
Guo et al. | PARA: Performability‐aware resource allocation on the edges for cloud‐native services | |
CN109376001A (zh) | 一种资源分配的方法及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |