调整内存页大小
原理
TLB(Translation lookaside buffer)为页表(存放虚拟地址的页地址和物理地址的页地址的映射关系)在CPU内部的高速缓存。TLB的命中率越高,页表查询性能就越好。
TLB的一行为一个页的映射关系,也就是管理了一个页大小的内存:
TLB管理的内存大小 = TLB行数 x 内存的页大小。
同一个CPU的TLB行数固定,因此内存页越大,管理的内存越大,相同业务场景下的TLB命中率就越高。
ARMv8平台一般设置PAGE SIZE 64KB,可以提升TLB命中率。
验证方法
- 执行以下命令查看内存页大小,默认显示数值单位是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内核编译选项,并重新编译。
- 执行以下命令重新编译。
make menuconfig
- 选择PAGESIZE大小为64K。
Kernel Features-->Page size(64KB)
- 编译和安装内核。
父主题: 系统基线化调优