首页 > 系统相关 >内存管理-31-进程内存占用-4-/proc/pid/smaps

内存管理-31-进程内存占用-4-/proc/pid/smaps

时间:2024-08-26 22:04:56浏览次数:8  
标签:kB smaps 31 打印 mss vm vma 内存

基于msm-5.4

一、初探

1. 打印格式

# cat /proc/593/smaps
...
7e5a528000-7e5a626000 r--p 00000000 00:1f 5                              /dev/binderfs/hwbinder
Size:               1016 kB
KernelPageSize:        4 kB
MMUPageSize:           4 kB
Rss:                   4 kB
Pss:                   4 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:         4 kB
Private_Dirty:         0 kB
Referenced:            4 kB
Anonymous:             0 kB
LazyFree:              0 kB
AnonHugePages:         0 kB
ShmemPmdMapped:        0 kB
FilePmdMapped:        0 kB
Shared_Hugetlb:        0 kB
Private_Hugetlb:       0 kB
Swap:                  0 kB
SwapPss:               0 kB
Locked:                0 kB
THPeligible:            0
VmFlags: rd mr dc nr mm
...

注:打印诸多这样的单元,这里只摘抄一个。

打印成员说明:

Size: vma->vm_end - vma->vm_start

KernelPageSize: 若没有使能 CONFIG_HUGETLB_PAGE,则恒打印 PAGE_SIZE 的值。

MMUPageSize: 若没有使能 CONFIG_HUGETLB_PAGE,也恒打印 PAGE_SIZE 的值。

Rss: mss->resident

Pss: mss->pss >> PSS_SHIFT

Shared_Clean: mss->shared_clean

Shared_Dirty: mss->shared_dirty

Private_Clean: mss->private_clean

Private_Dirty: mss->private_dirty

Referenced: mss->referenced

Anonymous: mss->anonymous

LazyFree: mss->lazyfree

AnonHugePages: mss->anonymous_thp

ShmemPmdMapped: mss->shmem_thp

FilePmdMapped: mss->file_thp

Shared_Hugetlb: mss->shared_hugetlb

Private_Hugetlb: mss->private_hugetlb >> 10

Swap: mss->swap

SwapPss: mss->swap_pss >> PSS_SHIFT

Locked: mss->pss_locked >> PSS_SHIFT

THPeligible: 表示透明大页是否使能。

VmFlags: rd mr dc nr mm:打印的是 vma->vm_flags,详见 show_smap_vma_flags()


2. 实现

static const struct pid_entry tgid_base_stuff[] = {
    REG("smaps",      S_IRUGO, proc_pid_smaps_operations),
};
static const struct pid_entry tgid_base_stuff[] = {
    REG("smaps",      S_IRUGO, proc_pid_smaps_operations),
};

static int show_smap(struct seq_file *m, void *v) //proc/task_mmu.c
{
    struct vm_area_struct *vma = v;
    struct mem_size_stats mss;

    memset(&mss, 0, sizeof(mss));

    smap_gather_stats(vma, &mss);

    /* 第一行由这里打印出来的,见对 maps 文件的注释 */
    show_map_vma(m, vma);
    /* 若 vma->anon_name 存在则进行打印,如 [anon:.bss] [anon:stack_and_tls:2129] [anon:scudo:primary] 等*/
    if (vma_get_anon_name(vma)) {
        seq_puts(m, "Name:           ");
        seq_print_vma_name(m, vma);
        seq_putc(m, '\n');
    }

    SEQ_PUT_DEC("Size:           ", vma->vm_end - vma->vm_start);
    SEQ_PUT_DEC(" kB\nKernelPageSize: ", vma_kernel_pagesize(vma));
    SEQ_PUT_DEC(" kB\nMMUPageSize:    ", vma_mmu_pagesize(vma));
    seq_puts(m, " kB\n");

    /* 主要是这个函数进行打印的 */
    __show_smap(m, &mss, false);

    seq_printf(m, "THPeligible:        %d\n", transparent_hugepage_enabled(vma));

    /* 打印 vma->vm_flags */
    show_smap_vma_flags(m, vma);

    /* 遍历下一个vma */
    m_cache_vma(m, vma);

    return 0;
}

 

标签:kB,smaps,31,打印,mss,vm,vma,内存
From: https://www.cnblogs.com/hellokitty2/p/18381666

相关文章

  • 【C++ 面试 - 内存管理】每日 3 题(三)
    ✍个人博客:Pandaconda-CSDN博客......
  • 内存管理-30-系统内存占用
    基于msm-5.4一、前言1.相关名词介绍RSS(ResidentSetSize)‌:这是进程当前在物理内存中占用的空间,包括进程本身和所有链接库。RSS是评估进程内存占用的一个重要指标,它直接反映了进程当前实际使用的物理内存量‌。但由于包含了共享库,用处不大。‌PSS(ProportionalSetSize)‌......
  • 内存管理-31-进程内存占用-1-/proc/pid/status
    基于msm-5.4一、初探1.打印格式#cat/proc/593/statusName:surfaceflinger...VmPeak:11322904kBVmSize:11306812kBVmLck:0kBVmPin:0kBVmHWM:92828kBVmRSS:91100kBRssAnon:19708kBRssFile:70884kB......
  • limu|P31-34|CPU和GPU
    目录CPUVSGPU提升CPU利用率1、提升空间和时间的内存本地性2、并行以利用所有核提升GPU利用率1、并行2、内存本地性3、少用控制语句4、不要频繁在CPU和GPU之间传数据单机多卡并行分布式计算CPUVSGPU首先,一个芯片的空间是有限的,给了很多空间给某个内容(能力强),其他内容的空间就......
  • sqli-labs靶场通关攻略 31-35
    主页有sqli-labs靶场通关攻略1-30第三一关less-31闭合方式为?id=1&id=1")--+步骤一:查看数据库名http://127.0.0.1/less-31/?id=1&id=-1%22)%20union%20select%201,database(),3%20--+ 步骤二:查看表名http://127.0.0.1/less-31/?id=1&id=-1%22)%20union%20select%2......
  • sqli-labs靶场通关攻略(31-35关)
    第31关(")闭合)查数据库?id=")unionselect1,2,database()--+查表?id=")unionselect1,2,group_concat(table_name)frominformation_schema.tableswheretable_schema='security'--+查列?id=")unionselect1,2,group_concat(column_nam......
  • Spring Boot 3 中的性能优化:更快的启动时间和更低的内存占用
    随着微服务架构的普及,SpringBoot因其简洁的配置和快速的开发周期,成为了众多开发者的首选框架。然而,随着应用规模的增大和复杂度的提升,如何优化SpringBoot应用的启动时间和内存占用成为了一个重要的课题。本文将探讨在SpringBoot3中可以采取的一些性能优化措施,以实现......
  • JVM-内存结构(超详细)
    目录程序计数器(PC寄存器)定义作用特点Java虚拟机栈定义结构​编辑栈帧的结构栈帧的生命周期JVM压栈出栈过程Java虚拟机栈的特点常见运行时异常本地方法栈(NativeMethodStack)定义作用结构生命周期特点堆定义特点新生代、老年代对象分配过程总结方......
  • 学懂C++(四十四):C++ 自定义内存管理的深入解析:内存池与自定义分配器
    目录1.内存池(MemoryPool)概念模型特点核心点实现适用场景经典示例实现代码解析2.自定义分配器(CustomAllocators)概念模型特点核心点实现适用场景经典示例实现代码解析高级自定义分配器示例代码解析总结        C++作为一种高性能编程语言,在......
  • 【日记】这个月花了好多钱(1317 字)
    正文这几天都好热。热到人不想动,只想睡觉。今天写文章发现自己有个很显著的特点,就是在有个框架之后,具体细节完全没有预设。我只能像马尔可夫链一样,形成一个比较窄的窗口,接着这个窗口里的情节往下写,否则我就会宕机,写不出来。整个故事情节看起来也就比较散。马尔可夫链拯......