当物理内存实际比较紧张时,内存水位处于较低water level时,会触发间接回收内存kswapd或者直接回收内存,从inactive LRU list中将不常用的内存 置换到内存中,整个调用过程大概如下:
- 当内存zone watermark低于ALLOC_WMARK_LOW时,将启动kswapd线程回收内存。
- 当内存继续持续降低,watermark低于ALLOC_WMARK_MiN,将通过慢速申请阶段启动直接回收内存。(参考《linux内核那些事之zone(zone watermark)(3)》)
不管是kswapd线程还是 直接回收内存,最终都是回收位于inactive list LRU中回收内存。回收入口总函数为shrink_list。