About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog

Documentation / arm64 / memory.txt




Custom Search

Based on kernel version 3.15.4. Page generated on 2014-07-07 08:59 EST.

1			     Memory Layout on AArch64 Linux
2			     ==============================
3	
4	Author: Catalin Marinas <catalin.marinas@arm.com>
5	Date  : 20 February 2012
6	
7	This document describes the virtual memory layout used by the AArch64
8	Linux kernel. The architecture allows up to 4 levels of translation
9	tables with a 4KB page size and up to 3 levels with a 64KB page size.
10	
11	AArch64 Linux uses 3 levels of translation tables with the 4KB page
12	configuration, allowing 39-bit (512GB) virtual addresses for both user
13	and kernel. With 64KB pages, only 2 levels of translation tables are
14	used but the memory layout is the same.
15	
16	User addresses have bits 63:39 set to 0 while the kernel addresses have
17	the same bits set to 1. TTBRx selection is given by bit 63 of the
18	virtual address. The swapper_pg_dir contains only kernel (global)
19	mappings while the user pgd contains only user (non-global) mappings.
20	The swapper_pgd_dir address is written to TTBR1 and never written to
21	TTBR0.
22	
23	
24	AArch64 Linux memory layout with 4KB pages:
25	
26	Start			End			Size		Use
27	-----------------------------------------------------------------------
28	0000000000000000	0000007fffffffff	 512GB		user
29	
30	ffffff8000000000	ffffffbbfffeffff	~240GB		vmalloc
31	
32	ffffffbbffff0000	ffffffbbffffffff	  64KB		[guard page]
33	
34	ffffffbc00000000	ffffffbdffffffff	   8GB		vmemmap
35	
36	ffffffbe00000000	ffffffbffbbfffff	  ~8GB		[guard, future vmmemap]
37	
38	ffffffbffa000000	ffffffbffaffffff	  16MB		PCI I/O space
39	
40	ffffffbffb000000	ffffffbffbbfffff	  12MB		[guard]
41	
42	ffffffbffbc00000	ffffffbffbdfffff	   2MB		fixed mappings
43	
44	ffffffbffbe00000	ffffffbffbffffff	   2MB		[guard]
45	
46	ffffffbffc000000	ffffffbfffffffff	  64MB		modules
47	
48	ffffffc000000000	ffffffffffffffff	 256GB		kernel logical memory map
49	
50	
51	AArch64 Linux memory layout with 64KB pages:
52	
53	Start			End			Size		Use
54	-----------------------------------------------------------------------
55	0000000000000000	000003ffffffffff	   4TB		user
56	
57	fffffc0000000000	fffffdfbfffeffff	  ~2TB		vmalloc
58	
59	fffffdfbffff0000	fffffdfbffffffff	  64KB		[guard page]
60	
61	fffffdfc00000000	fffffdfdffffffff	   8GB		vmemmap
62	
63	fffffdfe00000000	fffffdfffbbfffff	  ~8GB		[guard, future vmmemap]
64	
65	fffffdfffa000000	fffffdfffaffffff	  16MB		PCI I/O space
66	
67	fffffdfffb000000	fffffdfffbbfffff	  12MB		[guard]
68	
69	fffffdfffbc00000	fffffdfffbdfffff	   2MB		fixed mappings
70	
71	fffffdfffbe00000	fffffdfffbffffff	   2MB		[guard]
72	
73	fffffdfffc000000	fffffdffffffffff	  64MB		modules
74	
75	fffffe0000000000	ffffffffffffffff	   2TB		kernel logical memory map
76	
77	
78	Translation table lookup with 4KB pages:
79	
80	+--------+--------+--------+--------+--------+--------+--------+--------+
81	|63    56|55    48|47    40|39    32|31    24|23    16|15     8|7      0|
82	+--------+--------+--------+--------+--------+--------+--------+--------+
83	 |                 |         |         |         |         |
84	 |                 |         |         |         |         v
85	 |                 |         |         |         |   [11:0]  in-page offset
86	 |                 |         |         |         +-> [20:12] L3 index
87	 |                 |         |         +-----------> [29:21] L2 index
88	 |                 |         +---------------------> [38:30] L1 index
89	 |                 +-------------------------------> [47:39] L0 index (not used)
90	 +-------------------------------------------------> [63] TTBR0/1
91	
92	
93	Translation table lookup with 64KB pages:
94	
95	+--------+--------+--------+--------+--------+--------+--------+--------+
96	|63    56|55    48|47    40|39    32|31    24|23    16|15     8|7      0|
97	+--------+--------+--------+--------+--------+--------+--------+--------+
98	 |                 |    |               |              |
99	 |                 |    |               |              v
100	 |                 |    |               |            [15:0]  in-page offset
101	 |                 |    |               +----------> [28:16] L3 index
102	 |                 |    +--------------------------> [41:29] L2 index (only 38:29 used)
103	 |                 +-------------------------------> [47:42] L1 index (not used)
104	 +-------------------------------------------------> [63] TTBR0/1
105	
106	When using KVM, the hypervisor maps kernel pages in EL2, at a fixed
107	offset from the kernel VA (top 24bits of the kernel VA set to zero):
108	
109	Start			End			Size		Use
110	-----------------------------------------------------------------------
111	0000004000000000	0000007fffffffff	 256GB		kernel objects mapped in HYP
Hide Line Numbers
About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog

Information is copyright its respective author. All material is available from the Linux Kernel Source distributed under a GPL License. This page is provided as a free service by mjmwired.net.