鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

调整内存页大小

原理

TLB(Translation lookaside buffer)为页表(存放虚拟地址的页地址和物理地址的页地址的映射关系)在CPU内部的高速缓存。TLB的命中率越高,页表查询性能就越好。

TLB的一行为一个页的映射关系,也就是管理了一个页大小的内存:

TLB管理的内存大小 = TLB行数 x 内存的页大小。

同一个CPU的TLB行数固定,因此内存页越大,管理的内存越大,相同业务场景下的TLB命中率就越高。

ARMv8平台一般设置PAGE SIZE 64KB,可以提升TLB命中率。

验证方法

  1. 执行以下命令查看内存页大小,默认显示数值单位是B。
    getconf -a | grep PAGESIZE

    输出结果样例如下所示。

    PAGESIZE       65536

使用方法

修改前后可以执行以下命令观察TLB的命中率($PID为进程ID):

perf stat -p $PID -d -d -d

输出结果包含如下信息,其中1.21%和0.59%分别表示数据的miss率和指令的miss率。

1,090,788,717      dTLB-loads                #  520.592 M/sec
13,213,603      dTLB-load-misses          #    1.21% of all dTLB cache hits
669,485,765      iTLB-loads                #  319.520 M/sec
3,979,246      iTLB-load-misses          #    0.59% of all iTLB cache hits

如果PAGESIZE大小不为64KB,需要修改Linux内核编译选项,并重新编译。

  1. 执行以下命令重新编译。
    make menuconfig
  2. 选择PAGESIZE大小为64K。

    Kernel Features-->Page size(64KB)

  3. 编译和安装内核。