• 大页(Huge Page)简单介绍


     

    x86(包括x86-32x86-64)架构的CPU默认使用4KB大小的内存页面(getconf PAGESIZE),但是它们也支持较大的内存页,如x86-64系统就支持2MB大小的大页(huge page)

    Linux 2.6及以上的内核都支持huge page

    如果在系统中使用了huge page,则内存页的数量会减少,从而需要更少的页表(page table)约了页表所占用的内存数量,并且所需的地址转换也减少了,TLB缓存失效的次数就减少了,从而提高了内存访问的性能

    另外,由于地址转换所需的信息一般保存在CPU的缓存中,huge page的使用让地址转换信息减少,从而减少了CPU缓存的使用,减轻了CPU缓存的压力,让CPU缓存能更多地用于应用程序的数据缓存,也能够在整体上提升系统的性能

    在KVM中,也可以将huge page的特性应用到客户机中:

    qemu-kvm 就提供了"-mempath FILE"参数选项用于使用huge page

    另外,还有一个参数"-mem-prealloc"可以让宿主机在启动客户机时就全部分配好客户机的内存,而不是在客户机实际用到更多内存时才按需分配。

    -mem-prealloc 必须在有"-mem-path" 参数时才能使用

    提前分配好内存的好处是客户机的内存访问速度更快,缺点是客户机启动时就得到了所有的内存,从而让宿主机的内存很快减少(而不是根据客户机的需求而动态调整内存分配)。

    通过在宿主机中的如下几个操作让客户机使用huge page

    (1)检查宿主机目前状态,检查默认的内存大小和内存使用情况,如下:

    getconf  PAGESIZE

    cat  /proc/meminfo

     

    (2)(在宿主机中)挂载hugetlbfs文件系统,命令为:

    "mount  -t hugetlbfs  hugetlbfs  /dev/hugepages",

    如下:

    mount  -t hugetlbfs  hugetlbfs  /dev/hugepages

    mount|grep  huge

    ( 3 )设置(在宿主机中设置允许虚拟机使用的)hugepage的数量,命令为"sysctl vm.nr_hugepages=num", 如下:

     

    ( 4 )启动客户机让其使用hugepage的内存,使用"-mem-path" 参数,如下:

    qemu-system-x86_64  -m 1024  -smp 2  /opt/cs-01.img  -mem-path /dev/hugepages

    ( 5 )查看宿主机中huge page的使用情况,可以看到"HugePages_Free"数值减少,因为客户机使用了一定数最的hugepage。

    在如下的输出中,"HugePages_Free"数值的减少没有512(512*2MB=1024MB)那么多,这是因为启动客户机时并没有实际分配1024MB内存,qemu-kvm命令行中加上前面提到的"-mem-prealloc"参数就会让meminfo文件中"HugePages_Free"的数量减少和分配给客户机的一致

     

    至此,如果在客户机中运行的应用程序(典型的应用为oracle数据库)具备使用huge page的能力,那么就可以在客户机中使用huge page带来性能的提升

    总的来说,对于内存访问密集型的应用,在KVM客户机中使用huge page是可以较明显地提高客户机性能的,不过,它也有一个缺点,使用huge page的内存不能被换出(swap out),也不能使用ballooning方式自动增长

  • 相关阅读:
    路由器实验之配置实验、直连路由验证、静态路由
    RIP路由选择实验
    多线程编程核心技术(十五)CountDownLatch和CyclicBarrier
    maven新建项目时的Run配置
    archetypeCatalog=internal
    Archetype插件的介绍和使用
    maven POM中的source和target编译参数是什么意思
    什么是IOC?
    什么是POJO?
    @SpringBootConfiguration注解
  • 原文地址:https://www.cnblogs.com/wyzhou/p/9596575.html
Copyright © 2020-2023  润新知