大页内存技术

本文是一个介绍大页内存在KVM虚拟化中的实践方法,内容比较简略,以实用为主。后续再补充详细技术文档。

大页内存(Huge Page)也称为hugetlbpage,是采用大内存块,可以提高虚拟机的性能。

在Linux x86_64系统中,大页内存的块大小是2048kB,也就是2MB。当需要分配给虚拟机大页内存,则将需要分配的内存大小除以2,就是需要保留的大页内存块数量。

注意:针对大页内存,当前有两种技术,一种是本文所介绍的hugetlbpage,另一种称为透明大页(Transparent Hugepage)。有关透明大页,请参考透明大页内存技术,在Red Hat Enterprise Linux 6/7上默认启用了透明大页支持。

注意

为客机启用 1GB 大页面

Red Hat Enterprise Linux 7.1 系统支持 2MB 或 1GB 大页面,分配将在启动或运行时进行。页面大小均可以在运行时被释放。例如,在启动时分配 4 个 1GB 的大页面和 1,024 个 2MB 的大页面。使用以下命令行:

'default_hugepagesz=1G hugepagesz=1G hugepages=4 hugepagesz=2M hugepages=1024'

大页可以在运行时分配。运行时分配允许系统管理员选择从何种NUMA模式分配页面。但是由于内存碎片原因,运行时页面分配会比启动时分配更容易造成分配失败。

  • 以下在运行时从 node1 分配 4 个 1G 的大页,以及从 node3 分配 1024 个 2MB 的大页:

# echo 4 > /sys/devices/system/node/node1/hugepages/hugepages-1048576kB/nr_hugepages
# echo 1024 > /sys/devices/system/node/node3/hugepages/hugepages-2048kB/nr_hugepages
  • 然后将 2MB 和 1GB 的大页面挂载到主机:

# mkdir /dev/hugepages1G
# mount -t hugetlbfs -o pagesize=1G none /dev/hugepages1G
# mkdir /dev/hugepages2M
# mount -t hugetlbfs -o pagesize=2M none /dev/hugepages2M
  • 重启 libvirtd ,使得 1GB 大页面可以在客户机上启用:

# systemctl restart libvirtd

注意,现在1GB大页面现在对客机不可用。

向多个客户机NUMA节点指定主机大页面

参考 8.4.9 节 “向多个客机 NUMA 节点指定主机大页面”

参考

Last updated