1.. SPDX-License-Identifier: GPL-2.0 2 3============== 45-level paging 5============== 6 7Overview 8======== 9Original x86-64 was limited by 4-level paging to 256 TiB of virtual address 10space and 64 TiB of physical address space. We are already bumping into 11this limit: some vendors offer servers with 64 TiB of memory today. 12 13To overcome the limitation upcoming hardware will introduce support for 145-level paging. It is a straight-forward extension of the current page 15table structure adding one more layer of translation. 16 17It bumps the limits to 128 PiB of virtual address space and 4 PiB of 18physical address space. This "ought to be enough for anybody" ©. 19 20QEMU 2.9 and later support 5-level paging. 21 22Virtual memory layout for 5-level paging is described in 23Documentation/arch/x86/x86_64/mm.rst 24 25User-space and large virtual address space 26========================================== 27On x86, 5-level paging enables 56-bit userspace virtual address space. 28Not all user space is ready to handle wide addresses. It's known that 29at least some JIT compilers use higher bits in pointers to encode their 30information. It collides with valid pointers with 5-level paging and 31leads to crashes. 32 33To mitigate this, we are not going to allocate virtual address space 34above 47-bit by default. 35 36But userspace can ask for allocation from full address space by 37specifying hint address (with or without MAP_FIXED) above 47-bits. 38 39If hint address set above 47-bit, but MAP_FIXED is not specified, we try 40to look for unmapped area by specified address. If it's already 41occupied, we look for unmapped area in *full* address space, rather than 42from 47-bit window. 43 44A high hint address would only affect the allocation in question, but not 45any future mmap()s. 46 47Specifying high hint address on older kernel or on machine without 5-level 48paging support is safe. The hint will be ignored and kernel will fall back 49to allocation from 47-bit address space. 50 51This approach helps to easily make application's memory allocator aware 52about large address space without manually tracking allocated virtual 53address space. 54 55One important case we need to handle here is interaction with MPX. 56MPX (without MAWA extension) cannot handle addresses above 47-bit, so we 57need to make sure that MPX cannot be enabled we already have VMA above 58the boundary and forbid creating such VMAs once MPX is enabled. 59