proc:pagemap_file
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
proc:pagemap_file [2017/04/05 10:36] – peter | proc:pagemap_file [2020/07/15 09:30] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Proc - pagemap file ====== | ====== Proc - pagemap file ====== | ||
- | The **/ | + | The **/ |
- | + | ||
- | For detailed explanation, | + | |
Line 10: | Line 8: | ||
There are three components to pagemap: | There are three components to pagemap: | ||
- | * **/ | ||
- | * Bits 0-54 page frame number (PFN) if present | ||
- | * Bits 0-4 swap type if swapped | ||
- | * Bits 5-54 swap offset if swapped | ||
- | * Bits 55-60 page shift (page size = 1<< | ||
- | * Bit 61 reserved for future use | ||
- | * Bit 62 page swapped | ||
- | * Bit 63 page present\\ | ||
- | \\ | ||
- | If the page is not present but in swap, then the PFN contains an encoding of the swap file number and the page's offset into the swap. Unmapped pages return a null PFN. This allows determining precisely which pages are mapped (or in swap) and comparing mapped pages between processes.\\ | ||
- | \\ | ||
- | | ||
- | * /proc/kpagecount. | + | ===== /proc/pid/pagemap ===== |
- | * /proc/ | + | |
- | The flags are (from fs/proc/page.c, above kpageflags_read): | + | This file lets a userspace process find out which physical frame each virtual page is mapped to. It contains one 64-bit value for each virtual page, containing the following data (from fs/proc/task_mmu.c, above pagemap_read): |
- | ^No.^Name^Description^ | + | ^Bits^Description^ |
- | |0|LOCKED|Page is being locked for exclusive access, e.g. by undergoing read/write IO.| | + | |0-54|Page frame number |
- | |1|ERROR|IO error occurred.| | + | |0-4|Swap type if swapped.| |
- | |2|REFERENCED|Page has been referenced since last LRU list enqueue/ | + | |5-54|Swap offset if swapped.| |
- | |3|UPTODATE|Page has up-to-date data. i.e. for file backed page: (in-memory data revision >= on-disk one).| | + | |55-60|Page shift (page size = 1<<page shift).| |
- | |4|DIRTY|Page has been written to, hence contains new data. i.e. for file backed page: (in-memory data revision > on-disk one).| | + | |61|Reserved |
- | |5|LRU|Page is in one of the LRU lists.| | + | |62|Page swapped.| |
- | |6|ACTIVE|Page is in the active LRU list.| | + | |63|Page present.| |
- | |7|SLAB|Page is managed by the SLAB/ | + | |
- | |8|WRITEBACK|Page is being synced to disk.| | + | |
- | |9|RECLAIM|Page will be reclaimed soon after its pageout IO completed.| | + | |
- | |10|BUDDY|A free memory block managed by the buddy system allocator. | + | |
- | |11|MMAP|A memory mapped page.| | + | |
- | |12|ANON|A memory mapped page that is not part of a file.| | + | |
- | |13|SWAPCACHE|Page is mapped to swap space, i.e. has an associated swap entry.| | + | |
- | |14|SWAPBACKED|Page is backed by swap/ | + | |
- | |15|COMPOUND_HEAD|A compound page with order N consists of 2^N physically contiguous pages. | + | |
- | |16|COMPOUND_TAIL|A compound page with order N consists of 2^N physically contiguous pages. | + | |
- | |17|HUGE|This is an integral part of a [[Kernel: | + | |
- | |18|UNEVICTABLE|Page is in the unevictable (non-)LRU list. It is somehow pinned and not a candidate for LRU page reclaims, e.g. ramfs pages, shmctl(SHM_LOCK) and mlock() memory segments.| | + | |
- | |19|HWPOISON|Hardware detected memory corruption on this page: Don't touch the data!| | + | |
- | |20|NOPAGE|No page frame exists at the requested address.| | + | |
- | |21|KSM|Identical memory pages dynamically shared between one or more processes.| | + | |
+ | If the page is not present but in swap, then the PFN contains an encoding of the swap file number and the page's offset into the swap. Unmapped pages return a null PFN. This allows determining precisely which pages are mapped (or in swap) and comparing mapped pages between processes. | ||
+ | |||
+ | Efficient users of this interface will use [[Proc:maps file|/ | ||
+ | |||
+ | |||
+ | ===== / | ||
+ | |||
+ | This file contains a 64-bit count of the number of times each page is mapped, indexed by PFN. | ||
+ | |||
+ | |||
+ | ===== / | ||
+ | |||
+ | This file contains a 64-bit set of flags for each page, indexed by PFN. The flags are (from fs/ | ||
+ | |||
+ | ^ No. ^ Name ^ Description | ||
+ | | 0 | LOCKED | ||
+ | | 1 | ERROR | IO error occurred. | ||
+ | | 2 | REFERENCED | ||
+ | | 3 | UPTODATE | ||
+ | | 4 | DIRTY | Page has been written to, hence contains new data. i.e. for file backed page: (in-memory data revision > on-disk one). | | ||
+ | | 5 | LRU | Page is in one of the LRU lists. | ||
+ | | 6 | ACTIVE | ||
+ | | 7 | SLAB | Page is managed by the SLAB/ | ||
+ | | 8 | WRITEBACK | ||
+ | | 9 | RECLAIM | ||
+ | | 10 | BUDDY | A free memory block managed by the buddy system allocator. The buddy system organizes free memory in blocks of various orders. | ||
+ | | 11 | MMAP | A memory mapped page. | | ||
+ | | 12 | ANON | A memory mapped page that is not part of a file. | | ||
+ | | 13 | SWAPCACHE | ||
+ | | 14 | SWAPBACKED | ||
+ | | 15 | COMPOUND_HEAD | ||
+ | | 16 | COMPOUND_TAIL | ||
+ | | 17 | HUGE | This is an integral part of a [[Kernel: | ||
+ | | 18 | UNEVICTABLE | ||
+ | | 19 | HWPOISON | ||
+ | | 20 | NOPAGE | ||
+ | | 21 | KSM | Identical memory pages dynamically shared between one or more processes. | ||
Line 60: | Line 67: | ||
The general procedure for using pagemap to find out about a process' | The general procedure for using pagemap to find out about a process' | ||
- | + | - Read / | |
- | 1. | + | |
- | 2. | + | |
- | 3. Open / | + | |
- | 4. Read a u64 for each page from pagemap. | + | |
- | 5. Open / | + | |
For example, to find the " | For example, to find the " | ||
- | Other notes: | + | <WRAP info> |
- | + | **NOTE: | |
- | Reading from any of the files will return **-EINVAL** if you are not starting the read on an 8-byte boundary (e.g., if you seeked an odd number of bytes into the file), or if the size of the read is not a multiple of 8 bytes. | + | </ |
proc/pagemap_file.1491388574.txt.gz · Last modified: 2020/07/15 09:30 (external edit)