sparsemem issues

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi all,

This is my first time send email to mm community, if something is wrong or silly, please forgive me. 
I have some confusions of sparsemem:

1. sparsemem

It seems that all mem_sections descriptors (except the second level if use sparsemem extreme )are allocated 
before memory_present, then when the are allocated ?
 
2. sparsemem extreme

sparsemem extreme implementation [commit : 3e347261a80b57df] changelog:

 "This two level layout scheme is able to achieve smaller memory requirements for SPARSEMEM 
  with the tradeoff of an additional shift and load when fetching the memory section." 

then how to judge when the benefit from achieve smaller memory  requirements for SPARSEMEM
is worth with the additional shift and load when fetching the memory section.? 

"The patch attempts isolates the implementation details of the physical layout of the sparsemem section
 array."

but how it isolates?

3. sparsemem vmemmap

1)
 The two key operations pfn_to_page and page_to_page become:
    
    #define __pfn_to_page(pfn)      (vmemmap + (pfn))
    #define __page_to_pfn(page)     ((page) - vmemmap)

how can guarantee the block of memory to be used to back the virtual memory map is start from vmemmap?

2)
in Documentation/x86/x86_64/mm.txt

Virtual memory map with 4 level page tables:

0000000000000000 - 00007fffffffffff (=47 bits) user space, different per mm
hole caused by [48:63] sign extension
ffff800000000000 - ffff80ffffffffff (=40 bits) guard hole
ffff880000000000 - ffffc7ffffffffff (=64 TB) direct mapping of all phys. memory
ffffc80000000000 - ffffc8ffffffffff (=40 bits) hole
ffffc90000000000 - ffffe8ffffffffff (=45 bits) vmalloc/ioremap space
ffffe90000000000 - ffffe9ffffffffff (=40 bits) hole
ffffea0000000000 - ffffeaffffffffff (=40 bits) virtual memory map (1TB)
... unused hole ...
ffffffff80000000 - ffffffffa0000000 (=512 MB)  kernel text mapping, from phys 0
ffffffffa0000000 - fffffffffff00000 (=1536 MB) module mapping space


what's the total memory of the example? why virtual memory map(1TB) is that big ? then in x86_64 platform 4GB memory, virtual memory map will start from what address?

Thanks,
Nizhan Chen 

[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]