一、操作系统设置hugepages
Linux操作系统中需要配置启用hugepage。
1.挂载hugetlbfs文件系统
# mkdir /dev/hugepages
# mount -t hugetlbfs hugetlbfs /dev/hugepages
2.设置内核参数预留内存
# echo 1024 > /proc/sys/vm/nr_hugepages
或者通过sysctl设置:
vm.nr_hugepages=1024
预留得越多,执行以上命令花的时间就越长。
3.查看内存使用情况
# cat /proc/meminfo | grep Huge
HugePages_Total: 1024
HugePages_Free: 1024
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
HugePages_Total: Hugepage的页面数量
HugePages_Free: 剩余的页面数量
HugePages_Rsvd: 被分配预留但是还没有使用的page数目
HugePages_Surp:HugePages_Total减去/proc/sys/vm/nr_hugepages中的值
Hugepagesize: 每单位数量大小,为2048或者10240
使用Hugepages的内存页是不会被交换出去到磁盘的,永远常驻在内存中,所以也减少了内存页交换的额外开销。使用hugepage的内存不能被其他的进程使用,所以,一定要合理设置这个值,避免造成浪费。使用超过8G物理内存的系统,就可以考虑使用HugePage。
HugePages_Free - HugePages_Rsvd部分的内存是浪费的,且不能被其他程序使用。在实际应用中,尽可能让HugePages_Free - HugePages_Rsvd=0
KVM虚拟机配置hugepages
方法一:直接启动qemu添加-mem-path参数
qemu-system-x86_64 -m 2048 -hda /mnt/rhel6.img -mem-path /dev/hugepages
方法二:通过libvirt给虚拟机的domain字段添加配置配置
<memoryBacking>
<hugepages/>
</memoryBacking>
libvirt启动虚拟机可能存在以下问题:
- 启动虚拟机时无权限访问大页内存的目录
- 问题原因:libvirt用来启动qemu进程的用户没有权限访问挂载的大页内存目录
- 解决办法:修改/etc/libvirt/qemu.conf,把user和group都改成root
参考:
https://libvirt.org/formatdomain.html#elementsMemoryBacking
https://www.mjmwired.net/kernel/Documentation/vm/hugetlbpage.txt