技术途径

业界就该问题定义为虚拟机内存复用(复用干嘛? 当然是为了跑更多的虚拟机呀!) :memory overcommit.围绕次问题主要有4种技术手段,下面简要介绍和分析:

1 气泡驱动(ballooning driver)

利用预装在用户虚拟机中的前端驱动程序,偷取guest os的内存贡献给VMM以供其他虚拟机使用.反向易然.

issue:

A 需要实现用户虚拟机支持的前端驱动程序.

B 不能自动偷取和归还,需要从DOM0设置.

C 不能实现启动时的内存复用,只能启动后偷取(即启动虚拟机时宿主机必须提供其给定大小的内存)

D 目前xen 引入了pod (Populate-on-demand) 似乎解决了在HVM虚拟机中的限制C

2 基于内容的页共享(base-content page sharable)

  VMM会让虚拟机共享同样内容的也面,以达到节约内存的目的。

issue:

A 操作比较重,因为要查看页面内容。

B 目前VMM只是对前后端驱动所用的页面,因此能省出的内存数量很有限。

C blktap2目前该技术尚不完善。

3 VMM 换出技术(OnDemand paging/swap)

VMM实现请页功能,这时guest os 类似进程一样在VMM缺少内存时能被换出到宿主机磁盘上。该方法对虚拟机透明。

issue:

A 由于对虚拟机透明,所以换出的虚拟机存在不确定性。这样容易造成“double paging”,也就是guest os中某些页面已经被换出,而该guest os又被VMM换出,这样必然让guest os的性能恶化。

B Xen的实现中hypervisor没有IO功能,因此要换出页面则需要借助dom0完成。所以操作复杂,目前尚未真正实现。(kvm中由于hypervisor在内核中实现,guest os 实现基于进程,因此onDemand paging功能省缺实现)

4 Transcient Memory

   Oracle 提出的新方法,这种方法实际采用了guest os 内存分配和VMM沟通,也就是向VMM申请,使用完毕,归还VMM的思路。这种方法最彻底的解决内存复用问题。

issue:

A 需要改变guest os已有的内存分配接口。也就是改造现有系统(虽然是安全的非侵入式改造)。

B 该技术还在发展阶段,尚不成熟。

结论:

  1  目前最成熟和可投入实用是气泡驱动.1 该技术已经发展多年 2 linux /windows其前端气泡驱动都有参考模型。3 ciritx server已经采用气气泡 + vm反馈 + dom0上的策略引擎 实现了单机上的内存复用。

      2  最理想的方式是采用 Transcient Memory 实现复用,这种方式无疑是将宿主机的整个内存池化、实现了按需分配、用完归还。避免了使用预先化区——被VM独占——带来的分配限制(这好比一个系统5个硬盘,单独使用和采用LVM方式使用的区别)

     3   如果你想更经济,尤其跑网站等应用——也许你该考虑考虑VPS

虚拟机内存复用技术的比较(XEN系统)的更多相关文章

  1. VPS采用的几种常见技术(OVZ、Xen、KVM)介绍与对比

    很多人看到同样配置的VPS价格相差很大,甚是不理解,其实VPS使用的虚拟技术种类有很多,如OpenVZ.Xen.KVM.Xen和HVM与PV. 在+XEN中pv是半虚拟化,hvm是全虚拟化,pv只能用 ...

  2. 可扩展的事件复用技术:epoll和kqueue

    通常来说我喜欢Linux更甚于BSD系统,但是我真的想在Linux上拥有BSD的kqueue功能. 什么是事件复用技术 假设你有一个简单的web服务器,并且那里已经打开了两个socket连接.当服务器 ...

  3. Libevent的IO复用技术和定时事件原理

    Libevent 是一个用C语言编写的.轻量级的开源高性能网络库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大:源代码相当精炼.易 ...

  4. 虚拟化技术对比:Xen vs KVM

    恒天云:http://www.hengtianyun.com/download-show-id-68.html 一.说明 本文主要从功能方面和性能方面对Xen和KVM对比分析,分析出其优缺点指导我们恒 ...

  5. Java虚拟机内存优化实践

    前面一篇文章介绍了Java虚拟机的体系结构和内存模型,既然提到内存,就不得不说到内存泄露.众所周知,Java是从C++的基础上发展而来的,而C++程序的很大的一个问题就是内存泄露难以解决,尽管Java ...

  6. 深入理解Java虚拟机—内存管理机制

    前面说过了类的加载机制,里面讲到了类的初始化中时用到了一部分内存管理的知识,这里让我们来看下Java虚拟机是如何管理内存的. 先让我们来看张图 有些文章中对线程隔离区还称之为线程独占区,其实是一个意思 ...

  7. 虚拟化技术对照:Xen vs KVM

    恒天云:http://www.hengtianyun.com/download-show-id-68.html 一.说明 本文主要从功能方面和性能方面对Xen和KVM对照分析,分析出其优缺点指导我们恒 ...

  8. KVM在线扩展虚拟机内存

    环境介绍 在KVM下有一台虚拟机内存不够需要扩展内存.宿主机地址是192.168.1.28.我需要扩展的虚拟机是centos1708vm03. 1.登陆上宿主机查看虚拟机配置 virsh dumpxm ...

  9. iOS开发ARC内存管理技术要点

    本文来源于我个人的ARC学习笔记,旨在通过简明扼要的方式总结出iOS开发中ARC(Automatic Reference Counting,自动引用计数)内存管理技术的要点,所以不会涉及全部细节.这篇 ...

随机推荐

  1. bzoj 1150

    思路:写的时候感觉是贪心但是没有什么思路... 看了题解,原来有一个选了能反悔的贪心思路, 如果最优那么每个城市只能和旁边的相邻 城市连边,所以问题变成了由n个数,不能取相邻的两个数,取k个最小是多少 ...

  2. shared_ptr(作为局部变量返回)

    智能指针:shared_ptr 1.一个局部的shared_ptr 作为返回值过程:当shared_ptr 被创建的时候,自身的引用计数 +1,当前引用计数为 1 , 按值返回以后 引用计数 + 1 ...

  3. JAVA 传递

    其实java里面都是传值,只不过基本数据类型传的是数值,而引用类型传的是对象的地址. 作者:Intopass链接:https://www.zhihu.com/question/31203609/ans ...

  4. 最长子回文字符串(Manacher’s Algorithm)

    # # 大佬博客: https://www.cnblogs.com/z360/p/6375514.html https://blog.csdn.net/zuanfengxiao/article/det ...

  5. GBDT算法

    GBDT通过多轮迭代,每轮迭代产生一个弱分类器,其中弱分类器通常选择为CART树,每个分类器在上一轮分类器的残差基础上进行训练. 对于GBDT算法,其中重要的知识点为: 1.GBDT是梯度下降法从参数 ...

  6. 20172308《Java软件结构与数据结构》第一周学习总结

    教材学习内容总结 第 1 章 概述 软件质量的特征:正确性.可靠性.健壮性.可用性.可维护性.可重用性(别人写的组件自己可以拿过来用).可移植性.运行效率 数据结构:计算机存储.组织数据的方式 程序 ...

  7. Xtreme8.0 - Sum it up 水题

    Sum it up 题目连接: https://www.hackerrank.com/contests/ieeextreme-challenges/challenges/sum-it-up Descr ...

  8. Codeforces Round #369 (Div. 2) D. Directed Roads 数学

    D. Directed Roads 题目连接: http://www.codeforces.com/contest/711/problem/D Description ZS the Coder and ...

  9. [原创]App性能测试指标篇

    [原创]App性能测试指标篇 目前由于苹果,三星等大厂对智能手机的研发及投入,使的智能手机发展非常迅速,每个人手中都有一些离不开生活的App,如:微信,微博,百度或是各游戏App等,但是到底App性能 ...

  10. 使用CefSharp在.Net程序中嵌入Chrome浏览器(八)——Cookie

    CEF中的Cookie是通过CookieManager来管理的,可以用它来设置发送的Cookie. 发送Cookie 发送Cookie的一个基本示例如下: var cookieManager = _c ...