源码基于:Linux 5.4
针对节点:
/proc/vmstat
0. 前言
内存管理是一个相对复杂的内核模块,错综复杂的数据结构和管理逻辑。Linux 内核为了帮助开发者从宏观上把握内存的使用情况,在几大核心数据结构中都有相应的计数统计,如物理页面使用情况、伙伴系统分配情况、内存管理区的页面使用情况、内存回收扫描回收情况、内存规整触发情况等等。
本文要分析的节点 vmstat 是内存管理数据统计的大集合,其中包括了空闲页面、不活跃页面、活跃页面、不可回收页面、cma管理页面、slab管理页面、工作集使用情况、脏页、共享页、回收操作情况、规整情况等等。
1. 调用流程
start_kernel()
|----arch_call_rest_init()
|----rest_init()
|----kernel_init()
|----kernel_init_freeable()
|----init_mm_internals()
mm/vmstat.c
void __init init_mm_internals(void)
{
...
#ifdef CONFIG_PROC_FS
proc_create_seq("buddyinfo", 0444, NULL, &fragmentation_op);
proc_create_seq("pagetypeinfo", 0400, NULL, &pagetypeinfo_op);
proc_create_seq("vmstat", 0444, NULL, &vmstat_op);
proc_create_seq(&
|