地址转换需要多次访问内存,而相对于CPU而言访问内存的速度还是太慢了。为了避免花费太多时间在地址转换上,CPU维护了一个地址转换的缓冲区TLB(Tranlation Lookaside Buffer). 通常情况下TLB是相当稀缺的资源,一个应用程序如果需要使用大页内在,会因为TBL不够而遭受性能损失。
许多现代CPU体系架构,允许页表中的高维度直接映射到内存页面。例如在x86上,可以使用页表中的二级、三级页面来直接映射2M甚至1G的内存页面。在Linux中,这样的页面被称为大页面,使用大页面能显著降低TBL的压力,提高TBL的命中率,进而提高了系统的整体性能。
在Linux中有两种方式支持大页与物理内存的映射。第一种方式是HugeTLB文件系统(HugeTBLFS),它是一种使用RAM作为备份存储区的伪文件系统,通过该系统创建的文件,数据保留在内存中,并通过大页面进行映射。
第二种方式是透明大页面(THP),与HugeTLB不同的是,HugeTBL需要管理员配置哪些系统内存需要被映射成大页面,而THP的这些管理对用户是透明的。