您的位置:首页 > 其它

KVM的虚拟化内存

2013-05-23 23:32 260 查看
现代操作系统对内存共享的应用已经非常广泛了,例如fork的进程会与父进程共享所有的内存空间,虚拟化技术也逐渐增加了对内存共享的要求,但是并没有想象中那么容易。虚拟化的一个重要优势是能将多个工作负载整合到一个计算机系统中,Linux主要采用了两种技术来解决虚拟化的内存超量使用。

1: 内存膨胀(memory ballooning)是指主机指示合作客户释放一些已分配内存以用于其他用途。这种技术将内存压力从主机转移到客户机上。

2:KSM(Kernel same-page merging) 使用一个内核线程扫描之前确认的内存范围内是否有一样的页面,将其合并 然后释放其副本。KSM是最受欢迎的形势。KSM 简单来说就是一个memory deduplication(内存去耦合)的进程。KSM允许虚拟机合并一些内存内容相同的page,进而达到节约内存的目的.

我们通过一个例子来了解KVM shared memory 的好处

[3]利用30个windows 7 镜像做了KSM memory deduplication 实验。 

    Windows 7 镜像个格式为qcow2,大小为20G,4G虚拟内存 ,2个CPU

   测试KVM的主机为Dell c6220,32个HT 内核和128G的主存。

    启动30个Window 7 的配置为: 

    MEM=4048

    BACKING_DIR = /mnt/ksm-test

    BACKING_FILE=win7-base.qcow2

    SLEEP=60

Ubuntu默认开启KSM, 默认配置为:pages_scan = 100; sleep_millisecs = 200

也就是说KSM会扫描100个内存pages,休息200 millisecs,然后再扫描100个pages再休息200millisecs。这样扫描会很慢,所以修改配置为 pages_scan = 20000; sleep_millisecs = 20 (crazy!)

实验结果显示:



pages_shared是指KSM正在使用的内存,这里是443355个page,因为getconf PAGESIZE = 4096;  因此 443355*6096/1024/1024/1024 = 1.7G

同时,节约的内存容量也就是page_sharing = 26704343 * 4096/1024/1024/1024 = 101GB. 也就是说KVM给我们节省了101GB大小的内存空间。

查看系统内存使用情况:



这个地方有些不太明白,明明Dell的内存是128G 这里total怎么成128M了?。。。谁来解释下。

Reference :

[1] http://prefetch.net/blog/index.php/2009/12/04/2-6-32-linux-kernel-virtualization-memory-de-duplication/

[2] http://www.ibm.com/developerworks/cn/linux/l-cn-kvm-mem/index.html

[3] http://serverascode.com/2012/11/11/ksm-kvm.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  KVM 虚拟内存