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
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 内存虚拟化及其实现
- CentOS7.1 KVM虚拟化之虚拟机内存、CPU调整
- KVM虚拟化内存分配
- KVM 内存虚拟化
- CentOS7.1 KVM虚拟化之虚拟机内存、CPU调整(6)
- [原] KVM 虚拟化原理探究(4)— 内存虚拟化
- KVM 内存虚拟化
- KVM 内存虚拟化及其实现
- openstack 基于kvm 虚拟化的内存分配原理????
- KVM 内存虚拟化
- qemu kvm 内存虚拟化
- KVM 内存虚拟化及其实现
- KVM之内存虚拟化(KVM MMU Virtualization)
- KVM 介绍(2):CPU 和内存虚拟化
- qemu-kvm内存虚拟化原理
- qemu-kvm 设备虚拟化----I/O 端口和 I/O 内存
- kvm内存虚拟化及其实现
- KVM 内存虚拟化及其实现
- 3.1 Qemu KVM内存虚拟化原理
- KVM 内存虚拟化及其实现