Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

mm/page_alloc: add trace event for per-zone lowmem reserve setup

This commit introduces the `mm_setup_per_zone_lowmem_reserve` trace
event,which provides detailed insights into the kernel's per-zone lowmem
reserve configuration.

The trace event provides precise timestamps, allowing developers to

1. Correlate lowmem reserve changes with specific kernel events and
able to diagnose unexpected kswapd or direct reclaim behavior triggered
by dynamic changes in lowmem reserve.

2. Know memory allocation failures that occur due to insufficient
lowmem reserve, by precisely correlating allocation attempts with
reserve adjustments.

Link: https://lkml.kernel.org/r/20250308034606.2036033-3-liumartin@google.com
Signed-off-by: Martin Liu <liumartin@google.com>
Acked-by: David Rientjes <rientjes@google.com>
Cc: "Masami Hiramatsu (Google)" <mhiramat@kernel.org>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>

authored by

Martin Liu and committed by
Andrew Morton
a293aba4 8c02048d

+29
+27
include/trace/events/kmem.h
··· 375 375 __entry->watermark_promo) 376 376 ); 377 377 378 + TRACE_EVENT(mm_setup_per_zone_lowmem_reserve, 379 + 380 + TP_PROTO(struct zone *zone, struct zone *upper_zone, long lowmem_reserve), 381 + 382 + TP_ARGS(zone, upper_zone, lowmem_reserve), 383 + 384 + TP_STRUCT__entry( 385 + __field(int, node_id) 386 + __string(name, zone->name) 387 + __string(upper_name, upper_zone->name) 388 + __field(long, lowmem_reserve) 389 + ), 390 + 391 + TP_fast_assign( 392 + __entry->node_id = zone->zone_pgdat->node_id; 393 + __assign_str(name); 394 + __assign_str(upper_name); 395 + __entry->lowmem_reserve = lowmem_reserve; 396 + ), 397 + 398 + TP_printk("node_id=%d zone name=%s upper_zone name=%s lowmem_reserve_pages=%ld", 399 + __entry->node_id, 400 + __get_str(name), 401 + __get_str(upper_name), 402 + __entry->lowmem_reserve) 403 + ); 404 + 378 405 /* 379 406 * Required for uniquely and securely identifying mm in rss_stat tracepoint. 380 407 */
+2
mm/page_alloc.c
··· 5943 5943 zone->lowmem_reserve[j] = 0; 5944 5944 else 5945 5945 zone->lowmem_reserve[j] = managed_pages / ratio; 5946 + trace_mm_setup_per_zone_lowmem_reserve(zone, upper_zone, 5947 + zone->lowmem_reserve[j]); 5946 5948 } 5947 5949 } 5948 5950 }