第47讲 perfetto 内存分析之memory counters和events|极客笔记-凯发k8旗舰厅

本讲是android camera性能分析专题的第47讲,我们介绍perfetto内存分析之memory相关的counters和events。

更多资源:

资源 描述
在线课程
知识星球 星球名称:深入浅出android camera
星球id: 17296815
wechat 极客笔记圈

perfetto memory counters 和 events

perfetto可以在android系统上通过ftrace和/proc节点收集大量与内存相关的事件(events)和计数器(counters)

counters(定时poll /proc节点)

  • 进程相关的内存计数器
  • 系统相关的内存计数器

events(ftrace)

  • rss_stat
  • mm_event

  • ion/dmabuf

  • lmk

perfetto 进程相关的内存计数器

定期去/proc//status/proc//oom_score_adj poll数据

traceconfig

perfetto 进程相关的内存计数器

  • proc_stats_poll_ms 需要>100

ui

perfetto 进程相关的内存计数器

参数 /proc节点 说明
mem.locked vmlck vmlck代表进程已经锁住的物理内存的大小.锁住的物理内存不能交换到硬盘
mem.rss vmrss rss值,这里的值是rssanon、rssfile和rssshmem的和
mem.rss.anon rssanon 匿名rss内存大小
mem.rss.file rssfile 文件rss内存大小
mem.rss.shmem rssshmem 共享内存rss内存大小
mem.rss.watermark vmhwm peak rss(“high water mark”).
mem.swap vmswap 进程swap内存大小
mem.virt vmsize 进程虚拟内存大小
oom_score_adj oom_score_adj 当前该进程的oom score adj值

sql查询语句

select c.ts, c.value, t.name as counter_name, p.name as proc_name, p.pid
from counter as c 
left join process_counter_track as t on c.track_id = t.id
left join process as p using (upid)
where t.name like 'mem.%' and proc_name like '�meraserver%'

运行结果

perfetto 进程相关的内存计数器

perfetto 系统相关的内存计数器

定期去/proc/vmstat/proc/meminfo poll数据

节点 说明
/proc/meminfo 系统全局的内存使用状况
/proc/vmstat 虚拟内存统计,有关交换、回收、压缩和页缓存(page cache)效率的统计信息

traceconfig

data_sources: {
    config {
        name: "linux.sys_stats"
        sys_stats_config {
            meminfo_period_ms: 1000
            meminfo_counters: meminfo_mem_total
            meminfo_counters: meminfo_mem_free
            meminfo_counters: meminfo_mem_available
            vmstat_period_ms: 1000
            vmstat_counters: vmstat_nr_free_pages
            vmstat_counters: vmstat_nr_alloc_batch
            vmstat_counters: vmstat_nr_inactive_anon
            vmstat_counters: vmstat_nr_active_anon
        }
    }
}

ui

perfetto 系统相关的内存计数器

sql查询语句

select c.ts, t.name, c.value / 1024 as value_kb
from counters as c
left join counter_track as t on c.track_id = t.id
where t.name like '%memfree%'

运行结果

perfetto 系统相关的内存计数器

perfetto 内存事件

rss_stat ftrace(>=linux v5.5-rc1)

  • 与/proc/pid/status里面的vmrss一样,统计某个进程的rss使用情况,差异点在于rss_stat是主动记录rss的变化,因此它能抓住非常短时间内的rss抖动

mm_event ftrace

  • 与/proc/vmstat一样,统计虚拟内存的使用情况,差异点是mm_event是主动上报,因mm_event数据量非常大,因此这里只统计直方图数据

mm_event事件与统计类型:

事件类型 描述
mem.mm.min_flt 小缺页中断(minor fault) page cache中已经缓存进程所需要的页面数据了,只要把该页面数据与进程的虚拟地址空间建立映射关系就可以了
mem.mm.maj_flt 大缺页中断(major fault) 内存中没有缓存进程所需要的页面数据,内核必需要通知cpu从磁盘中把页面数据加载到内存中来。
mem.mm.swp_flt 这个事件表示发生了交换空间(swap space)缺页中断。当系统内存不足时,操作系统会将一些不常用的页面移出物理内存,并将其存储到磁盘上的交换空间。当进程需要访问这些页面时,就会发生交换空间页面错误。
mem.mm.read_io 表示进行了读取i/o操作。当进程需要从磁盘加载数据或执行文件时,会触发读取i/o操作。这个事件可以用于分析系统中读取操作的性能瓶颈和行为。
mem.mm.compaction 表示内存碎片整理操作。当系统运行时,频繁的内存分配和释放可能导致内存碎片的产生。为了提高内存利用率,操作系统会定期进行内存碎片整理,将分散的小块内存合并成更大的连续块。
mem.mm.reclaim 表示内存回收操作。当系统内存紧张时,操作系统会尝试回收不再使用的内存页面以供其他进程使用。内存回收可以通过释放未使用的缓存页面、交换页面等方式来实现。
事件统计类型 描述
count 从上一个记录事件开始,到记录当前事件,这段时间该时间发生了多少次。
min_lat 从上一个记录事件开始,到记录当前事件,最小延迟(mm事件的持续时间)
max_lat 从上一个记录事件开始,到记录当前事件,最大延迟(mm事件的持续时间)

traceconfig

data_sources: {
    config {
        name: "linux.ftrace"
        ftrace_config {
            ftrace_events: "kmem/rss_stat"
            ftrace_events: "mm_event/mm_event_record"
        }
    }
}

ui

perfetto 内存事件

perfetto 统计ion/dmabuf使用情况

traceconfig

data_sources: {
    config {
        name: "linux.ftrace"
        ftrace_config {
            ftrace_events: "ion/ion_stat"
            ftrace_events: "dmabuf_heap/dma_heap_stat"
            ftrace_events: "kmem/ion_heap_grow"
            ftrace_events: "kmem/ion_heap_shrink"
        }
    }
}

ui

系统行为:

perfetto 统计ion/dmabuf使用情况

单独进程:

perfetto 统计ion/dmabuf使用情况

perfetto 统计lmk发生情况

traceconfig

data_sources: {
    config {
        name: "linux.ftrace"
        ftrace_config {
            ftrace_events: "lowmemorykiller/lowmemory_kill"
            ftrace_events: "oom/oom_score_adj_update"
            atrace_apps: "lmkd"
        }
    }
}

ui

perfetto 统计lmk发生情况

camera课程

python教程

java教程

web教程

数据库教程

图形图像教程

办公软件教程

linux教程

计算机教程

大数据教程

开发工具教程

android camera性能分析

网站地图