一 大页内存功能概述
什么是大页内存?
简单来说就是通过增大操作系统页的大小来减小页表,从而避免快表缺失。
大页内存简单来说就是给虚拟机分配连续的内存,使得虚拟机访问内存的速度增加。
大页内存,就是其内存页比标准内存内存页更大,这能够减少页表的数量,提高内存访问速率,同时分配给虚拟机的内存地址为连续性的,提高内存性能。
大页内存作用是:
对特定应用开启大页内存能提升虚拟机的性能,但开启此选项会导致虚拟机的内存预分配,开启大页内存后,虚拟机的内存回收机制将会被关闭,优先保障内存使用,提高业务性能。
主要应用场景
主要运用于运行内存密集型业务的虚拟机。比如对于运行数据库系统的虚机,采用HugePages后,可提升数据库的整体性能(约提升20%)并有效减少性能抖动。
对数据库等消耗内存超过32GB的系统推荐开启大页内存,普通虚拟机默认不开启。
内存的基本概念:
为了提高地址变换速度,可在地址变换机构中,增设一个具有并行查找能力的特殊高速缓存,也即快表 (TLB: 页表寄存器缓冲),用以存放当前访问的那些页表项。由于成本的关系,快表不可能做得很大,通常只存放16~512个页表项。
为什么需要大页内存
在 Linux操作系统上运行内存需求量较大的应用程序时,由于其采用的默认页面大小为4KB,因而将会产生较多 TLB Miss 和缺页中断,从而大大影响应用程序的性能。当操作系统以2MB 甚至更大作为分页的单位时,将会大大减少 TLB Miss和缺页中断的数量,显著提高应用程序的性能。这也正是 Linux 内核引入大页面支持的直接原因。
TLB的存储极限时,就会发生TLB miss,之后,OS就会命令CPU去访问内存上的页表。如果频繁的出现TLB miss,程序的性能会下降地很快。为了让TLB可以存储更多的页地址映射关系,我们的做法是调大内存分页大小
二 大页内存实现原理
如何让guest使用HugePages?
host开启HugePages。那么,如何开启host HugePages? 很简单,先mount一个hugetlbfs文件系统: mount -t hugetlbfs hugetlbfs /dev/HugePagess,然后HugePages保留一定数量的内存,比如: sysctlvm.nr_HugePagess=2048。设置完host之后,再给qemu加上相关的启动参数即可。
比如:
-object memory-backend-file,id=mem,size=2048M,mempath=/dev/hugepages,share=on
大页内存虚拟机启动过程
3 大页内存操作步骤跟注意事项
|