mirror of
https://github.com/torvalds/linux.git
synced 2024-12-27 13:22:23 +00:00
17e02586ed
and fix all in-tree references. Architecture-specific documentation is being moved into Documentation/arch/ as a way of cleaning up the top-level documentation directory and making the docs hierarchy more closely match the source hierarchy. Signed-off-by: Costa Shulyupin <costa.shul@redhat.com> Acked-by: Michael Ellerman <mpe@ellerman.id.au> Signed-off-by: Jonathan Corbet <corbet@lwn.net> Link: https://lore.kernel.org/r/20230826165737.2101199-1-costa.shul@redhat.com
102 lines
5.4 KiB
ReStructuredText
102 lines
5.4 KiB
ReStructuredText
.. SPDX-License-Identifier: GPL-2.0
|
|
|
|
==========
|
|
Device DAX
|
|
==========
|
|
|
|
The device-dax interface uses the tail deduplication technique explained in
|
|
Documentation/mm/vmemmap_dedup.rst
|
|
|
|
On powerpc, vmemmap deduplication is only used with radix MMU translation. Also
|
|
with a 64K page size, only the devdax namespace with 1G alignment uses vmemmap
|
|
deduplication.
|
|
|
|
With 2M PMD level mapping, we require 32 struct pages and a single 64K vmemmap
|
|
page can contain 1024 struct pages (64K/sizeof(struct page)). Hence there is no
|
|
vmemmap deduplication possible.
|
|
|
|
With 1G PUD level mapping, we require 16384 struct pages and a single 64K
|
|
vmemmap page can contain 1024 struct pages (64K/sizeof(struct page)). Hence we
|
|
require 16 64K pages in vmemmap to map the struct page for 1G PUD level mapping.
|
|
|
|
Here's how things look like on device-dax after the sections are populated::
|
|
+-----------+ ---virt_to_page---> +-----------+ mapping to +-----------+
|
|
| | | 0 | -------------> | 0 |
|
|
| | +-----------+ +-----------+
|
|
| | | 1 | -------------> | 1 |
|
|
| | +-----------+ +-----------+
|
|
| | | 2 | ----------------^ ^ ^ ^ ^ ^
|
|
| | +-----------+ | | | | |
|
|
| | | 3 | ------------------+ | | | |
|
|
| | +-----------+ | | | |
|
|
| | | 4 | --------------------+ | | |
|
|
| PUD | +-----------+ | | |
|
|
| level | | . | ----------------------+ | |
|
|
| mapping | +-----------+ | |
|
|
| | | . | ------------------------+ |
|
|
| | +-----------+ |
|
|
| | | 15 | --------------------------+
|
|
| | +-----------+
|
|
| |
|
|
| |
|
|
| |
|
|
+-----------+
|
|
|
|
|
|
With 4K page size, 2M PMD level mapping requires 512 struct pages and a single
|
|
4K vmemmap page contains 64 struct pages(4K/sizeof(struct page)). Hence we
|
|
require 8 4K pages in vmemmap to map the struct page for 2M pmd level mapping.
|
|
|
|
Here's how things look like on device-dax after the sections are populated::
|
|
|
|
+-----------+ ---virt_to_page---> +-----------+ mapping to +-----------+
|
|
| | | 0 | -------------> | 0 |
|
|
| | +-----------+ +-----------+
|
|
| | | 1 | -------------> | 1 |
|
|
| | +-----------+ +-----------+
|
|
| | | 2 | ----------------^ ^ ^ ^ ^ ^
|
|
| | +-----------+ | | | | |
|
|
| | | 3 | ------------------+ | | | |
|
|
| | +-----------+ | | | |
|
|
| | | 4 | --------------------+ | | |
|
|
| PMD | +-----------+ | | |
|
|
| level | | 5 | ----------------------+ | |
|
|
| mapping | +-----------+ | |
|
|
| | | 6 | ------------------------+ |
|
|
| | +-----------+ |
|
|
| | | 7 | --------------------------+
|
|
| | +-----------+
|
|
| |
|
|
| |
|
|
| |
|
|
+-----------+
|
|
|
|
With 1G PUD level mapping, we require 262144 struct pages and a single 4K
|
|
vmemmap page can contain 64 struct pages (4K/sizeof(struct page)). Hence we
|
|
require 4096 4K pages in vmemmap to map the struct pages for 1G PUD level
|
|
mapping.
|
|
|
|
Here's how things look like on device-dax after the sections are populated::
|
|
|
|
+-----------+ ---virt_to_page---> +-----------+ mapping to +-----------+
|
|
| | | 0 | -------------> | 0 |
|
|
| | +-----------+ +-----------+
|
|
| | | 1 | -------------> | 1 |
|
|
| | +-----------+ +-----------+
|
|
| | | 2 | ----------------^ ^ ^ ^ ^ ^
|
|
| | +-----------+ | | | | |
|
|
| | | 3 | ------------------+ | | | |
|
|
| | +-----------+ | | | |
|
|
| | | 4 | --------------------+ | | |
|
|
| PUD | +-----------+ | | |
|
|
| level | | . | ----------------------+ | |
|
|
| mapping | +-----------+ | |
|
|
| | | . | ------------------------+ |
|
|
| | +-----------+ |
|
|
| | | 4095 | --------------------------+
|
|
| | +-----------+
|
|
| |
|
|
| |
|
|
| |
|
|
+-----------+
|