虚拟机使用内存大页
使用内存大页的好处是能保证虚拟机的所有内存在Host上始终以大页形式存在,并且保证连续的物理内存,可以有效减少TLB Miss,显著提升内存访问密集型业务的性能。在虚拟机使用内存大页的场景下,通过关闭透明大页(参见关闭透明大页),可以减少Host侧的开销,使得虚拟机可以获得更稳定的性能。
不同操作系统对于内存大页的单位设置存在差异,通常将内存大页设置为1GB,而本文提及的CentOS 7.6则将内存大页设置为512MB。在虚拟化环境中配置内存大页时,至少要预留总内存的15%给Host使用。
- 在Host侧查看各个NUMA节点上的大页分配情况。
1
cat /sys/devices/system/node/node*/meminfo | grep Huge
如果HugePages显示信息为0,说明此时系统没有配置内存大页。
- 配置虚拟机使用512MB内存大页。
KVM虚拟化场景下,配置内存大页时,至少要预留总内存的15%给Host。
以4U8G规格配置虚拟机为例,先在Host侧分配300个512MB内存大页。
- CentOS
- 对于CentOS 7.6操作系统,编辑“/boot/efi/EFI/centos/grub.cfg”。
1
vi /boot/efi/EFI/centos/grub.cfg
- 在Linux行输入以下配置。
1
default_hugepagesz=512M hugepagesz=512M hugepages=300
如下所示:
- 对于CentOS 7.6操作系统,编辑“/boot/efi/EFI/centos/grub.cfg”。
- openEuler
- 对于openEuler-20.03-LTS-SP1操作系统,编辑“/etc/grub2-efi.cfg”。
1
vi /etc/grub2-efi.cfg
- 在Linux行输入以下配置。
1
default_hugepagesz=512M hugepagesz=512M hugepages=256 pci=realloc
如下所示:
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 对于openEuler-20.03-LTS-SP1操作系统,编辑“/etc/grub2-efi.cfg”。
- CentOS
- 重启服务器。
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~node3)配置了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 10 11 12 13 14 15 16 17 18 19 20
<domain type = 'KVM'> ... <memory unit='KiB'>8388608</memory> <currentMemory unit='KiB'>83886088</currentMemory> <memoryBacking> <hugepages/> </memoryBacking> <vcpu placement = 'static' cpuset='12-15'>4</vcpu> <cputune> <vcpupin vcpu='0' cpuset='12'/> <vcpupin vcpu='1' cpuset='13'/> <vcpupin vcpu='2' cpuset='14'/> <vcpupin vcpu='3' cpuset='15'/> <emulatorpin cpuset='12-15'/> </cputune> <numatune> <memory mode='strict' nodeset='0'/> </numatune> ... </domain>
父主题: 虚拟化调优