美文网首页
Perfetto 翻译-trace分析-PerfettoSQL

Perfetto 翻译-trace分析-PerfettoSQL

作者: David_zhou | 来源:发表于2023-10-31 10:18 被阅读0次

前言:虽然有翻译软件,虽然有chatgpt,毕竟语言隔阂,对这个工具还是一知半解,因此想通过翻译的方式和大家来一起学习下Perfetto这个强大的工具

目录

#####################以下分割线#####################
英文原文在这里

Perfetto SQL-常用查询

此页面是执行特定分析时常见查询的参考指南。

计算切片的 CPU 时间

如果收集包含调度信息(即来自 ftrace)和用户空间切片(即来自 atrace)的跟踪,则可以计算出每个用户空间切片在 CPU 上运行所花费的实际时间:这通常称为切片的“CPU 时间”。
首先,设置视图以简化后续查询:

DROP VIEW IF EXISTS slice_with_utid;
CREATE VIEW slice_with_utid AS
SELECT
  ts,
  dur,
  slice.name as slice_name,
  slice.id as slice_id, utid,
  thread.name as thread_name
FROM slice
JOIN thread_track ON thread_track.id = slice.track_id
JOIN thread USING (utid);

DROP TABLE IF EXISTS slice_thread_state_breakdown;
CREATE VIRTUAL TABLE slice_thread_state_breakdown
USING SPAN_LEFT_JOIN(
  slice_with_utid PARTITIONED utid,
  thread_state PARTITIONED utid
);

然后,要计算跟踪中所有切片的 CPU 时间,请执行以下操作:

SELECT slice_id, slice_name, SUM(dur) AS cpu_time
FROM slice_thread_state_breakdown
WHERE state = 'Running'
GROUP BY slice_id;

您还可以计算特定切片的 CPU 时间:

SELECT slice_name, SUM(dur) AS cpu_time
FROM slice_thread_state_breakdown
WHERE slice_id = <your slice id> AND state = 'Running';

这些查询可以简单修改以计算其他类似的指标。例如,要获取“runnable”和“uninterruptible sleep”所花费的时间:

SELECT
  slice_id,
  slice_name,
  SUM(CASE state = 'R' THEN dur ELSE 0 END) AS runnable_time,
  SUM(CASE state = 'D' THEN dur ELSE 0 END) AS uninterruptible_time
FROM slice_thread_state_breakdown
GROUP BY slice_id;
通过唤醒线程计算调度时间

给定的线程可能会导致其他线程唤醒,即有任务给到了其他线程。对于给定的线程,通过它唤醒的线程运行的时间可以很好的了解到,此线程正在生成多少任务。
若要计算此值,可以使用以下查询:

SELECT
  SUM((
    SELECT dur FROM sched
    WHERE
      sched.ts > wakee_runnable.ts AND
      wakee_runnable.utid = wakee_runnable.utid
    ORDER BY ts
    LIMIT 1
  )) AS scheduled_dur
FROM thread AS waker
JOIN thread_state AS wakee_runnable ON waker.utid = wakee_runnable.waker_utid
WHERE waker.name = <your waker thread name here>

要同时对跟踪中的所有线程执行此操作,请执行以下操作:

SELECT
  waker_process.name AS process_name,
  waker.name AS thread_name,
  SUM((
    SELECT dur FROM sched
    WHERE
      sched.ts > wakee_runnable.ts AND
      sched.utid = wakee_runnable.utid
    ORDER BY ts
    LIMIT 1
  )) AS scheduled_dur
FROM thread AS waker
JOIN process AS waker_process USING (upid)
JOIN thread_state AS wakee_runnable ON waker.utid = wakee_runnable.waker_utid
WHERE waker.utid != 0
GROUP BY 1, 2
ORDER BY 3 desc

#####################以上分割线#####################

后记:
1 本次主要使用百度翻译,虽然被骂,但至少翻译这个工具降低了门槛。
2 英文文档中的长难句真的是又长又难,基于百度的翻译,然后自己再调整下,水平实在有限。
3 技术背景知识不够,有些专有名词不知道怎么翻译,也不知道百度翻译的是否准确,功夫在诗外。
4 万事开头难,中间难不难,还不知道。中间的事后面再说,正确一天翻译一篇。
5 虽然可能会有人不屑,但总要有人去做不起眼的小事。
6 google 厉害,这个perfetto 工具也很厉害。君子善假于物也。
7 工具的使用是最简单的入门,背后还有更多的东西值得学习。
8 水平实在有限,闻过则喜,希望有更多的人反馈,期待更好的建议

相关文章

  • Perfetto工具用法

    一、抓取trace Perfetto配置 Perfetto在Android 9以上默认预制,但没有开启开启方法: ...

  • Perfetto工具使用简介

    简介 Perfetto工具是Android下一代全新的统一的trace收集和分析框架,可以抓取平台和app的tra...

  • 性能深度分析之System Trace

    性能深度分析之System Trace性能深度分析之System Trace

  • MYSQL 8 優化之04 (通过trace分析)

    1.打开trace & 设置格式为json,并设置trace的最大能够使用内存大小 trace 分析

  • 预览卡顿丢帧的问题

    通过perfetto分析预览丢帧或者预览卡顿的问题。 看cameraservice进程,找到 frame capt...

  • 微信小程序性能测试之Trace工具

    一、Trace工具介绍 微信小程序开发工具中提供了trace工具,利用trace工具可时时监控小程序的性能。分析t...

  • TraceView

    使用代码生成.trace文件,分析代码执行时间通过Debug class 检测代码生成logs保存到.trace文...

  • ANR分析

    ANR日志分析 获取日志 trace文件解析 trace文件例子 关注主线程调用栈,断点调试若干次就可搞定了。 基...

  • go 的性能分析工具 trace

    trace 这个工具跟踪采集一段时间的信息,然后 dump 成文件,最后调用 go tool trace 分析 d...

  • 【java】java 线程在线分析工具

    jstack(查看线程)、jmap(查看内存)和jstat(性能分析) jstack - Stack Trace ...

网友评论

      本文标题:Perfetto 翻译-trace分析-PerfettoSQL

      本文链接:https://www.haomeiwen.com/subject/tfviidtx.html