跳到主内容
快讯直播
AI智模界
AI 词典

大页内存:把 4KB 的抽屉换成 2MB 的柜子

一句话定义:大页内存(Huge Pages)是让操作系统用比默认 4KB 大得多的单位(常见 2MB,也有 1GB)来管理和映射物理内存的机制。

原理:页变大,地址翻译就变少

程序使用的是虚拟地址,CPU 每次访问内存时,都要先把虚拟地址翻译成物理地址。翻译规则保存在页表(page table)里,而页表本身也在内存中。如果每读取一次数据都要查一遍页表,速度就会很慢。因此 CPU 内部有一个小缓存,叫 TLB(Translation Lookaside Buffer,地址翻译后备缓冲),用来保存最近用过的翻译结果。

可以这样理解:页表是一本很厚的地址对照字典,TLB 是你手边的便签。如果命中便签,就可以直接按记录访问;如果没命中,就要去翻字典,而且字典可能分好几层,翻一层还要再翻下一层,这叫页表遍历(page walk)。

TLB 的条目数由硬件固定,改不了。既然条目数固定,那就让每条记录覆盖更多内存:如果每页 4KB,一千条只能覆盖 4MB;换成每页 2MB,同样一千条就能覆盖 2GB。对大模型推理这类“占几十 GB 内存、访问又很随机”的负载来说,TLB 未命中率会明显下降,省下的就是反复遍历页表带来的访存和延迟。

TLB 未命中拖慢的典型场景包括:KV cache 的随机读写、向量检索里的大表查找、图计算的指针追逐(pointer chasing)、大堆内存的 GC。它通常不会让吞吐下降一半,而是让长尾延迟出现毛刺。

和锁页内存不是一回事

大页内存(Huge Pages)锁页内存(Pinned / Page-locked Memory)
管什么页有多大页能不能被换出、物理地址是否固定
解决什么TLB 覆盖范围小、页表遍历次数多避免换页和迁移,让 DMA、GPU、RDMA 直接访问
常见手段透明大页(THP)、hugetlbfs、mmap 时指定大页mlock()、cudaHostAlloc 一类接口
能否叠加可以同时用可以同时用

一句话区分:大页决定页有多大,锁页决定页能不能被移动。两者解决的是不同问题,只是经常一起出现,容易被混为一谈。

对从业者和普通人的意义

数据库、JVM、推理服务这类长期占用大量内存的进程,常会开启大页。Linux 上主要有两条路:透明大页(THP)省事,由系统自动合并,但后台合并可能带来抖动;显式预留(hugetlbfs)要提前划出内存,更可控,但配置也更繁琐。具体开关和参数以官方文档为准。

也不要把它当成万能药。如果负载访存局部性很好、TLB 本来就够用,收益有限;内存碎片严重时,还可能根本申请不到大页。对普通职场人来说,云主机上的服务出现“莫名其妙的长尾延迟”时,排查大页设置有时性价比很高,但它属于系统层调优,建议先量测再动手。

AI 生成本文由 AI 基于公开信息自动生成,仅供参考。