回收的核心逻辑
回收的大致逻辑
kswapd() // one thread for each node
|
v
balace_pgdat(pgdat, ) node_reclaim()
| |
v v
kswapd_shrink_node(pgdat, ) __node_reclaim(pgdat, )
\ /
\ /
\ /
\ /
v
shrink_node(pgdat, ) mem_cgroup_soft_reclaim()
| |
v v
shrink_node_memcgs(pgdat, ) mem_cgroup_shrink_node(memcg, )
memcg = mem_cgroup_iter() lruvec = mem_cgroup_lruvec(memcg, pgdat)
lruvec = mem_cgroup_lruvec(memcg, pgdat)
\ /
\ /
\ /
\ /
v
shrink_lruvec(lruvec, )
|
v
shrink_list(lruvec, )
^
/ \
/ \
/ \
shrink_active_list() shrink_inactive_list()
|
|
v
shrink_folio_list(&folio_list, )
|
|
v
pageout()priority
swappiness
shrink_list
Last updated