按标签归档:虚拟化

KVM:Huge Page 回收内存

本篇继续是KVM的软文,XD! Huge Page,巨页是一个很热门的话题,很多大型服务器软件都逐步开始支持使用巨页以减轻内存的开销。在Fedora 12之际,KVM也引入了Huge Page,以增强KVM的性能。 援引自KVM Huage Page Backed Memory的简介,x86 CPU通常使用用4KB页面放置内存,但实际上它们有能力使用巨页完成这个任务(x86_32可以使用4MB页面,x86_64和x86_32 PAE可以使用2MB的页面)。通过把巨页应用在KVM Guest的内存上,页表会使用更少的内存和TLB损耗也会被减少,从而提升了KVM的性能。在KVM Guest的内存上使用巨页确实会有缺点,然而你不再需要交换和Balloon Guest的内存。 应用Huge Page十分简单,首先挂在hugetlbfs文件系统: mount -t hugetlbfs hugetlbfs /dev/hugepages 通过sysctl保留内存给巨页使用,需要搞清楚的这里设定的数字并不是真正的内存容量,而是巨页数量。对应的关系是1 hugepage=2MB RAM,比如: sysctl vm.nr_hugepages=768 此时系统会划分1536MB内存给巨页使用。然后启动qemu-kvm的时候添加-mem-path/dev/hugepages参数。比如: qemu-kvm -m 1024 -drive file=test.img -mem-path /dev/hugepages 使用libvirt和virt-manager管理的KVM虚拟机同样可以巨页,把以下内容加入到/etc/libvirt/qemu虚拟机对应的xml配置文件即可: <memoryBacking> <hugepages/> </memoryBacking> 本人简单地测试了使用巨页和不使用巨页的性能差别,在Windows … 继续阅读

分类:Linux, 虚拟化 | 标签:, , | 2 条评论

KVM-ON-KVM:Nested Virtualization

早前听Fai Wong (lazyfai)说起过KVM可以支持AMD SVM的nested virtualization,凭借着好奇心就折腾来玩玩。nested virtualization有不少学问值得探讨的,这里得感谢lazyfai为本人解答了。 在介绍KVM-ON-KVM前,本人得先说清楚nested paging和nested virtualization 的区别。因为本人在Google搜索KVM的nested virtualization发现很多是关于nested paging,但是实际上两者完全是两码事。还有很多老外都搞不清楚nested virtualization和nested paging,常常以为前者就是后者。 Nested Virtualization:实际就是在一个正在运行的虚拟机内安装多一个虚拟机,并且使之运行,有时也称之为 Nested VMs。 Nested Paging: 其作用就是为了把Guest的内存地址直接映射至Host的系统内存地址上,让CPU能够像读取实体系统的内存地址一样可以直接读取虚拟系统的内存地址。这种方案可以减轻了VMM因为内存地址转换的负担,提升内存读写性能。 从原理上说Nested Paging和Nested Virtualization是毫不相干的,所以本篇文章不会探讨前者。 Nested Virtualization并非KVM一家独有的技术,VMware的虚拟化软件同样支持Nested Virtualization,但是其技术无法无限地Nested下去。其第一层虚拟机必须使用VT-x/AMD-V硬件辅助虚拟化技术,而第二层虚拟机则必须使用传统的二进制软件转换的虚拟化技术。因此无法再运行第三层甚至更多层虚拟机。 相反KVM必须使用硬件辅助虚拟化技术,理论上可以无限地Nested下去,只要机器有足够的速度。KVM的Nested Virtualization暂时只能应用于AMD的处理器上,只要支持AMD-V虚拟化技术,就可以运行Nested Virtualization,包括老旧的K8架构,这与Nested Paging必须运行在K10架构上不同。从qemu-kvm的帮助选项上看出此特性紧限于AMD处理器。至于Intel的处理器什么时候支持Nested Virtualization,KVM说正在做,但是做了很久都还没有突破性消息。 -enable-nesting   enable support for running a VM … 继续阅读

分类:Linux, 虚拟化 | 标签:, , , | 1 条评论

简谈VirtualBox 3.2 hypervisor新特性

VirtualBox 3.2已经发布了一段日子了,第一个维护版本VirtualBox 3.2.2也发布了,稳定性又往上提高了一点。这一次VirtualBox大升级似乎没有带来多少新桌面特性,最大的变化就是增加了多头显示和SAS磁盘控制器,更多的变化就看不出来了。实际上,VirtualBox做了很多很细微很底层的改进,为hypervisor增加了大量新特性,这些特性的好处显然是难以让用户发现的。本文借此机会,特意介绍VirtualBox 3.2 hypervisor的新特性。 一、Memory Ballooning Memory Balllooning是一种可加可减的内存机制,让用户自行动态地调节虚拟机内存量。这个特性必须在 VirtualBox 里安装了Guest Addition才能用。当用户请求虚拟机进行Memroy Ballooning的时候,Guest就会自动把系统内存的划出需要Balloon的内存量,返回给hypervisor保存备用,分给新启动的Guest使用。而这部分的内存量,Guest里的操作系统是不能再调用的。因此实际上Guest突然会增加了内存的使用量,这部分的大小和Balloon的内存量是一致的,然而这部分的内存并不属于系统内任何一个进程,只是被Balloon驱动预留起来。因为Host不再需要为新的Guest划分完整的内存容量,而是调用原来Guest Balloon的内存,所以从内存上也节省了。需要说明一点的是,VirtualBox的Memory Ballooning和其他大多数虚拟机一样并没有把Balloon的内存返回到Host,都是放在hypervisor上。所以在启动Guest以后Balloon内存是看不到Host的内存用量减少,除非是启动了第二个Guest。据我所知,暂时只有KVM是把Balloon的内存返回给Host,这可能是因为KVM是在内核里面的缘故吧。 默认情况下,Guest的Memory Ballloon是设为0的,如果需要Balloon的话,则可以打开终端输入以下命令: VBoxManage controlvm “vm name” guestmemoryballoon n vmname是虚拟机的名称,n是Balloon的内存量,以MB为单位。 如果想每次开机都默认Balloon一定量的内存,则可以在虚拟机关机的情况下使用以下命令: VBoxManage modifyvm “vmname” –guestmemoryballoon n 此时虚拟机启动后,所在进程的内存耗费量将会大减。该进程占用的内存是Guest内存总量,减去Balloon的内存量,加上Guest的显存量,加上少量VMM占用的内存量。如果想关闭Ballon,则把Balloon内存的数量设置为0就可以了。 最后补充一点,VirtualBox并不是动态自动调节Balloon内存的数量,这是需要用户自行手动调整的。此外,Memory Ballooning只能在64位Host上使用。 二、Page Fusion Page Fusion也是VirtualBox 3.2的一大特性之一, 目的是运行多个相同操作系统的Guest时减轻内存页面的负担。这个特性在商业级别的虚拟机很常见,但在桌面级的虚拟机还是第一次出现。很明显,VirtualBox是冲着VDI领域而来的。一般虚拟机会把这个特性称之为Same Page … 继续阅读

分类:虚拟化 | 标签:, , | 6 条评论