简介
x86(包括x86-32和x86-64)架构的CPU默认使用4KB大小的内存页面(getconf PAGESIZE),但是它们也支持较大的内存页,如x86-64系统就支持2MB/1GB大小的大页(huge page)。
Linux 2.6及以上的内核都支持huge page
如果在系统中使用了huge page,则内存页的数量会减少,从而需要更少的页表(page table),节约了页表所占用的内存数量,并且所需的地址转换也减少了,TLB缓存失效的次数就减少了,从而提高了内存访问的性能。
另外,由于地址转换所需的信息一般保存在CPU的缓存中,huge page的使用让地址转换信息减少,从而减少了CPU缓存的使用,减轻了CPU缓存的压力,让CPU缓存能更多地用于应用程序的数据缓存,也能够在整体上提升系统的性能。
虚拟机中使用 hugepage
在KVM中,也可以将huge page的特性应用到客户机中:
创建 hugetlbfs 挂载点,qemu-kvm 就提供了"-mem-path FILE"参数选项用于使用huge page
还有 "-mem-prealloc"参数, 虚拟机启动时,物理机就会将全部内存分配给虚拟机。不是按需分配。此参数必须在有 "-mem-path" 参数时才能使用。
创建大页
[root@localhost stream]# free -h
total used free shared buff/cache available
Mem: 7.8G 411M 6.4G 48M 1.0G 7.1G
Swap: 7.9G 158M 7.7G
[root@localhost stream]# echo 3 > /proc/sys/vm/drop_caches
[root@localhost stream]# echo 3 > /proc/sys/vm/drop_caches
[root@localhost stream]# free -h
total used free shared buff/cache available
Mem: 7.8G 410M 7.3G