虚拟机使用内存大页
目的
使用内存大页能保证虚拟机的所有内存在Host上始终以大页形式存在,并且保证物理连续,可以有效地减少TLB Miss,显著提升内存访问密集型业务的性能。
方法
- 在Host侧查看各个NUMA节点上的大页分配情况。
1
cat /sys/devices/system/node/node*/meminfo | grep Huge
如果HugePages显示信息为0,说明此时系统没有配置内存大页。
- 配置虚拟机使用512MB内存大页。
KVM虚拟化场景下,配置内存大页时,至少要预留总内存的15%给Host。
以在openEuler 20.03 LTS SP1下配置4U8G规格的虚拟机为例,先在Host侧分配300个512MB内存大页。
- 打开“/etc/grub2-efi.cfg”文件。
1
vi /etc/grub2-efi.cfg
- 在Linux字段一行的最后输入以下配置。
1
default_hugepagesz=512M hugepagesz=512M hugepages=256 pci=realloc
如下图所示:
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 打开“/etc/grub2-efi.cfg”文件。
- 重启服务器。
1
reboot
- 重新进入操作系统后,确定内存大页配置情况。
1
cat /proc/sys/vm/nr_hugepages
- 在Host侧查看各个NUMA节点上的大页分配情况。
1
cat /sys/devices/system/node/node*/meminfo | grep Huge
此时各个NUMA节点的HugePages显示信息为75,说明此时系统已为各个NUMA节点(numa0~numa3)配置了75个512MB内存大页。
- 如果需要查看某个NUMA节点上的大页配置情况,可以执行如下命令。这里以node0为例:
1 2
cat /sys/devices/system/node/node0/hugepages/hugepages-524288kB/nr_hugepages cat /sys/devices/system/node/node0/hugepages/hugepages-524288kB/free_hugepages
- nr_hugepages显示信息为75,说明此时系统为该NUMA节点配置了75个512MB内存大页。
- free_hugepages显示信息为75,说明此时系统剩余75个512MB内存大页。
- 确定hugetlbfs是否已经挂载。
1
mount | grep hugetlbfs
如下回显信息表示hugetlbfs已经挂载。
- 虚拟机配置大页内存。虚拟机xml文件的配置参考如下。
1 2 3 4 5 6 7 8 9
<domain type = 'KVM'> ... <memory unit='KiB'>8388608</memory> <currentMemory unit='KiB'>83886088</currentMemory> <memoryBacking> <hugepages/> </memoryBacking> ... </domain>
父主题: 虚拟机调优