Hi VM folks,
I'd like your comments on this (rather simplistic) hypothetic
VM description. If you know what's wrong with it, please tell me.
Ram page can be:
Not used by anything.
Initially allocated page. All such pages share
global zero-filled readonly page. On write COW magic
is making a dirty non-backed copy
This ram page have copy neither in swap nor in fs.
Under light i/o load page laundering machinery
_may_ allocate swap for it and write it back.
Only after a timeout. No point in writing back
too early/too often. This laundering can be
turned off completely without much harm.
This ram page has a copy on swap. It is not modified
(either swapped in or is already laundered)
Note: as soon as it gets dirty, it becomes
dirty *non-backed* and swap page is freed
This ram page was modified some time ago, become
dirty non-backed, and is being written back right now
to newly allocated swap page (laundering or
(evicting LRU ram page under memory pressure)).
A temporary stage. Turns clean swap-backed
as soon as write completes.
This ram page is mmapped from a file and is not modified
or already written back
This ram page is mmapped from a file and is modified.
It needs to be written back within reasonable timeout
to keep fs data consistent
How LRU works
All non-free ram pages are in LRU list. Top ram page on the list
is the most recently accessed one. Bottom one is least recently
VM periodically scans all process pte's looking for 'accessed'
and 'dirty' bits, resets those bits, modifies page status:
Accessed bit set: Move ram page to top of LRU list.
Dirty bit set:
clean non-backed - can't happen (global zero page is RO)
dirty non-backed -> dirty non-backed
clean swap-backed -> dirty non-backed (note: swap page freed!)
dirty swap-backed -> dirty non-backed (note: complicated case. See below)
clean fs-backed -> dirty fs-backed
dirty fs-backed -> dirty fs-backed
We are writing ram page to swap either due to:
1) Evicting LRU ram page under memory pressure
2) Laundering ram page under light io load
and page gets accessed/dirtied by some process.
In first case we are in deep trouble. To prevent this we must
unmap ram page from all processes before evicting.
In second case we are fine, however, laundering io is wasted.
Ram page should become dirty non-backed again and moved
to top of LRU list, swap page freed.
Ram page eviction
We evict ram pages when we have no free ram pages and
we have a memory request:
1) a process accesses not-present (swapped out) page
2) a process accesses not-present page mmaped to a file
3) a process writes to clean non-backed ram page and COW needs
new ram page to make a copy
Rate of such evictions is a good measure of mem pressure.
We evict ram page from the bottom of LRU list by unmapping it from
all processes, writing back to fs or allocating swap and writing back
to swap if it is dirty and using freed ram page to fulfill memory
-- Best regards, VDA mailto:VDA@port.imtp.ilyichevsk.odessa.ua
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to email@example.com More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
This archive was generated by hypermail 2b29 : Sun Sep 30 2001 - 21:00:29 EST