理解 Arm64 上的内存页面大小

主要观点:

  • 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 内核的页大小设置。
阅读 30
0 条评论