开发者
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

大页内存配置

大页内存介绍

在页式虚拟存储器中,会把虚拟存储空间和物理主存空间都分割为一个个固定大小的页,为线程分配内存也是以页为单位。比如:页的大小为 4K,那么 4GB 存储空间就需要 4GB/4KB=1M 条记录,即有 100 多万个 4KB 的页。如果页太小了,那么就会产生大量的页表条目,降低了查询速度的同时还浪费了存放页面的主存空间;但如果页太大了,又会容易造成浪费,原因就跟段式存储管理方式一样。所以 Linux 操作系统默认的页大小就是 4KB,可以通过指令查看:

$ getconf PAGE_SIZE  
4096

但在某些对性能要求非常苛刻的场景中,页面会被设置得非常的大,比如:2MB、1GB、甚至几十 GB,这些页被称之为 “大页”(Huge Page)。

大页能够提升性能的主要原因有以下几点:

  • 减少页表条目,加快检索速度。
  • 提升 TLB 快表的命中率,TLB 一般拥有 16 ~ 128 个条目空间,也就是说当大页为 1GB 的时候,TLB 能够对应 16GB ~ 128GB 之间的存储空间。

大页内存配置步骤

大页内存配置需要连续的内存空间,可以在Linux中动态配置大页内存,实现实时开关,整体步骤如下。

  1. 查看Linux默认的大页内存配置大小。openEuler有2MB、1GB两种大页内存配置,默认为2MB大页内存,若需要修改大页内存为1GB配置需重编OS内核,当前配置均以2MB大页内存进行示例。
    $ grep -i hugepagesize /proc/meminfo 
    Hugepagesize:       2048 kB
  2. 查看 Linux 操作系统是否启动了大页内存,如果 HugePages_Total 为 0,意味着 Linux 没有设置或没有启用 Huge pages。

    当前鲲鹏920专业版上每个节点共2个CPU,每个CPU 8个NUMA,共16个NUMA。每个NUMA有32GB DDR内存和4GB 片上内存,可通过numastat -m命令查看节点信息,可以看到Node 0-15即为NUMA的DDR内存情况,Node 16-31为NUMA的片上内存情况。各Node下“HugePages_Total”为大页内存大小,可以看到均为空

                              Node 0          Node 1          Node 2          Node 3 
                     --------------- --------------- --------------- --------------- 
    MemTotal                31376.38        32250.62        32250.62        32250.62 
    MemFree                 26903.30        27613.54        31664.97        31624.89 
    MemUsed                  4473.07         4637.07          585.65          625.73 
    Active                    137.05          120.04            6.26            6.46 
    Inactive                 2128.45         2102.39           15.93           71.89 
    Active(anon)              137.05          119.78            6.25            6.39 
    Inactive(anon)           2127.74         2101.00           14.87           70.76 
    Active(file)                0.00            0.27            0.01            0.06 
    Inactive(file)              0.71            1.39            1.07            1.14 
    Unevictable                 0.00            0.00            0.00            0.00 
    Mlocked                     0.00            0.00            0.00            0.00 
    Dirty                       0.00            0.00            0.00            0.00 
    Writeback                   0.00            0.29            0.15            0.38 
    FilePages                2203.80         2185.45            9.27            9.66 
    Mapped                    357.91          293.75          239.99          211.84 
    AnonPages                  61.55           37.23           11.53           67.19 
    Shmem                    2202.66         2183.79            8.20            8.46 
    KernelStack                17.89            5.08            4.95            5.38 
    PageTables                  0.25            0.80            0.00            0.46 
    NFS_Unstable                0.00            0.00            0.00            0.00 
    Bounce                      0.00            0.00            0.00            0.00 
    WritebackTmp                0.00            0.00            0.00            0.00 
    Slab                      563.59         1289.68           39.69           51.61 
    SReclaimable                3.46            7.61            6.14            9.29 
    SUnreclaim                560.13         1282.07           33.55           42.32 
    AnonHugePages               0.00          156.00           20.00          248.00 
    ShmemHugePages              0.00            0.00            0.00            0.00 
    ShmemPmdMapped              0.00            0.00            0.00            0.00 
    HugePages_Total             0.00            0.00            0.00            0.00 
    HugePages_Free              0.00            0.00            0.00            0.00 
    HugePages_Surp              0.00            0.00            0.00            0.00 
    KReclaimable                3.46            7.61            6.14            9.29 
    ...
    ...
    ...
                             Node 16         Node 17         Node 18         Node 19 
                     --------------- --------------- --------------- --------------- 
    MemTotal                 4096.00         4096.00         4096.00         4096.00 
    MemFree                  4096.00         4096.00         4096.00         4096.00 
    MemUsed                     0.00            0.00            0.00            0.00 
    Active                      0.00            0.00            0.00            0.00 
    Inactive                    0.00            0.00            0.00            0.00 
    Active(anon)                0.00            0.00            0.00            0.00 
    Inactive(anon)              0.00            0.00            0.00            0.00 
    Active(file)                0.00            0.00            0.00            0.00 
    Inactive(file)              0.00            0.00            0.00            0.00 
    Unevictable                 0.00            0.00            0.00            0.00 
    Mlocked                     0.00            0.00            0.00            0.00 
    Dirty                       0.00            0.00            0.00            0.00 
    Writeback                   0.00            0.00            0.00            0.00 
    FilePages                   0.00            0.00            0.00            0.00 
    Mapped                      0.00            0.00            0.00            0.00 
    AnonPages                   0.00            0.00            0.00            0.00 
    Shmem                       0.00            0.00            0.00            0.00 
    KernelStack                 0.00            0.00            0.00            0.00 
    PageTables                  0.00            0.00            0.00            0.00 
    NFS_Unstable                0.00            0.00            0.00            0.00 
    Bounce                      0.00            0.00            0.00            0.00 
    WritebackTmp                0.00            0.00            0.00            0.00 
    Slab                        0.00            0.00            0.00            0.00 
    SReclaimable                0.00            0.00            0.00            0.00 
    SUnreclaim                  0.00            0.00            0.00            0.00 
    AnonHugePages               0.00            0.00            0.00            0.00 
    ShmemHugePages              0.00            0.00            0.00            0.00 
    ShmemPmdMapped              0.00            0.00            0.00            0.00 
    HugePages_Total             0.00            0.00            0.00            0.00 
    HugePages_Free              0.00            0.00            0.00            0.00 
    HugePages_Surp              0.00            0.00            0.00            0.00 
    KReclaimable                0.00            0.00            0.00            0.00 
    ...
    ...
    ...
                               Total 
                     --------------- 
    MemTotal               578560.55 
    MemFree                555020.91 
    MemUsed                 23539.65 
    Active                    363.48 
    Inactive                 6470.92 
    Active(anon)              362.12 
    Inactive(anon)           6453.55 
    Active(file)                1.35 
    Inactive(file)             17.36 
    Unevictable               128.20 
    Mlocked                   128.20 
    Dirty                       0.21 
    Writeback                   4.21 
    FilePages                4754.86 
    Mapped                   3560.32 
    AnonPages                2200.26 
    Shmem                    4735.73 
    KernelStack                98.20 
    PageTables                 22.99 
    NFS_Unstable                0.00 
    Bounce                      0.00 
    WritebackTmp                0.00 
    Slab                     3117.82 
    SReclaimable              188.76 
    SUnreclaim               2929.06 
    AnonHugePages            3048.00 
    ShmemHugePages              0.00 
    ShmemPmdMapped              0.00 
    HugePages_Total             0.00 
    HugePages_Free              0.00 
    HugePages_Surp              0.00 
    KReclaimable              188.76
  3. 开启大页内存
    #!/bin/bash 
    for i in {0..31}   
    do 
      # 开启2000个大页2MB大页 
      echo 2000 > /sys/devices/system/node/node$i/hugepages/hugepages-2048kB/nr_hugepages 
    done
  4. 查看大页内存
    $ numastat -m | grep  HugePages_Total 
    HugePages_Total             0.00         4000.00         4000.00         4000.00         4000.00         4000.00         4000.00         4000.00         4000.00         4000.00         4000.00         4000.00         4000.00         4000.00         4000.00         4000.00         4000.00         4000.00         4000.00         4000.00         4000.00         4000.00         4000.00         4000.00         4000.00         4000.00         4000.00         4000.00         4000.00         4000.00         4000.00         4000.00       124000.00
  5. 关闭大页内存
    #!/bin/bash 
    for i in {0..31} 
    do  
      echo 0 > /sys/devices/system/node/node$i/hugepages/hugepages-2048kB/nr_hugepages 
    done 
     
    # 关闭后查看大页内存情况 
    $ numastat -m | grep  HugePages_Total 
    HugePages_Total             0.00            0.00            0.00            0.00            0.00            0.00            0.00            0.00            0.00            0.00            0.00            0.00            0.00            0.00            0.00            0.00            0.00            0.00            0.00            0.00            0.00            0.00            0.00            0.00            0.00            0.00            0.00            0.00            0.00            0.00            0.00            0.00            0.00