File Index
Files and directories
Sign in
FILE

vmemmap_dedup.rst

File preview with syntax highlighting.

linux-6.19.14/Documentation/arch/powerpc/vmemmap_dedup.rst RESTRUCTUREDTEXT
  1.. SPDX-License-Identifier: GPL-2.0
  2
  3==========
  4Device DAX
  5==========
  6
  7The device-dax interface uses the tail deduplication technique explained in
  8Documentation/mm/vmemmap_dedup.rst
  9
 10On powerpc, vmemmap deduplication is only used with radix MMU translation. Also
 11with a 64K page size, only the devdax namespace with 1G alignment uses vmemmap
 12deduplication.
 13
 14With 2M PMD level mapping, we require 32 struct pages and a single 64K vmemmap
 15page can contain 1024 struct pages (64K/sizeof(struct page)). Hence there is no
 16vmemmap deduplication possible.
 17
 18With 1G PUD level mapping, we require 16384 struct pages and a single 64K
 19vmemmap page can contain 1024 struct pages (64K/sizeof(struct page)). Hence we
 20require 16 64K pages in vmemmap to map the struct page for 1G PUD level mapping.
 21
 22Here'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 +-----------+
 44
 45
 46With 4K page size, 2M PMD level mapping requires 512 struct pages and a single
 474K vmemmap page contains 64 struct pages(4K/sizeof(struct page)). Hence we
 48require 8 4K pages in vmemmap to map the struct page for 2M pmd level mapping.
 49
 50Here's how things look like on device-dax after the sections are populated::
 51
 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 +-----------+
 73
 74With 1G PUD level mapping, we require 262144 struct pages and a single 4K
 75vmemmap page can contain 64 struct pages (4K/sizeof(struct page)). Hence we
 76require 4096 4K pages in vmemmap to map the struct pages for 1G PUD level
 77mapping.
 78
 79Here's how things look like on device-dax after the sections are populated::
 80
 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 +-----------+
~/ Read-only file preview.