这是命令 perf-report,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器
程序:
您的姓名
perf-report - 读取 perf.data(由 perf 记录创建)并显示配置文件
概要
PERF 报告 [-一世| --输入=文件]
商品描述
此命令显示通过 perf 记录的性能计数器配置文件信息
记录。
配置
-i,--输入=
输入文件名。 (默认值: perf.data 除非标准输入是先进先出)
-v,--详细
再详细点。 (显示符号地址等)
-n, --show-nr-样本
显示每个符号的样本数
--show-cpu-利用率
显示不同 cpu 模式的样本百分比。
-T,--线程
显示每线程事件计数器。 应使用 -s 选项记录输入数据文件。
-c, --通讯=
只考虑这些通信中的符号。 理解的CSV 文件://文件名 条目。
此选项将影响开销列的百分比。 见 --percentage
更多信息。
--pid=
仅显示给定进程 ID(逗号分隔列表)的事件。
--tid=
仅显示给定线程 ID(逗号分隔列表)的事件。
-d,--dsos=
只考虑这些 dsos 中的符号。 理解的CSV 文件://文件名 条目。
此选项将影响开销列的百分比。 见 --percentage
更多信息。
-S,--符号=
只考虑这些符号。 理解的CSV 文件://文件名 条目。 这个选项
将影响开销列的百分比。 有关更多信息,请参阅 --percentage。
--符号过滤器=
仅显示与此过滤器匹配(部分)的符号。
-U, --hide-未解决
仅显示解析为符号的条目。
-s,--排序=
按给定的键对直方图条目进行排序 - 可以以 CSV 格式指定多个键。
以下排序键可用:pid、comm、dso、symbol、parent、cpu、socket、
srcline,重量,local_weight。
每个键的含义如下:
· comm:可以通过读取的任务的命令(名称) /过程//通讯
· pid:任务的命令和tid
· dso:采样时执行的库或模块的名称
· 符号:采样时执行的函数名
· parent:与父正则表达式过滤器匹配的函数名称。 不匹配的条目是
显示为“[其他]”。
· cpu:采样时任务运行的cpu编号
· socket:采样时任务运行的处理器插槽号
· srcline:采样时执行的文件名和行号。 矮人
必须提供调试信息。
·srcfile:与源文件的文件名相同。 需要矮人信息。
· 权重:特定于事件的权重,例如内存延迟或事务中止成本。 这个
是全局权重。
· local_weight:上面权重的本地权重版本。
· 事务:事务中止标志。
· 开销:样本的开销百分比
·overhead_sys:在系统模式下运行的样本的开销百分比
·overhead_us:在用户模式下运行的样本的开销百分比
·overhead_guest_sys:在来宾系统模式下运行的样本的开销百分比
·overhead_guest_us:在guest上以用户模式运行的样本的开销百分比
· 样本:样本数
· period:样本事件计数的原始数量
默认情况下,使用 comm、dso 和符号键。
(即 --sort comm,dso,symbol)
如果使用 --branch-stack 选项,则以下排序键也是
可供选择:
dso_from、dso_to、symbol_from、symbol_to、错误预测。
· dso_from:从库或模块分支的名称
· dso_to:分支到的库或模块的名称
· symbol_from:分支的函数名
· symbol_to:分支到的函数名
· 错误预测:“N”代表预测分支,“Y”代表错误预测分支
· in_tx:TSX交易中的分支
·中止:TSX交易中止。
· 循环:基本程序段中的循环
并且默认排序键更改为 comm、dso_from、symbol_from、dso_to
和symbol_to,见'--branch-stack'。
-F,--字段=
指定输出字段 - 可以以 CSV 格式指定多个键。 以下字段
可用:overhead、overhead_sys、overhead_us、overhead_children、sample 和
时期。 它也可以包含任何排序键。
默认情况下,将附加 -F 中未指定的每个排序键
自动。
如果使用 --mem-mode 选项,还可以使用以下排序键
(与 --branch-stack 不兼容):
symbol_daddr、dso_daddr、锁定、tlb、mem、snoop、dcacheline。
· symbol_daddr:采样时正在执行的数据符号的名称
· dso_daddr:包含正在执行的数据的库或模块的名称
采样时间
· 锁定:采样时总线是否被锁定
· tlb:采样时数据的tlb访问类型
· mem:采样时数据的内存访问类型
· snoop:采样时数据的窥探类型(如果有)
· dcacheline:采样时数据地址所在的cacheline
并且默认排序键更改为 local_weight、mem、sym、dso,
symbol_daddr、dso_daddr、snoop、tlb、锁定,请参阅“--mem-mode”。
-p, --parent=
用于识别父级的正则表达式过滤器。 父级是此函数的调用者,并且
通过调用链搜索,因此需要记录调用链信息。 这
模式采用扩展的正则表达式格式,默认为“^sys_|^do_page_fault”,请参见
- 种类 亲.
-x,--排除-其他
仅显示具有父匹配项的条目。
-w, --column-widths=
强制每个列宽到提供的列表,以提高终端可读性。 0 表示
没有限制(默认行为)。
-t,--字段分隔符=
使用特殊的分隔符,不要用空格填充,替换所有出现的地方
在符号名称(和其他输出)中使用此分隔符 . 性格,因此
它是唯一无效的分隔符。
-D,--转储原始跟踪
以 ASCII 格式转储原始跟踪。
-g, --call-graph=
使用类型、最小百分比阈值、打印限制、调用顺序、排序显示调用链
键和分支。 请注意,参数的顺序不是固定的,因此任何参数都可以
在仲裁令中给出。 一个例外是应该在前面的 print_limit
按门槛。
print_type 可以是:
- flat:单列,调用链的线性曝光。
- 图形:使用图形树,显示绝对开销率。 (默认)
- 分形:类似于图表,但显示相对比率。 每个分支
该树被视为一个新的分析对象。
- none:禁用调用链显示。
阈值是一个百分比值,它指定了一个最小百分比
包含在输出调用图中。 默认值为 0.5 (%)。
print_limit 仅在使用 stdio 接口时应用。 是要限制
单个历史条目中的调用图条目数。 注意它需要
在阈值之后给出(但不一定是连续的)。
默认值为 0(无限制)。
顺序可以是:
- callee:基于被调用者的调用图。
- 调用者:基于调用者的反向调用图。
使用 --children 时默认为 'caller',否则为 'callee'。
sort_key 可以是:
- 功能:比较功能(默认)
- 地址:比较单个代码地址
分支可以是:
- 分支:在可用时在调用图中包含最后一个分支信息。
通常使用 --branch-history 更方便。
- 孩子们
将子项的调用链累积到父项,以便随后可以显示在
输出。 输出将有一个新的“Children”列,并将按数据排序。
它需要记录调用链。 有关更多信息,请参阅“开销计算”部分
细节。
--最大堆栈
解析调用链时设置堆栈深度限制,任何超出指定的
深度将被忽略。 这是信息丢失和更快之间的权衡
尤其适用于可能具有很长调用链堆栈的工作负载。 笔记
当使用 --itrace 选项时,合成的调用链大小将覆盖它
如果合成的调用链大小较大,则该值。
默认值:127
-G, --倒置
基于反向调用者的调用图的别名。
--忽略被调用者=
忽略与给定正则表达式匹配的函数的被调用者。 这具有以下效果
将每个此类函数的调用者收集到调用图树中的一个位置。
--漂亮=
漂亮的印刷风格。 键:正常,原始
--stdio
使用 stdio 接口。
--推
使用 TUI 界面,该界面与 annotate 集成并允许放大 DSO
或线程等功能。 使用 --tui 需要一个 tty,如果不存在,
与管道到其他命令时一样,使用 stdio 接口。
--gtk
使用 GTK2 接口。
-k, --vmlinux=
vmlinux 路径名
--kallsyms=
kallsyms 路径名
-m,--模块
加载模块符号。 警告:这只能与 -k 和 LIVE 内核一起使用。
-f,--强制
不要抱怨,去做吧。
--symfs=
查找带有与此目录相关的符号的文件。
-C,--cpu
仅报告提供的 CPU 列表的示例。 可以提供多个 CPU 作为一个
没有空格的逗号分隔列表:0,1。 CPU 的范围用 -: 0-2 指定。
默认是报告所有 CPU 上的样本。
-M, --反汇编风格=
为 objdump 设置反汇编程序样式。
- 来源
将源代码与汇编代码交错。 默认启用,禁用
——无源。
--asm-原始
显示汇编指令的原始指令编码。
--show-total-期间
显示包含句点总和的列。
-I,--显示信息
显示有关 perf.data 文件的扩展信息。 这增加了信息,可能
非常大,因此可能会使显示混乱。 目前包括:cpu和numa
主机系统的拓扑。
-b,--分支堆栈
使用采样分支的地址代替指令地址
构建直方图。 要生成有意义的输出, perf.data 文件必须是
使用 perf record -b 或 perf record --branch-filter xxx 获得,其中 xxx 是一个分支
过滤选项。 perf 报告能够自动检测 perf.data 文件是否包含
分支堆栈,它会自动切换到分支视图模式,除非
使用 --no-branch-stack。
--分支历史
将采样的分支地址添加到调用堆栈中。 这允许检查
程序到达每个样本的路径。 数据收集必须使用 -b(或
-j) 和 -g。
--objdump=
objdump 二进制文件的路径。
- 团体
一起显示事件组信息。
--demangle
将符号名称分解为人类可读的形式。 它默认启用,禁用
-- 无干扰。
--demangle-内核
将内核符号名称分解为人类可读的形式(对于 C++ 内核)。
--内存模式
除了指令地址之外,还使用样本的数据地址来构建
直方图。 要生成有意义的输出,必须已获得 perf.data 文件
使用 perf record -d -W 并使用特殊事件 -e cpu/mem-loads/ 或 -e
CPU/内存存储/。 看 PERF 成员 为了更简单的访问。
--百分比限制
不要显示开销低于该百分比的条目。 (默认值:0)。
- 百分比
确定如何显示过滤条目的开销百分比。 过滤器可以
通过--comms、--dsos 和/或--symbols 选项和 TUI 上的缩放操作应用
(线程、dso 等)。
“相对”意味着它仅与过滤的条目相关,以便
显示条目的总和将始终为 100%。 “绝对”意味着它保留
应用过滤器前后的原始值。
--标题
在 perf.data 文件中显示头信息。 这包括各种信息,例如
主机名、操作系统和 perf 版本、cpu/mem 信息、perf 命令行、事件列表等。
目前只有 --stdio 输出支持此功能。
--仅标头
仅显示 perf.data 标头(强制 --stdio)。
--itrace
解码指令跟踪数据的选项。 选项是:
我合成指令事件
b 合成分支事件
c 合成分支事件(仅限调用)
r 合成分支事件(仅返回)
x 合成交易事件
e 综合错误事件
d 创建调试日志
g 合成一个调用链(与 i 或 x 一起使用)
l 合成最后一个分支条目(与 i 或 x 一起使用)
默认为所有事件,即与 --itrace=ibxe 相同
此外,指令事件的周期(默认 100000)
可以以以下单位指定:
我指示
滴答声
ms 毫秒
我们微秒
ns 纳秒(默认)
还有指令的调用链大小(默认 16,最大 1024)或
可以指定交易事件。
还有最后一个分支条目的数量(默认 64,最大 1024)
可以指定指令或交易事件。
要完全禁用解码,请使用 --no-itrace。
--完整源路径
显示 srcline 输出的源文件的完整路径。
--show-ref-调用图
当采样多个事件时,可能不需要为所有事件收集调用图
其中。 样本点通常就在附近,收集样本就足够了
参考事件的调用图。 所以用户可以使用“call-graph=no”事件修饰符来
禁用其他事件的调用图以减少开销。 但是,性能报告不能
显示禁用调用图的事件的调用图。 此选项扩展了
性能报告以显示由参考事件收集的参考调用图,在没有
调用图事件。
--socket-过滤器
仅报告与此过滤器匹配的处理器插槽上的样本
高架 计算
开销可以在两列中显示为 儿童 和 自 当 perf 收集
调用链。 这 自 开销是通过将所有周期值相加来计算的
条目 - 通常是一个函数(符号)。 这是 perf 传统上显示的值,并且
所有的总和 自 开销值应为 100%。
这款 孩子 开销是通过将子函数的所有周期值相加来计算的,因此
它可以显示更高级别函数的总开销,即使它们没有
直接执行多了。 儿童 这里的意思是从另一个(父)调用的函数
功能。
所有这些的总和可能会令人困惑 孩子 开销值超过 100%,因为
每一个都已经是 自 其子函数的开销。 但是随着
启用此功能,即使样本是
蔓延到孩子们身上。
考虑以下示例; 有如下三个功能。
.ft C
无效 foo(void) {
/* 做点什么 */
}
空栏(空){
/* 做点什么 */
富();
}
诠释主要(无效){
酒吧()
0返回;
}
英尺
在这种情况下 FOO 是一个孩子 酒吧及 酒吧 是直系子 主 so FOO 也是一个
的孩子 主。 换一种说法, 主 是父母 FOO 和 酒吧及 酒吧 是父母
FOO.
假设所有样本都记录在 FOO 和 酒吧 只要。 当它用调用链记录时
输出将在 perf 的通常(仅自我开销)输出中显示如下内容
报告:
.ft C
架空符号
……………………
60.00% 富
|
--- 富
酒吧
主
__libc_start_main
40.00% 酒吧
|
- - 酒吧
主
__libc_start_main
英尺
启用 --children 选项后, 自 子函数的开销值(即
FOO 和 酒吧) 被添加到父母中以计算 孩子 高架。 在这种情况下
报告可以显示为:
.ft C
儿童自我符号
………………………………
100.00% 0.00% __libc_start_main
|
--- __libc_start_main
100.00% 0.00% 主要
|
- - 主要的
__libc_start_main
100.00% 40.00% 条形
|
- - 酒吧
主
__libc_start_main
60.00% 60.00% 富
|
--- 富
酒吧
主
__libc_start_main
英尺
在上面的输出中, 自 的开销 FOO (60%) 被添加到 孩子 的开销
酒吧, 主 和 __libc_start_main。 同样, 自 的开销 酒吧 (40%) 被添加到
孩子 的开销 主 和 __libc_start_main.
So __libc_start_main 和 主 首先显示,因为它们具有相同 (100%) 孩子
开销(即使他们有零 自 开销),他们是 FOO 和
酒吧.
从 v3.16 开始 孩子 默认情况下显示开销,输出按其排序
值。 这 孩子 通过指定 --no-children 选项来禁用开销
命令行或通过添加 报告儿童 = false or 孩子们 = false 在性能
配置文件。
使用 onworks.net 服务在线使用 perf-report