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    | --------------------------+
 | 
						|
 |           |                     +-----------+
 | 
						|
 |           |
 | 
						|
 |           |
 | 
						|
 |           |
 | 
						|
 +-----------+
 |