首页 > 系统相关 >内存管理-32-系统内存统计-4-/proc/vmstat

内存管理-32-系统内存统计-4-/proc/vmstat

时间:2024-08-31 11:48:56浏览次数:4  
标签:stat zone 32 vm thp vmstat VM 内存 nr

基于msm-5.4

一、打印内容

1. 打印格式

# cat /proc/vmstat
/* 1. 打印全局数组 vm_zone_stat[] 的值,enum zone_stat_item 描述各条目 */
nr_free_pages 617775
nr_zone_inactive_anon 16518
nr_zone_active_anon 979541
nr_zone_inactive_file 698879
nr_zone_active_file 172233
nr_zone_unevictable 799
nr_zone_write_pending 23
nr_mlock 799
nr_page_table_pages 30669
nr_kernel_stack 62368
nr_shadow_call_stack_bytes 15966208
nr_bounce 0
nr_zspages 3271
nr_free_cma 0
/* 2. 打印全局数组 vm_node_stat[] 的值,enum node_stat_item 描述各条目 */
nr_inactive_anon 16518
nr_active_anon 979541
nr_inactive_file 698879
nr_active_file 172233
nr_unevictable 799
nr_slab_reclaimable 35540
nr_slab_unreclaimable 56547
nr_isolated_anon 0
nr_isolated_file 0
workingset_nodes 10
workingset_refault 6019
workingset_activate 6019
workingset_restore 0
workingset_nodereclaim 0
nr_anon_pages 982470
nr_mapped 537561
nr_file_pages 899517
nr_dirty 23
nr_writeback 0
nr_writeback_temp 0
nr_shmem 13782
nr_shmem_hugepages 0
nr_shmem_pmdmapped 0
nr_file_hugepages 0
nr_file_pmdmapped 0
nr_anon_transparent_hugepages 0
nr_unstable 0
nr_vmscan_write 18979
nr_vmscan_immediate_reclaim 8
nr_dirtied 77330
nr_written 93219
nr_kernel_misc_reclaimable 40568
nr_unreclaimable_pages 156794
/* 3. 收集全局变量 struct wb_domain global_wb_domain 的成员,分别是 thresh 和 bg_thresh */
nr_dirty_threshold 293883
nr_dirty_background_threshold 73201
/* 4. 以每个cpu为单位,收集 per_cpu(vm_event_states, cpu) 的和,各元素由 enum vm_event_item 描述 */
pgpgin 2174532
pgpgout 297144
pswpin 9200
pswpout 18979
pgalloc_normal 20942336
pgalloc_movable 0
allocstall_normal 0
allocstall_movable 0
pgskip_normal 0
pgskip_movable 0
pgfree 21569479
pgactivate 408312
pgdeactivate 49
pglazyfree 0
pgfault 5143535
pgmajfault 17558
pglazyfreed 0
pgrefill 0
pgsteal_kswapd 0
pgsteal_direct 0
pgscan_kswapd 0
pgscan_direct 0
pgscan_direct_throttle 0
pginodesteal 0
slabs_scanned 0
kswapd_inodesteal 0
kswapd_low_wmark_hit_quickly 0
kswapd_high_wmark_hit_quickly 0
pageoutrun 0
pgrotated 1613
drop_pagecache 0
drop_slab 0
oom_kill 0
pgmigrate_success 806
pgmigrate_fail 0
compact_migrate_scanned 0
compact_free_scanned 0
compact_isolated 8531
compact_stall 0
compact_fail 0
compact_success 0
compact_daemon_wake 0
compact_daemon_migrate_scanned 0
compact_daemon_free_scanned 0
unevictable_pgs_culled 802
unevictable_pgs_scanned 0
unevictable_pgs_rescued 3
unevictable_pgs_mlocked 803
unevictable_pgs_munlocked 4
unevictable_pgs_cleared 0
unevictable_pgs_stranded 0
thp_fault_alloc 0
thp_fault_fallback 0
thp_collapse_alloc 0
thp_collapse_alloc_failed 0
thp_file_alloc 0
thp_file_mapped 0
thp_split_page 0
thp_split_page_failed 0
thp_deferred_split_page 0
thp_split_pmd 0
thp_zero_page_alloc 0
thp_zero_page_alloc_failed 0
thp_swpout 0
thp_swpout_fallback 0
swap_ra 57
swap_ra_hit 39

打印的各个条目的字符串来自 vmstat_text[], 各条目的值分别来自全局数组 vm_zone_stat[]、全局数组 vm_node_stat[]、全局变量 struct wb_domain global_wb_domain 的成员、以每个cpu为单位收集 per_cpu(vm_event_states, cpu) 的和。


2. 成员说明


二、实现

void __init init_mm_internals(void) //vmstat.c
{
    proc_create_seq("vmstat", 0444, NULL, &vmstat_op);
}

static void *vmstat_start(struct seq_file *m, loff_t *pos) //vmstat.c
{
    unsigned long *v;
    int i, stat_items_size;

    /* 表示要分配内存的大小,这些条目的信息都会在这里进行打印 */
    stat_items_size = NR_VM_ZONE_STAT_ITEMS * sizeof(unsigned long) +
              NR_VM_NUMA_STAT_ITEMS * sizeof(unsigned long) +
              NR_VM_NODE_STAT_ITEMS * sizeof(unsigned long) +
              NR_VM_WRITEBACK_STAT_ITEMS * sizeof(unsigned long);

#ifdef CONFIG_VM_EVENT_COUNTERS
    stat_items_size += sizeof(struct vm_event_state);
#endif

    m->private = v = kmalloc(stat_items_size, GFP_KERNEL);

    /* 1. 收集全局数组 vm_zone_stat[] 的信息 */
    for (i = 0; i < NR_VM_ZONE_STAT_ITEMS; i++) //enum zone_stat_item条目的个数
        v[i] = global_zone_page_state(i); //v[i] = vm_zone_stat[i]
    v += NR_VM_ZONE_STAT_ITEMS;

    /* 2. 收集全局数组 vm_node_stat[] 的信息 */
    for (i = 0; i < NR_VM_NODE_STAT_ITEMS; i++) //enum node_stat_item 条目的个数
        v[i] = global_node_page_state(i); //v[i] = vm_node_stat[i];
    v += NR_VM_NODE_STAT_ITEMS;

    /* 3. 收集全局变量 struct wb_domain global_wb_domain 的成员。
     * v[0]=dirty_throttle_control.thresh; v[1]=dirty_throttle_control.bg_thresh;
     */
    global_dirty_limits(v + NR_DIRTY_BG_THRESHOLD, v + NR_DIRTY_THRESHOLD);
    v += NR_VM_WRITEBACK_STAT_ITEMS;

#ifdef CONFIG_VM_EVENT_COUNTERS
    /* 4. 以每个cpu为单位收集 per_cpu(vm_event_states, cpu) 的和 */
    all_vm_events(v); //enum vm_event_item 有 NR_VM_EVENT_ITEMS 个条目
    v[PGPGIN] /= 2;     /* sectors -> kbytes */
    v[PGPGOUT] /= 2;
#endif
    return (unsigned long *)m->private + *pos;
}

 

标签:stat,zone,32,vm,thp,vmstat,VM,内存,nr
From: https://www.cnblogs.com/hellokitty2/p/18390061

相关文章

  • 一个操作系统的设计与实现——第19章 IA32-e模式
    19.164位段描述符与GDT在32位操作系统中,我们使用的是平坦模型而非分段模型,从而,段描述符的段基址和段限长均成了摆设。在64位模式下,就连CPU也淘汰了分段模型,转而固定使用平坦模型。64位代码段描述符如下图所示:如图所示,由于固定使用平坦模型,段描述符中的段基址、段限长、粒度等......
  • 一个操作系统的设计与实现——第20章 加载64位内核,64位显卡驱动与内存管理系统
    20.164位ELF格式在64位模式下,由于内存地址变宽,ELF格式中的内存地址也要跟着变宽。这并不是一个麻烦的问题,因为ELF格式的整体结构没有发生变化,仍然由一个文件头,加上若干程序头表组成。对于64位ELF格式的文件头,我们需要关注的信息如下表所示:偏移量字节数含义0x188程......
  • 【ESP32-S3】基于正点原子ESP32-S3M开发(二)--Arduino环境搭建
    Arduino开发环境搭建使用Arduino开发难度低,开发效率高,但运行效率低,编译时间长,适合电子爱好者等非专业人士使用正点原子官方资料下载地址提取码:ixmr安装Arduino到资料盘A>6,软件资料>1,软件>3,Arudino开发工具下找到安装包并安装设置中文请添加图片描述安装库......
  • antd vue switch组件怎么把值true、false改为uint32类型的1和0
    背景已知switch组件的checked属性默认是传入true和false的,但是有这样的业务情景,既需要使用的是开关,又需要传入的是整数,那么我们应该如何修改呢?解决方案<a-form-itemlabel="允许失败时保存"><a-switch:checked="switchValue===1"@change="handleSwitchChan......
  • 【C语言】内存函数
    文章目录前言一、memcpy的使用和模拟实现1.memcpy的使用2.模拟实现memcpy函数二、memmove的使用和模拟实现1.memmove的使用2.模拟实现memmove函数三、memset函数的使用四、memcmp函数的使用前言`内存函数的头文件都是<string.h>介绍了memcpy、memmove、memset......
  • PY32F002A单片机开发板 PY32F002AF15P6开发板 32位MCU,M0+内核
    PY32F002A开发板上搭载的是PY32F002AF15P6单片机,TSSOP20封装,开发板使用TypeC接口供电,可以用来对PY32F002A芯片进行开发调试。PY32F002A开发板推荐使用我们的PY32link来下载仿真,绝大部分的STlink,Jlink,DAPlink也可以下载仿真,需自行测试。开发资料齐全,提供了LL库和HAL库,支持IAR......
  • 最全!嵌入式STM32单片机开发环境配置教学Win/Mac!!!DA
    合集-环境配置(1)1.最全!嵌入式STM32单片机开发环境配置教学Win/Mac!!!08-28收起嵌入式STM32单片机开发环境配置教学Win/Mac·本教程支持Windows和Mac·Windows可选的开发软件为Keil、Clion、STM32CubeMX,可自由选择开发方式·Mac的开发环境为(Clion+OpenOCD+STM32CubeMX),仅支......
  • Redis 内存碎片原因及清理
    一、Redis内存碎片内存碎片是指在内存分配的时候,产生的不能重复利用的空间。例如,内存空间还有3K,应用程序想申请连续的3K空间,虽然内存空间够,但是空间分配为2K,1K,总空间够,但是不连续,导致应用程序申请失败,这种无法利用的内存空间称之为"内存碎片"。内存分片会占用操作系统分配给redis......
  • 基于 Quanto 和 Diffusers 的内存高效 transformer 扩散模型
    过去的几个月,我们目睹了使用基于transformer模型作为扩散模型的主干网络来进行高分辨率文生图(text-to-image,T2I)的趋势。和一开始的许多扩散模型普遍使用UNet架构不同,这些模型使用transformer架构作为扩散过程的主模型。由于transformer的性质,这些主干网络表现出了良好......
  • P3320 [SDOI2015] 寻宝游戏 与 P10930 异象石 与 CF176E Archaeology
    思路:考虑按照dfn序将关键点的集合排序后为\(a_0,a_1,\cdots,a_k\),则答案为:\[\frac{\sum\limits_{i=0}^k\operatorname{dis}(a_i,a_{(i+1)\bmodk})}{2}\]简单证明一下:需要找出包含一些关键点的最小联通导出子图。则随便以一个关键点为根,对于子树内没有关键点的子树直接......