初始化-参数设置
kernel_init
do_one_initcall
hugepage_init
start_stop_khugepaged
set_recommended_min_free_kbytes
setup_per_zone_wmarks
_setup_per_zone_wmarks
watermark_scale_factor = mult_frac ( k*watermark_scale_factor);
zone->_watermark[WMARK_LOW] = min_wmark_pages(zone) + tmp;
zone->_watermark[WMARK_HIGH] = min_wmark_pages(zone) + tmp * 2;
kswapd任务
kswapd_init
kswapd_run
kswapd
kswapd_try_to_sleep
prepare_kswapd_sleep (1) 更新统计,计算谁该被淘汰
pgdat_balanced
zone_watermark_ok_safe
balance_pgdat
kswapd_shrink_node (2)按统计结果,执行淘汰
shrink_node
allow_direct_reclaim
内存分配
alloc_page
alloc_pages
alloc_pages_node
_alloc_pages_nodemask
get_page_from_freelist
zone_watermark_fast (1)直接从Free内存中快速分配
zone_watermark_ok
_alloc_pages_slowpath
wake_all_kswapds (2.1) 唤醒kswapd 回收进程
__alloc_pages_direct_reclaim (2.2)强行直接回收
__alloc_pages_may_oom (2.3)不得不OOM-Kill,杀死某问题进程
out_of_memory
select_bad_process
oom_kill_process