Linux内核追踪[4.14] X86的5级页表管理

时间:2024-04-07 14:22:56
        X86的4级页表已经能够管理48bit(256TB)的VA,以及64TB的PA。不过由于某些供应商发布了超过64T的超大物理内存,因此需要实现了一个5级页表特性来进行支持。
       下面是原来4级页表的48bitVA地址空间,原先的X64芯片规定,高8位永远与第48bit(从0开始算即47bit)相同。因此从硬件上只使用4级页表。

    0000000000000000 – 00007fffffffffff(128TB)为用户空间,
    ffff800000000000 – ffffffffffffffff(128TB)为内核空间。


Linux内核追踪[4.14] X86的5级页表管理

        新的Intel芯片的MMU硬件规定可以进行5级页表管理。扩展9位达到57bit VA和52bit PA,支持丧心病狂的128PB VA和4PB PA,甚至大页都达到256G。
        内核在PGD和PUD之间,增加了一个叫P4D的层次。不过新的5级页表可以通过内核cmdline来控制内核启用4级还是5级页表,这个比原先4级页表的支持又智能了不少(OS发行版不用出两个版本了)。
       即使在cmdline配置了5级页表的情况下。默认情况下,Userspace App的VA仍然是47bit(即128TB),希望将高于47bit的地址空间用于Userspace App可以使用prctl的接口使能高bit VA功能(https://lwn.net/Articles/717300/)。

遗留问题:
1. 现有的4级页表已经可以达到256TB的VA,为什么不能管理超过64TB(比如128TB)的PA呢?
2. 5级页表情况下的内核地址空间范围是多少?

参考: