最后更新2021/08/02
这个还算是比较实用的功能。最早介绍过CPU共享,也提到过内存共享,但CPU共享是动态、实时、按需分配的(虽然有限制条件),而内存需要用DLPar功能,收工调节,至少不是实时分配,那内存可不可以实现类似CPU的实时共享?答案是肯定的,但需要一些配置,这就是AMS(Active Memory Sharing)功能。
如果小型机有AMS授权,则可以支持两种内存模式:独占模式和共享模式(本节所提到的内存,如果没有特别说明,均为物理内存)。
-
在独占内存模式下,分区拥有固定的内存数量,虽然这个数字可以通过DLpar方式调整,但它不会自动更改。所有活动(启动的)分区的内存加上Hypervisor(微码)占用的内存总和就是小型机所有被使用的内存,其他剩余的内存则归属闲置内存池(Free Memory Pool),新分区启动或者DLpar增加当前活动分区内存都从内存池中抓取内存,而分区停止或者DLpar减少内存所释放的内存又还回内存池。无论经过什么动作,活动内存和未使用内存的总数不会改变。也就是分区之间不能互相抢占,与普通内存DLPar不同的是分区在启动时无需一次性拿到所有分配的内存,而在运行过程中从内存池中申请。
-
在共享内存模式下,分区被分配的内存成为逻辑数字,而不再是实实在在的物理内存。Hypervisor从物理内存中划分出一部分内存构成共享内存池,Hypervisor可以使用类似DLpar一样的方式向共享内存池中增加或者减少物理内存。当定义共享内存分区时,需要定义分区min(最小)、desired(期望)、max(最大)的逻辑内存数量,而且还有weight(权重)用来控制共享内存分区争抢内存时,谁有更高的优先级。HMC或IVM根据分区内存定义来决定每个分区“确保”可以获得的物理内存,这部分内存被称为I/O entitled memory。各种内存名称说明如<图 2-87 内存定义>所示。
图 2-87 内存定义
从技术实现角度分析,AMS的过程与OS内部内存交换区实现方式完全一致,只是涵盖的对象、管理方式有了一些调整。每个分区可以对应于运行于OS中的应用程序,物理内存池则是全部可用物理内存,VIO上创建的交换区与传统内存交换区对应。所不同的是传统内存交换不可以跨越OS,不同分区之间是严格OS隔离的。在AMS模式下,Power VM对OS隔离进行了一点点改动,就是不同AIX分区之间还是彻底OS隔离,但VIO分区具有较高权限,它可以去访问其它AIX分区的物理内存!当然,VIO也并非可以随时随地任意访问其它分区物理内存,必须在拥有Power VM Hypervisor的授权时,才可以访问被允许访问的内存页。
因此AMS的实现过程就是Hypervisor随时监视各个分区的内存使用情况,当它需要从某个分区抽取内存时,会将对应的物理内存映射给VIO分区,然后向VIO发布中断指令,由VIO将物理内存中的数据dump到VIO配置的交换区,再把内存清空。这个过程完成后,物理内存页就成为空闲物理内存,可供其它分区使用。
反之,当分区需要访问被page出去的物理内存时,Hypervisor依然先要把物理内存映射给VIO分区,由VIO将交换区中的数据读回,再把此内存页映射给需要访问此数据的分区。此过程概念并不复杂,但在具体实现时,如何确定物理内存空闲是关键一步,这是由于AIX省缺将所有可用的物理内存都作为文件系统缓存,作为缓存的物理内存是否可以算做“空闲”物理内存呢?另外,如果AIX分区内存不够,AIX自身也会触发内部的内存交换机制,两种不同的交换方式相互之间有何影响?哪一个更优先?下面我们来详细分析这一过程。
正是由于只有分区上运行的OS——AIX才了解自身内存使用情况,判断自身物理内存是否可以“借出”给其它分区是由分区自身AIX而不是Hypervisor或者VIO决定;AIX内部的Paging机制和VIO AMS paging之间没有任何关系,他们是两个相互之间完全独立的过程。从某种意义上说,AIX出借给Hypervisor的物理内存一定是Free的物理内存,当AIX判断某个内存页可以借出,如果它不是Free的物理内存,则会使用AIX内部paging机制,先把物理内存内数据page出去(在自身分区内完成),把此内存页“清空”,再出借。在此处,读者会提出疑问:“既然AIX已经把内存数据page出去,VIO上还需要交换区么?”答案是需要,但它的存在的目的是为分区“借入、抢回”物理内存服务。
当AIX分区需要从Hypervisor拿到物理内存时,如果Hypervisor有足够的空闲物理内存,当然不需要VIO交换区,直接把物理内存映射给分区即可。可是“贷款”太多,Hypervisor管理的内存银行总有周转不灵的时候,分区去Hypervisor“挤兑”,而且金额满足Entirelment内存要求,Hypervisor必须“照单全付”,它就只能从其它超额借入物理内存的分区想办法,强制超额的AIX分区进入中断状态,由VIO把超额使用的物理内存内数据pageout到VIO上设立的交换区,释放的物理内存还给“挤兑”分区。
AMS与AIX内部Paging相比较,AMS的优势是跨分区的,既跨越OS进行物理内存资源分配,这样可以避免系统运行初期分区内存分配不合理的情况。因为在运行初期,对应用到底会占据多少资源都是根据设计和经验拍脑袋出来的结果,真正多少合理、适合,需要在运行过程中逐步调整到位。而调整过程,无疑无法做到及时、准确。通过AMS,相当于有个内存使用管理员随时监控内存使用情况,及时调整内存。
AMS的另一个重要用途在于满足临时内存需求。我们直到AIX使用内存作为文件系统的缓存,如果系统有大量的文件系统文件访问,必然占据很多物理内存。尽管交换机制可以及时释放内存,供其它业务使用,但定时系统备份往往时不时成为偷取大量内存的黑手,造成内存使用抖动,影响业务稳定运行。AMS正好可以跨分区弥补这个缺陷,当某个分区进行文件备份,占用大量内存时,其它分区如果不在备份,就可以释放内存供备份分区临时使用,而无需调整OS内的内存管理参数。
具体AMS实现过程将在下一章节中详细说明。