前言:虽然有翻译软件,虽然有chatgpt,毕竟语言隔阂,对这个工具还是一知半解,因此想通过翻译的方式和大家来一起学习下Perfetto这个强大的工具
#####################以下分割线#####################
英文原文在这里
PerfettoSQL 内置查询
这些是内置于 C++ 中的函数,可减少需要用 SQL 编写的样板数量。
Profile Functions
STACK_FROM_STACK_PROFILE_FRAME
STACK_FROM_STACK_PROFILE_FRAME(frame_id)
描述 创建一个堆栈,其中仅包含引用的帧(对stack_profile_frame 表的引用 frame_id
)
返回类型
BYTES
参数
Argument论点 | Type类型 | Description描述 |
---|---|---|
frame_id | StackProfileFrameTable::Id 堆栈配置文件框架表::Id | reference to the stack_profile_frame table 对 stack_profile_frame 表的引用 |
STACK_FROM_STACK_PROFILE_CALLSITE
STACK_FROM_STACK_PROFILE_CALLSITE(callsite_id)
通过获取 callsite_id
(引用自 [stack_profile_callsite]](sql-tables.autogen#stack_profile_callsite) 表)并生成帧列表(通过遍历 [stack_profile_callsite]](sql-tables.autogen#stack_profile_callsite) 表)创建堆栈
返回类型
BYTES
参数
Argument | Type | Description |
---|---|---|
callsite_id | StackProfileCallsiteTable::Id | reference to the [stack_profile_callsite]](sql-tables.autogen#stack_profile_callsite) table |
CAT_STACKS
CAT_STACKS(([root [[,level_1 [, ...]], leaf]])
描述
通过连接其他堆栈来创建堆栈。还接受为其生成假 Frame 的 STRING 值。Null 值将被忽略。
返回类型
BYTES
参数
Argument | Type | Description |
---|---|---|
root | BYTES or STRING | Stack or STRING for which a fake Frame is generated |
... | BYTES or STRING | Stack or STRING for which a fake Frame is generated |
leaf | BYTES or STRING | Stack or STRING for which a fake Frame is generated |
EXPERIMENTAL_PROFILE
EXPERIMENTAL_PROFILE(stack [,sample_type, sample_units, sample_value]*)
描述
聚合函数,用于从给定样本生成 pprof 格式的profile。
返回类型
BYTES
(PPROF数据)
参数
Argument | Type | Description |
---|---|---|
stack | BYTES | Stack or string for which a fake Frame is generated |
sample_type | STRING | Type of the sample value (e.g. size, time) |
sample_units | STRING | Units of the sample value (e.g. bytes, count) |
sample_value | LONG | Value for the sample |
可以指定多个样本。
如果仅存在参数 stack
,则 "samples"
"count"
和 1会当做sample_type
, sample_units
和 sample_value
的 默认值。
示例
CPU profile
SELECT
perf_session_id,
EXPERIMENTAL_PROFILE(
STACK_FROM_STACK_PROFILE_CALLSITE(callsite_id),
'samples',
'count',
1) AS profile
FROM perf_sample
GROUP BY perf_session_id
Heap profile
SELECT
EXPERIMENTAL_PROFILE(
CAT_STACKS(heap_name, STACK_FROM_STACK_PROFILE_CALLSITE(callsite_id)),
'count',
'count',
count,
'size',
'bytes',
size) AS profile
FROM heap_profile_allocation
WHERE size >= 0 AND count >= 0
#####################以上分割线#####################
后记:
1 本次主要使用百度翻译,虽然被骂,但至少翻译这个工具降低了门槛。
2 英文文档中的长难句真的是又长又难,基于百度的翻译,然后自己再调整下,水平实在有限。
3 技术背景知识不够,有些专有名词不知道怎么翻译,也不知道百度翻译的是否准确,功夫在诗外。
4 万事开头难,中间难不难,还不知道。中间的事后面再说,正确一天翻译一篇。
5 虽然可能会有人不屑,但总要有人去做不起眼的小事。
6 google 厉害,这个perfetto 工具也很厉害。君子善假于物也。
7 工具的使用是最简单的入门,背后还有更多的东西值得学习。
8 水平实在有限,闻过则喜,希望有更多的人反馈,期待更好的建议
网友评论