从kernel的.config中可以知道kernel只支持4k/16k/64K的page size
# CONFIG_ARM64_4K_PAGES is not set
# CONFIG_ARM64_16K_PAGES is not set
CONFIG_ARM64_64K_PAGES=y
# CONFIG_ARM64_VA_BITS_42 is not set
CONFIG_ARM64_VA_BITS_48=y
CONFIG_ARM64_VA_BITS=48
va 支持39bit和48 bit。我们这里明显用的是4k/48bit的配置
如果va=39,则user 和 kernel 分别是512GB
AArch64 Linux memory layout with 4KB pages + 3 levels:
Start End Size Use
-----------------------------------------------------------------------
0000000000000000 0000007fffffffff 512GB user
ffffff8000000000 ffffffffffffffff 512GB kernel
如果va=48,则user和kernel 分别是256TB
AArch64 Linux memory layout with 4KB pages + 4 levels:
Start End Size Use
-----------------------------------------------------------------------
0000000000000000 0000ffffffffffff 256TB user
ffff000000000000 ffffffffffffffff 256TB kernel
下面是kernel实际跑起来的memory 配置,可以看到kernel是从0xffff 0000 0000 0000 到0xffff842ffc000000 只用了132TB
[ 0.000000] Virtual kernel memory layout:
[ 0.000000] modules : 0xffff000000000000 - 0xffff000008000000 ( 128 MB)
[ 0.000000] vmalloc : 0xffff000008000000 - 0xffff7dffbfff0000 (129022 GB)
[ 0.000000] .text : 0xffff000008080000 - 0xffff000008b20000 ( 10880 KB)
[ 0.000000] .rodata : 0xffff000008b20000 - 0xffff000008f80000 ( 4480 KB)
[ 0.000000] .init : 0xffff000008f80000 - 0xffff0000090d0000 ( 1344 KB)
[ 0.000000] .data : 0xffff0000090d0000 - 0xffff0000092a5a00 ( 1879 KB)
[ 0.000000] .bss : 0xffff0000092a5a00 - 0xffff00000992d9f0 ( 6688 KB)
[ 0.000000] fixed : 0xffff7dfffe7fd000 - 0xffff7dfffec00000 ( 4108 KB)
[ 0.000000] PCI I/O : 0xffff7dfffee00000 - 0xffff7dffffe00000 ( 16 MB)
[ 0.000000] vmemmap : 0xffff7e0000000000 - 0xffff800000000000 ( 2048 GB maximum)
[ 0.000000] 0xffff7e0000000000 - 0xffff7e10bff00000 ( 68607 MB actual)
[ 0.000000] memory : 0xffff800000000000 - 0xffff842ffc000000 (4390848 MB)
如果是64kpage,则user 和 kernel分配如下:
AArch64 Linux memory layout with 64KB pages + 2 levels:
Start End Size Use
-----------------------------------------------------------------------
0000000000000000 000003ffffffffff 4TB user
fffffc0000000000 ffffffffffffffff 4TB kernel
AArch64 Linux memory layout with 64KB pages + 3 levels:
Start End Size Use
-----------------------------------------------------------------------
0000000000000000 0000ffffffffffff 256TB user
ffff000000000000 ffffffffffffffff 256TB kernel
# CONFIG_ARM64_4K_PAGES is not set
# CONFIG_ARM64_16K_PAGES is not set
CONFIG_ARM64_64K_PAGES=y
# CONFIG_ARM64_VA_BITS_42 is not set
CONFIG_ARM64_VA_BITS_48=y
CONFIG_ARM64_VA_BITS=48
va 支持39bit和48 bit。我们这里明显用的是4k/48bit的配置
如果va=39,则user 和 kernel 分别是512GB
AArch64 Linux memory layout with 4KB pages + 3 levels:
Start End Size Use
-----------------------------------------------------------------------
0000000000000000 0000007fffffffff 512GB user
ffffff8000000000 ffffffffffffffff 512GB kernel
如果va=48,则user和kernel 分别是256TB
AArch64 Linux memory layout with 4KB pages + 4 levels:
Start End Size Use
-----------------------------------------------------------------------
0000000000000000 0000ffffffffffff 256TB user
ffff000000000000 ffffffffffffffff 256TB kernel
下面是kernel实际跑起来的memory 配置,可以看到kernel是从0xffff 0000 0000 0000 到0xffff842ffc000000 只用了132TB
[ 0.000000] Virtual kernel memory layout:
[ 0.000000] modules : 0xffff000000000000 - 0xffff000008000000 ( 128 MB)
[ 0.000000] vmalloc : 0xffff000008000000 - 0xffff7dffbfff0000 (129022 GB)
[ 0.000000] .text : 0xffff000008080000 - 0xffff000008b20000 ( 10880 KB)
[ 0.000000] .rodata : 0xffff000008b20000 - 0xffff000008f80000 ( 4480 KB)
[ 0.000000] .init : 0xffff000008f80000 - 0xffff0000090d0000 ( 1344 KB)
[ 0.000000] .data : 0xffff0000090d0000 - 0xffff0000092a5a00 ( 1879 KB)
[ 0.000000] .bss : 0xffff0000092a5a00 - 0xffff00000992d9f0 ( 6688 KB)
[ 0.000000] fixed : 0xffff7dfffe7fd000 - 0xffff7dfffec00000 ( 4108 KB)
[ 0.000000] PCI I/O : 0xffff7dfffee00000 - 0xffff7dffffe00000 ( 16 MB)
[ 0.000000] vmemmap : 0xffff7e0000000000 - 0xffff800000000000 ( 2048 GB maximum)
[ 0.000000] 0xffff7e0000000000 - 0xffff7e10bff00000 ( 68607 MB actual)
[ 0.000000] memory : 0xffff800000000000 - 0xffff842ffc000000 (4390848 MB)
如果是64kpage,则user 和 kernel分配如下:
AArch64 Linux memory layout with 64KB pages + 2 levels:
Start End Size Use
-----------------------------------------------------------------------
0000000000000000 000003ffffffffff 4TB user
fffffc0000000000 ffffffffffffffff 4TB kernel
AArch64 Linux memory layout with 64KB pages + 3 levels:
Start End Size Use
-----------------------------------------------------------------------
0000000000000000 0000ffffffffffff 256TB user
ffff000000000000 ffffffffffffffff 256TB kernel