You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下大内存过度提交的mmap会立即创建大量页表项吗?

Linux中mmap大内存区域的页表项分配机制

不会立即创建全部2亿多个4KiB页对应的页表项,Linux靠多级页表的延迟分配+大页表项覆盖的机制来规避这个开销,具体逻辑如下:

  • Linux采用多级页表结构(以x86_64为例,分为PGD、PUD、PMD、PTE四级),当你mmap出1TiB未使用的内存区域时,内核只会创建顶层的少数页表项(比如PGD、PUD、PMD级),这些高等级表项直接覆盖整个大地址范围,不会一次性生成所有对应4KiB页的PTE表项。
  • 只有当你实际访问某个虚拟页时,才会触发缺页异常,此时内核才会为该页创建对应的PTE表项,并映射到共享零页。
  • 此外,内核会自动尝试使用更大粒度的页表项(比如2MiB大页、1GiB巨页),单个大页表项就能覆盖远超4KiB的地址范围——比如一个1GiB的页表项可以替代26万多个4KiB的PTE,大幅降低页表的内存占用和簿记成本。

简单说就是:mmap大内存时,内核只搭好最上层的页表架子,底层细粒度的页表项等实际用到才创建,还会尽量用大页表项覆盖大范围地址,从根源上避免一开始就产生海量页表项的问题。

内容的提问来源于stack exchange,提问作者ajp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 16:04:56