si_mem_available_trace

1
2
3
4
5
6
stap -ve '
probe kernel.function("si_mem_available") {
printf("\n==> si_mem_available() called (pid=%d)\n", pid())
}

' -DSTP_NO_BUILDID_CHECK
1
2
3
stap -l 'kernel.function("si_mem_available@mm/page_alloc.c:*")'

kernel.function("si_mem_available@mm/page_alloc.c:4846")
1
2
3
stap -L 'kernel.function("si_mem_available@mm/page_alloc.c:*")'

kernel.function("si_mem_available@mm/page_alloc.c:4846") $pages:long unsigned int[]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@ctyunos si_mem_available]# stap -l 'kernel.statement("si_mem_available@mm/page_alloc.c:*")'

kernel.statement("si_mem_available@mm/page_alloc.c:4847")
kernel.statement("si_mem_available@mm/page_alloc.c:4850")
kernel.statement("si_mem_available@mm/page_alloc.c:4855")
kernel.statement("si_mem_available@mm/page_alloc.c:4856")
kernel.statement("si_mem_available@mm/page_alloc.c:4858")
kernel.statement("si_mem_available@mm/page_alloc.c:4859")
kernel.statement("si_mem_available@mm/page_alloc.c:4872")
kernel.statement("si_mem_available@mm/page_alloc.c:4873")
kernel.statement("si_mem_available@mm/page_alloc.c:4881")
kernel.statement("si_mem_available@mm/page_alloc.c:4888")
kernel.statement("si_mem_available@mm/page_alloc.c:4893")
kernel.statement("si_mem_available@mm/page_alloc.c:4894")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
stap -L 'kernel.statement("si_mem_available@mm/page_alloc.c:*")'

kernel.statement("si_mem_available@mm/page_alloc.c:4847") $pages:long unsigned int[]
kernel.statement("si_mem_available@mm/page_alloc.c:4850") $pages:long unsigned int[]
kernel.statement("si_mem_available@mm/page_alloc.c:4855") $pages:long unsigned int[]
kernel.statement("si_mem_available@mm/page_alloc.c:4856") $pages:long unsigned int[]
kernel.statement("si_mem_available@mm/page_alloc.c:4858") $pages:long unsigned int[]
kernel.statement("si_mem_available@mm/page_alloc.c:4859") $wmark_low:long unsigned int $pages:long unsigned int[] $zone:struct zone*
kernel.statement("si_mem_available@mm/page_alloc.c:4872") $wmark_low:long unsigned int $pages:long unsigned int[] $zone:struct zone*
kernel.statement("si_mem_available@mm/page_alloc.c:4873") $pagecache:long unsigned int $wmark_low:long unsigned int $pages:long unsigned int[]
kernel.statement("si_mem_available@mm/page_alloc.c:4881") $pagecache:long unsigned int $wmark_low:long unsigned int $pages:long unsigned int[]
kernel.statement("si_mem_available@mm/page_alloc.c:4888") $pagecache:long unsigned int $wmark_low:long unsigned int $pages:long unsigned int[]
kernel.statement("si_mem_available@mm/page_alloc.c:4893") $pagecache:long unsigned int $pages:long unsigned int[]
kernel.statement("si_mem_available@mm/page_alloc.c:4894") $pagecache:long unsigned int $pages:long unsigned int[]
1
2
3
4
5
6
7
stap -ve '
probe kernel.statement("si_mem_available@mm/page_alloc.c:*") {
printf("%s\n", pp())
printf("通用寄存器:\n")
print_regs()
}
' -DSTP_NO_BUILDID_CHECK
1
2
3
4
5
bpftrace -e 'kretprobe:si_mem_available {
printf("si_mem_available() 返回值: %ld pages (约 %ld MB)\n",
retval,
retval >> 8); // 页数转MB: 1页=4KB, 256页=1MB
}'

si_mem_available_trace
https://realwujing.github.io/linux/kernel/mm/bugs/si_mem_available/si_mem_available_trace/
作者
Wu Jing
发布于
2025年7月1日
许可协议