我一直在走,至少还有条路,也好于无路可走…
分类: LINUX
2014-03-09 12:50:41
大页(Huge Page)
X86( 包括x86-32和x86-64)j架构的cpu默认使用4k大小的内存页面,但是它们也支持较大的内存页,如:x86-64系统就支持2MB大小的大页(huge page),linux2.6以及以上内核都支持huge page 。如果在系统中使用了huge page ,则内存页的数量就是减少,从而要更少的页表,节约了页表所占用的内存数量,并且所需的地址转换,也减少了,TLB缓存失效的次数就减少了,从而提高了内存访问的性能,另外,由于地址转换所需的信息,一般保存在cpu的缓存中,huge page 的使用让地址转换信息减少,从而减少了cpu缓存的使用,减轻了cpu缓存的压力,让cpu缓存能更多地用于应用程序的数据缓存,也能够在整体上提示系统的性能。
在kvm中,也可以将huge page 的特性应用到客户机中,qemu-kvm 就提供了“-mem-path FILE” 参数选项用于使用huge page 。另外,还有一个参数“-mem-prealloc” 可以让宿主机在启动客户机时就全部分配好客户机的内存,而不是在客户机实际上用到的更多内存时才按需分配。-mem-prealloc 必须在有“-mem-path” 参数时才能使用。
优点:提前分配好内存的好处是客户机的内存访问速度更快
缺点:客户机启动时就得到了所有内存,从而让宿主机的内存很快减少(而不是根据客户机的需求而动态调整内存配置)
可以通过宿主机的如下几个操作让客户使用huge page
1.检查宿主机目前状态,检查默认内存大小,和内存使用情况
[root@localhost Desktop]# getconf PAGESIZE
[root@localhost Desktop]# cat /proc/meminfo
2.挂载hugetlbfs文件系统,命令为“mount -t hugetlbfs hugetlbfs /dev/hugepages”
[root@localhost Desktop]# mount -t hugetlbfs hugetlbfs /dev/hugepages
[root@localhost Desktop]# mount
3.设置hugepage 的数量,命令为“sysctl vm.nr_hugepages=1024”#注释:尽量给大点太小报错
[root@localhost Desktop]# sysctl vm.nr_hugepages=1024
[root@localhost Desktop]# cat /proc/meminfo # 查看是否生效
4.启动客户机让其使用hugepage 的内存,使用“-mem-path”参数
[root@localhost Desktop]# qemu-system-x86_64 -m 512 -smp 1 /kvm/rhel6u3.img -mem-path /dev/hugepages/
Free内存在随着客户机的启动而减小
libvirt方式,先让libvirtd进程使用hugepages空间,然后再分配给虚拟机
[root@localhost ~]# mkdir /dev/hpages #创建挂载大页的目录
[root@localhost ~]# mount -t hugetlbfs hugetlbfs /dev/hpages/ #挂载大页
[root@localhost ~]# mount |grep -i huge #查看挂载情况
[root@localhost dev]# cat /proc/meminfo |grep -i hugepages
[root@localhost Desktop]# sysctl vm.nr_hugepages=1024
安装libvirt
[root@localhost hpages]# yum install libvirt
[root@localhost hpages]# service libvirtd restart #启动libvirtd
[root@localhost hpages]# cd /dev/hpages/
[root@localhost hpages]# ls
启动虚拟机,使用大页
[root@localhost ~]# qemu-system-x86_64 -m 512 /kvm/rhel6u3.img -mem-path /dev/hpages/
[root@localhost hpages]# cat /proc/meminfo |grep -i hugepages #free内存慢慢减少