主要观点:
- Arm64 架构与 x86 的不同之一是能在 CPU 的内存管理单元(MMU)中将内存页大小配置为 4K、16K 或 64K。
- 介绍了内存页大小的概念,如何在 Linux 系统上配置页大小,以及在应用中使用不同页大小的意义。
- 较大页大小在数据密集型应用等场景中能提高性能,但也有内存使用效率和 TLB 缓存缺失等方面的权衡。
- 需在不同页大小下对目标工作负载进行基准测试,以确定是否使用较大页大小,还可使用“perf”工具评估。
- 在 Ampere CPUs 上配置较大页大小需运行支持的操作系统内核,不同操作系统有不同的配置方法。
关键信息:
- 操作系统通过页表将物理内存页映射到虚拟内存地址,CPU 利用转换后备缓冲器(TLB)加快内存访问。
- x86 架构的物理内存页大小固定为 4KB,Arm64 系统可配置为 4K、16K 或 64K。
- 数据密集型应用如数据库、虚拟化基础设施等适合使用较大页大小。
- 配置较大页大小需安装相应内核包或修改内核配置文件,不同操作系统的配置方法不同。
重要细节:
- 在 Ampere Altra 等系统上,L1 数据 TLB 有 48 个条目,L2 TLB 有 1280 个条目,4KB 页大小时 L1 TLB 可缓存 192KB 物理内存,L2 可缓存 5MB;64KB 页大小时 L1 可缓存 3MB,L2 可缓存 80MB。
- 可使用“perf”工具测量 TLB 停顿来评估较大页大小的潜在收益,如
perf list | grep end_tlb
查看相关计数器,perf stat -e instructions,cycles,stall_frontend_tlb,stall_backend_tlb./a.out
测量性能。 - 常见 Linux 发行版如 Red Hat Enterprise Linux、Oracle Enterprise Linux 等已包含支持 4K 和 64K 页大小的预构建内核,可通过特定命令安装和设置默认启动。
- 自己构建 Linux 内核时,可使用
menuconfig
或直接修改.config 文件来设置页大小配置选项。 - 可使用
getconf PAGESIZE
验证当前 Linux 内核的页大小设置。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。