虚拟化下的内存共享

Posted SSDFans

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了虚拟化下的内存共享相关的知识,希望对你有一定的参考价值。


 

想要和作者还有《大话存储》作者冬瓜哥、《PCI Express体系结构导读》作者王齐、《蛋蛋读NVMe》作者蛋蛋等全世界的大牛讨论SSD及存储相关技术?加nanoarch为微信好友,拉你进ssdfans微信群 。 


欢迎给ssdfans投稿,投稿就能加入ssdfans作者群,和冬瓜哥,蛋蛋等大咖切磋武艺,还有稿酬拿.


作者王豪迈目前是XSKY CTO,Ceph核心开发者,为Ceph贡献了4%的代码。


虚拟化技术在过去时间已经无处不在,特别是当资源隔离变得越来越重要以后,虚拟机对于资源服务化产生了极大的吸引力。它对于服务之间的隔离使得不同类型的服务能运行在同一个物理节点,并且能够享受独立的参数配置和错误隔离环境。


但是当物理CPU资源经得起VM叠加造成的消耗剧增以后,内存成为了一个关键的卡口。当10个服务可以舒适的同时运行在1GB的物理内存环境下时,一个同样1GB内存的Host如果承载10个VM却会让服务变得极其难受,这时每个VM的100MB会成为显而易见的短板。简单粗暴的增加物理节点内存是困难并且昂贵的,增量式升级在客观上需要额外的主板插槽和支持高容量的模块。纯粹增加内存不仅仅带来昂贵的一次性消费,同时也是造成额外的能源消耗。因此,当物理节点下VM叠加时,内存会成为这个情况的主要瓶颈并且使得服务和系统运行都变得极为难堪。并且现代商用操作系统在内存紧张时的换页机制无疑会击溃贫瘠的VM性能。


为了减少VM对内存的需求,基于内容的页共享就带来了极大的好处。首先可以对多个VM运行产生的相同内存页可以进行唯一性合并,比如相同的系统镜像。再通过寻找大量”相似”内存页并找出一个基准页面,然后通过存储每一个相似页面与基准页面的差异来合并这些相似页面。更进一步的话,内存压缩可以做内存利用率提高的最后”钥匙”,通过对一些”冷”页面的压缩和上述的页面共享,VM的内存瓶颈问题也会大大减轻。


内存页面唯一化目前广泛存在,其主要依赖对内存页的Hash化建立唯一值,然后对不同内存页进行相同Hash值的合并。典型情况下一个Agent会运行在Host端来做作为一个例程检查重复内存页,如KSM。而VirtualBox选择在Guest OS上的Additions上建立对Guest Memory的管理,这种会大大减小重复页唯一化的负载。


除了完全相同的内容以外,大量内存页实质上却是不同但是类似的,这时候Hash的唯一性校验就遇到了麻烦。几个Bits乃至几十的改变都会造成两个完全不同的页面。通过一些Hash变种可以计算出不同页面的近似并且创建出补丁来进一步合并内存页。


跟唯一化相比,基准页共享的内存补丁方式更具有难度,主要也有两种方式,一类是通过显式的页变化跟踪来建立对基准页的掌握,另一类是通过透明的页共享管理但是需要在Guest OS端建立跟踪。后者往往更高效,如同IO性能之于Para-Virtualized和Fully Virtualized。


对于页面相似性的计算最初是通过划分出页的几个固定块来计算出不同的”指纹”,相同”指纹”的页面会合并成同一个页面。但是显而易见的是动态的内存页变化会造成泛滥的计算资源消耗,每次内存页都的修改都需要重新计算多个”指纹”。这时候,借助于传统网页对于相似页面计算的研究,通过使用的方式和的编码技术来能显著减少计算内存冗余页的资源消耗。

根据一些测试表明,唯一性页面共享会带来50%以上的页面减少,而通过补丁方式合并更多页面会来带77%以上的页面减少。


图一


相比之下,内存压缩更加不是一个新的领域,早在操作系统的”远古时期”类似的研究就层出不穷,但是一直以来内存压缩导致性能上的损失远远超过获得的好处,即时是现在,其带来的好处也只能说是”部分”时间上是总体趋好的。内存压缩实质上有点类似于内存补丁,只是内存补丁可以看作是压缩比较小的内存压缩,与之相匹的就是更小的性能损耗。因此,内存压缩的压缩比和被压缩页面的访问频率是内存压缩能否获得更好收益的重要权衡因素。


目前并所有的商用虚拟化技术都多多少少实现了上述内存共享,比如Linux的,VMWare ESX的(TPS)或者是Xen的,还有VirtualBox的。


实质上,本人更愿意将内存共享技术视为VDI领域的标志,传统的服务器应用很难接受除了Unique Page Sharing以外更高层次的内存压缩,这会给应用和系统带来意料之外的复杂性和性能权衡。而在桌面领域它才是革命性的变化,通过内存共享,数以百计的VM得以在一个物理机器下运行并且得到有效的CPU利用。VirtualBox自3.2版本加入Page Fusion后(最初只支持WIndows 2000及以上系统,目前仅不支持32位系统和Mac系统),该部分功能正在越来越完善。而内存压缩据我了解也在VirtualBox的Roadmap之中,但由于其更加难以控制的原因,目前也只有新推出的OS X 10.9上得到应用。相对于VirtualBox而言,其难度超出内核级别的内存压缩,但是VirtualBox带来的一个良好的压缩权衡得到的收益也是远远超出一个系统内存压缩所带来的好处。


参考:

  1. 图一来自


经作者同意,转载自博客http://www.wzxue.com/vdi%E4%B8%8E%E5%86%85%E5%AD%98%E5%85%B1%E4%BA%AB/


喜欢就请分享转发!




ssdfans微信群介绍

技术讨论群 覆盖2000多位中国和世界华人圈SSD以及相关存储行业的技术精英
固件、软件、测试群 SSD固件、软件和测试技术讨论
异构计算群 讨论人工智能和GPU、FPGA、CPU异构计算
ASIC-FPGA群 芯片和FPGA硬件技术讨论群
闪存器件群 NAND、3D XPoint等固态存储介质技术讨论
企业级 企业级SSD技术与应用
销售群 SSD,NAND Flash交易
工作求职群 SSD行业换工作,发招聘,要关注各大公司招聘信息,赶快来


想加入这些群,请加nanoarch为微信好友,介绍你的昵称-行业-职务,注明群名,拉你进群。


以上是关于虚拟化下的内存共享的主要内容,如果未能解决你的问题,请参考以下文章

再探进程间通信

[转]Windows 下的进程间通讯及数据共享

进程间通信(共享内存)

(转载)linux下的僵尸进程处理SIGCHLD信号Linux环境进程间通信: 共享内存(下)

Linux进程IPC浅析[进程间通信SystemV共享内存]

Linux进程IPC浅析[进程间通信SystemV共享内存]