512个进程共享内存,页表竟吃掉全部内存

Page Table Memory Consumption

Linus Torvalds 曾认为页表内存占用只是次要问题,但 Shakeel Butt 和 Andrea Arcangeli 等人在实际场景中发现了严重隐患。当多个进程映射相同的共享内存时,每个进程都需要独立的页表项,导致页表开销随进程数线性增长。在极端情况下,512个进程映射同一页面,页表消耗甚至等同于数据本身。数据库如 PostgreSQL 和 ClickHouse 也深受其扰,OOM 问题频发。虽然 Huge Pages 能缓解压力,但 NUMA 架构下的远程页表访问又带来了新的延迟挑战。这不仅是边缘案例,更是现代高性能计算中不可忽视的内存陷阱。

如果 512 个进程映射相同的页面,它们需要的页表项总量就相当于一整个数据页面的大小。

同日更多故事

2026-10-04