powerpc/mm/book3s/64: Rework page table geometry for lower memory usage
authorMichael Ellerman <mpe@ellerman.id.au>
Tue, 9 May 2017 05:39:04 +0000 (15:39 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Tue, 9 May 2017 09:24:23 +0000 (19:24 +1000)
commitba95b5d0359609b4ec8010f77c40ab3c595a6ac6
tree291c75d748e834b1d28986aa8a086dc1f6a8e80a
parent24e0bfbf63bac18495b0ad76115269f2158e9234
powerpc/mm/book3s/64: Rework page table geometry for lower memory usage

Recently in commit f6eedbba7a26 ("powerpc/mm/hash: Increase VA range to 128TB")
we increased the virtual address space for user processes to 128TB by default,
and up to 512TB if user space opts in.

This obviously required expanding the range of the Linux page tables. For Book3s
64-bit using hash and with PAGE_SIZE=64K, we increased the PGD to 2^15 entries.
This meant we could cover the full address range, while still being able to
insert a 16G hugepage at the PGD level and a 16M hugepage in the PMD.

The downside of that geometry is that it uses a lot of memory for the PGD, and
in particular makes the PGD a 4-page allocation, which means it's much more
likely to fail under memory pressure.

Instead we can make the PMD larger, so that a single PUD entry maps 16G,
allowing the 16G hugepages to sit at that level in the tree. We're then able to
split the remaining bits between the PUG and PGD. We make the PGD slightly
larger as that results in lower memory usage for typical programs.

When THP is enabled the PMD actually doubles in size, to 2^11 entries, or 2^14
bytes, which is large but still < PAGE_SIZE.

Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Reviewed-by: Balbir Singh <bsingharora@gmail.com>
Reviewed-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
arch/powerpc/include/asm/book3s/64/hash-64k.h