cat /proc/meminfo 
MemTotal:        1024812 kB
MemFree:          360208 kB
Buffers:           30572 kB
Cached:           435620 kB
SwapCached:           32 kB
Active:           239980 kB
Inactive:         242980 kB
Active(anon):      11816 kB
Inactive(anon):    11652 kB
Active(file):     228164 kB
Inactive(file):   231328 kB
Unevictable:           0 kB
Mlocked:               0 kB
HighTotal:        270336 kB
HighFree:          49668 kB
LowTotal:         754476 kB
LowFree:          310540 kB
SwapTotal:        131068 kB
SwapFree:         131032 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:         16832 kB
Mapped:            16748 kB
Shmem:              6700 kB
Slab:             158036 kB
SReclaimable:      20756 kB
SUnreclaim:       137280 kB
KernelStack:         736 kB
PageTables:          676 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      643472 kB
Committed_AS:     173868 kB
VmallocTotal:     245760 kB
VmallocUsed:       17180 kB
VmallocChunk:     212864 kB    如上为/proc/meminfo中对内存的统计,其代码在fs/proc/meminfo.c中,接口为static int meminfo_proc_show(struct seq_file *m, void *v)。
    但是各个内存是如何进行统计的,比如Slab,通过slab分配器分配的内存,比如kmalloc,按理说slab会增加,具体在什么地方增加的,求大神指导下!

解决方案 »

  1.   

    static inline unsigned long global_page_state(enum zone_stat_item item)
    {
    long x = atomic_long_read(&vm_stat[item]);
    #ifdef CONFIG_SMP
    if (x < 0)
    x = 0;
    #endif
    return x;
    }
    这不很清楚了吗,vm_stat存的各种统计信息,系统运行的时候会更新vm_stat里面的信息
      

  2.   

    在进行各种内存分配的时候,成功的话会随手更新统计参数的,位置比较零碎。
    你看slab的信息明显是读取
    K(global_page_state(NR_SLAB_RECLAIMABLE) +
    global_page_state(NR_SLAB_UNRECLAIMABLE)),
    那你就找NR_SLAB_RECLAIMABLE出现的位置,一般都可以找到的.
    mm/slub.c
    mod_zone_page_state(page_zone(page),
    (s->flags & SLAB_RECLAIM_ACCOUNT) ?
    NR_SLAB_RECLAIMABLE : NR_SLAB_UNRECLAIMABLE,
    1 << oo_order(oo));