April 23, 2026 at 8:14 PM, "Bunyod Suvonov" <[email protected] mailto:[email protected]?to=%22Bunyod%20Suvonov%22%20%3Cb.suvonov%40sjtu.edu.cn%3E > wrote:
> > Vmscan has six main reclaim entry points: try_to_free_pages() for > direct reclaim, try_to_free_mem_cgroup_pages() for memcg reclaim, > mem_cgroup_shrink_node() for memcg soft limit reclaim, node_reclaim() > for node reclaim, shrink_all_memory() for hibernation reclaim, and > balance_pgdat() for kswapd reclaim. > > All of them, except for shrink_all_memory() and balance_pgdat(), already > have begin/end tracepoints. This makes it harder to trace which reclaim > path is responsible for memory reclaim activity, because kswapd reclaim > cannot be identified as cleanly as other reclaim entry points, even > though it is the main background reclaim path under memory pressure. > There may be no need to trace shrink_all_memory() as it is primarily > used during hibernation. So this patch adds the missing tracepoint pair > for balance_pgdat(). > > The begin tracepoint records the node id, requested reclaim order, and > the requested classzone bound (highest_zoneidx). The end tracepoint > records the node id, the reclaim order that balance_pgdat() finished > with, the requested classzone bound, and nr_reclaimed. Together, they > show the requested reclaim order and classzone bound, whether reclaim > fell back to a lower order, and how much reclaim work was done. > > The end tracepoint also records highest_zoneidx even though it does not > change within a balance_pgdat() invocation. This keeps the end event > self-contained, so users can analyze reclaim results directly from end > events without depending on begin/end correlation, which is less > convenient when tracing is filtered or records are dropped. It also > makes it straightforward to relate nr_reclaimed and the final reclaim > order to the requested classzone bound. > > Signed-off-by: Bunyod Suvonov <[email protected]> Acked-by: Shakeel Butt <[email protected]>
