page_size
众所周知,Linux Kernel 管理物理内存的基本单位是页,默认页大小为 4KB, 即用户空间的每触发一次 Page Fault 进入内核空间,只能映射 4KB 物理内存。
页大小是固定 4KB 吗?当然不是,也支持设置 16/64KB 的页大小,相当于 用户空间的每触发一次 Page Fault 进入内核空间,映射 16/64KB 物理内存。 如 ARM64 只需配置如下(三选一):
是不是页大小越大越好?当然也不是,虽然页大小越大,会明显降低 Page Fault 的次数,提升 TLB Hit 命中率,但是浪费的内存也是越多。比如,当页大小为 4KB 时,使用 3KB 内存,只是浪费 1KB 内存。但是当页大小为 16/64KB 时, 使用 3KB 内存,却浪费 13/61KB 内存。
在现在大内存场景下,无论服务器还是手机的内存越来越大,很多应用程序 一次申请内存都是大于 4KB,所以我们需要降低 Page Fault 的次数,提升 TLB Hit 命中率,同时不会浪费越多内存。
需要如何破冰?答案:small-sized THP
,页大小还是 4KB,但是支持触发 一次 Page Fault 进入内核空间,来映射 4/16/32//64KB 物理内存。这样 达到降低 Page Fault 的次数,提升 TLB Hit 命中率,同时不会浪费越多内存。
Last updated
Was this helpful?