modified pages (backed by the block device) are not swapped out. but it can be synchronized with the block device.
kernel can discard pages (backed by a file) which are not modifiable.
page reclaim = { selecting, swapping, synchronizing, discarding }
private mapping = map a file in memory but changes to that memory is not reflected to the backing block device.
pages candidates for the swap area
1. MAP_PRIVATE, 2. MAP_ANONYMOUS, 3. IPC pages
inside
swap areas, there are slots and clusters. swap areas may have different
priorities. clustering makes it fast to do readaheads to/from swap
space.
bitmap is used to keep track of used and free slots in swap area.
to reduce swapping pressure, there are kswapd (normal mem pressure) and direct reclaim (extreme memory pressure).
when swapping is not enough, there is OOM killer. so, we can see there are levels of mechanisms to keep the system running.
there
are 2 lists of each zone: active and inactive. pages are transferred
between these 2 lists based on their h/w accessed bit.
swap_info_struct
keeps track of each swap areas. similar to the way kernel keeps track
of a block device, it keeps track of the swap area.
the first
slot of a swap area is used for identification purpose and keeping state
information about the swap partition. (i have to see how that is done)
extent
list works like a page table in VM. they keep track of linear page
slots of a swap area to the scattered blocks on disk. for file-based
swap area, the number of extent list structures are more than
partition-based swap area where blocks are sequential.