【Camera 性能笔记】六、Perfetto分析及SQL

文章详细分析了CPU状态(包括休眠、运行和阻塞)、线程活动情况以及与之相关的CPU使用率统计,涵盖了进程、频率、帧率、内存占用和OOMScoreAdj等方面,提供了SQL查询示例来监控特定进程和线程的性能指标。
摘要由CSDN通过智能技术生成

    CPU状态
        sleeping      线程处于休眠状态 一般是在等待事件驱动
        runnable      线程有任务要运行,但是没有cpu调度让它运行,如果长时间调度不到,说明CPU繁忙
        running     线程正在运行
        uninterruptible  sleep  NON IO      不可中断的休眠,非IO  在等内核锁,通常是低内存导致等待
        uninterruptible  sleep  Block IO       不可中断的休眠   IO阻塞
            ::blocked_reason

    CPU usage:
        某阶段总的CPU运行时间 / duration
        Wall duration / selected range
    
    某个进程CPU Usage From SQL:
        SELECT process.name, (sum(dur)/1e9) AS cpu_sec
        FROM sched
        JOIN thread using(utid)
        JOIN process using(upid)
        WHERE ts <= (SELECT ts+5000000000 FROM sched ORDER BY ts LIMIT 1)
        GROUP BY upid
        ORDER BY cpu_sec desc
        LIMIT 100;
    统计某个进程在各CPU上的CPU Usage:
        SELECT
          process.name as process,
          cpu,
          sum(dur) / 1e9 as cpu_sec
        FROM sched
        INNER JOIN thread USING(utid)
        INNER JOIN process USING(upid)
        WHERE process.name LIKE "%cameraserver%"
        GROUP BY upid, cpu
        ORDER BY cpu_sec desc
        LIMIT 300;
    统计某个线程在各CPU上的CPU Usage From SQL:
        SELECT
          thread.name as thread,
          cpu,
          sum(dur) / 1e9 as cpu_sec
        FROM sched
        INNER JOIN thread USING(utid)
        INNER JOIN process USING(upid)
        WHERE thread.name LIKE "%C3Dev-0-ReqQueu%"
        GROUP BY utid, cpu
        ORDER BY cpu_sec desc
        LIMIT 300;
    查看各CPU支持的所有频率:
        select * from cpu_freq
        
    条件查询时,忽略大小写
        SELECT * FROM slice WHERE LOWER(name) LIKE "%cam%" LIMIT 50
    
    Trace最开始的5秒,每个进程的CPU Time
        SELECT process.name, SUM(sched.dur)/1e9 AS cpu_sec
        FROM sched
        JOIN thread using(utid)
        JOIN process using(upid)
        WHERE ts <= (SELECT ts+5000000000 FROM sched ORDER BY ts LIMIT 1)
        GROUP BY upid
        ORDER BY cpu_sec DESC
        LIMIT 100;
    
    统计处理Camera CaptureRequest的帧率
        SELECT COUNT(*)/((MAX(ts) - MIN(ts))/1e9) AS Request_FPS
        FROM slice
        WHERE name='frame capture'

    统计某路Camera Stream的帧率(以预览为例)
        SELECT COUNT(*)/((MAX(ts) - MIN(ts))/1e9) AS FPS
        FROM slice
        JOIN thread_track ON slice.track_id = thread_track.id
        JOIN thread USING(utid)
        WHERE slice.name LIKE '%queueBuffer%' AND thread.name like '%PreviewSpacer%'

    统计某路Camera Stream相邻两帧的时间间隔,用于衡量抖动(以预览为例)
        SELECT ((slice.ts) - LAG(slice.ts,1) OVER (ORDER BY (slice.ts) ASC))/1e6 AS diff_ms
        FROM slice
        JOIN thread_track ON slice.track_id = thread_track.id
        JOIN thread USING(utid)
        WHERE slice.name LIKE '%queueBuffer%' AND thread.name like '%PreviewSpacer%'
        LIMIT -1 OFFSET 1 --LIMIT设置为-1表示选择所有剩余行,OFFSET为1表示跳过第一行

    查看cameraservver的内存
        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值
        
        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 '%cameraserver%'

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cam_Rxy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值