进程页表可能占多大?

根据打印:
/proc/2723/statm,4269829, 4206482,3793083,3565,0,458960,0!

这个红字表示的意思是,准备执行fork前,线程已占用的物理内存大小,即rss,为 4206482个页,约16G。
下面来估算一下进程fork的时候,可能消耗的最大内存。

由于x86_64是4级页表,因此任何进程页表最大可能占用内存的是:

pgd :4k
pud: 4k  ×512 
pmd: 4k × 512 × 512                          
pte: 4K × 512 × 512×512   
----------------------------------------------


因为执行到fork前,进程的物理页有4206482个,小于  512 × 512×512,  
因此最多占用pte表的个数为4206482。
同理,最多占用pmd表的个数为 512×512 , 最多占用pud表的个数为512,最多占用pgd的个数是1.

因此最坏情况下,进程占用页表的上限为(4206482+512×512+512+1)×4k 

但实际情况下,基本不可能运气这么背,耗了这么多内存。

其实还有的信息可以参考,通过/proc/meminfo可以知道,当前系统的总共页表PTE的个数N。

这个页表数指的是pte一级的个数,因此在四级分页下,可能的最大页表消耗内存为N × min(N ,512×512) × min(N, 512) × PAGE_SIZE




你可能感兴趣的:(进程页表大小)