Merge tag 'trace-printf-v6.13' of git://git.kernel.org/pub/scm/linux/kernel/git/trace...
[drm/drm-misc.git] / Documentation / arch / powerpc / vmemmap_dedup.rst
blobdc4db59fdf87b45e5da5cdc7df6fb2fe8e1d52ed
1 .. SPDX-License-Identifier: GPL-2.0
3 ==========
4 Device DAX
5 ==========
7 The device-dax interface uses the tail deduplication technique explained in
8 Documentation/mm/vmemmap_dedup.rst
10 On powerpc, vmemmap deduplication is only used with radix MMU translation. Also
11 with a 64K page size, only the devdax namespace with 1G alignment uses vmemmap
12 deduplication.
14 With 2M PMD level mapping, we require 32 struct pages and a single 64K vmemmap
15 page can contain 1024 struct pages (64K/sizeof(struct page)). Hence there is no
16 vmemmap deduplication possible.
18 With 1G PUD level mapping, we require 16384 struct pages and a single 64K
19 vmemmap page can contain 1024 struct pages (64K/sizeof(struct page)). Hence we
20 require 16 64K pages in vmemmap to map the struct page for 1G PUD level mapping.
22 Here's how things look like on device-dax after the sections are populated::
23  +-----------+ ---virt_to_page---> +-----------+   mapping to   +-----------+
24  |           |                     |     0     | -------------> |     0     |
25  |           |                     +-----------+                +-----------+
26  |           |                     |     1     | -------------> |     1     |
27  |           |                     +-----------+                +-----------+
28  |           |                     |     2     | ----------------^ ^ ^ ^ ^ ^
29  |           |                     +-----------+                   | | | | |
30  |           |                     |     3     | ------------------+ | | | |
31  |           |                     +-----------+                     | | | |
32  |           |                     |     4     | --------------------+ | | |
33  |    PUD    |                     +-----------+                       | | |
34  |   level   |                     |     .     | ----------------------+ | |
35  |  mapping  |                     +-----------+                         | |
36  |           |                     |     .     | ------------------------+ |
37  |           |                     +-----------+                           |
38  |           |                     |     15    | --------------------------+
39  |           |                     +-----------+
40  |           |
41  |           |
42  |           |
43  +-----------+
46 With 4K page size, 2M PMD level mapping requires 512 struct pages and a single
47 4K vmemmap page contains 64 struct pages(4K/sizeof(struct page)). Hence we
48 require 8 4K pages in vmemmap to map the struct page for 2M pmd level mapping.
50 Here's how things look like on device-dax after the sections are populated::
52  +-----------+ ---virt_to_page---> +-----------+   mapping to   +-----------+
53  |           |                     |     0     | -------------> |     0     |
54  |           |                     +-----------+                +-----------+
55  |           |                     |     1     | -------------> |     1     |
56  |           |                     +-----------+                +-----------+
57  |           |                     |     2     | ----------------^ ^ ^ ^ ^ ^
58  |           |                     +-----------+                   | | | | |
59  |           |                     |     3     | ------------------+ | | | |
60  |           |                     +-----------+                     | | | |
61  |           |                     |     4     | --------------------+ | | |
62  |    PMD    |                     +-----------+                       | | |
63  |   level   |                     |     5     | ----------------------+ | |
64  |  mapping  |                     +-----------+                         | |
65  |           |                     |     6     | ------------------------+ |
66  |           |                     +-----------+                           |
67  |           |                     |     7     | --------------------------+
68  |           |                     +-----------+
69  |           |
70  |           |
71  |           |
72  +-----------+
74 With 1G PUD level mapping, we require 262144 struct pages and a single 4K
75 vmemmap page can contain 64 struct pages (4K/sizeof(struct page)). Hence we
76 require 4096 4K pages in vmemmap to map the struct pages for 1G PUD level
77 mapping.
79 Here's how things look like on device-dax after the sections are populated::
81  +-----------+ ---virt_to_page---> +-----------+   mapping to   +-----------+
82  |           |                     |     0     | -------------> |     0     |
83  |           |                     +-----------+                +-----------+
84  |           |                     |     1     | -------------> |     1     |
85  |           |                     +-----------+                +-----------+
86  |           |                     |     2     | ----------------^ ^ ^ ^ ^ ^
87  |           |                     +-----------+                   | | | | |
88  |           |                     |     3     | ------------------+ | | | |
89  |           |                     +-----------+                     | | | |
90  |           |                     |     4     | --------------------+ | | |
91  |    PUD    |                     +-----------+                       | | |
92  |   level   |                     |     .     | ----------------------+ | |
93  |  mapping  |                     +-----------+                         | |
94  |           |                     |     .     | ------------------------+ |
95  |           |                     +-----------+                           |
96  |           |                     |   4095    | --------------------------+
97  |           |                     +-----------+
98  |           |
99  |           |
100  |           |
101  +-----------+