一、操作系统设置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启动虚拟机可能存在以下问题:

  1. 启动虚拟机时无权限访问大页内存的目录
    • 问题原因:libvirt用来启动qemu进程的用户没有权限访问挂载的大页内存目录
    • 解决办法:修改/etc/libvirt/qemu.conf,把user和group都改成root

参考:

https://libvirt.org/formatdomain.html#elementsMemoryBacking
https://www.mjmwired.net/kernel/Documentation/vm/hugetlbpage.txt



linux   kvm      linux kvm hugepage

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!