perf
学习和笔记来源:Cache原理简介及cache miss-CSDN博客
学习和笔记来源:Linux perf:掀开性能分析的神秘面纱 - 知乎 (zhihu.com)
学习和笔记来源:perf 性能分析实例——使用perf优化cache利用率_perf cache miss-CSDN博客
命令:
perf record -e cache-misses ./test
perf report
perf stat:查看性能统计信息 (perf stat: Viewing Performance Statistics)
perf stat 命令用于收集和显示性能计数器统计信息。它可以针对整个系统或特定进程收集数据,并显示事件的发生次数、占比等信息。
$ perf stat [options] [command]
以下是 perf stat 的一些常用参数:
- -e 或 --event:指定要收集的事件类型,例如:cache-misses, instructions 等。
- -p 或 --pid:指定要监视的进程ID。
- -t 或 --tid:指定要监视的线程ID。
- -a 或 --all-cpus:监视所有CPU,而不仅仅是当前CPU。
- -C 或 --cpu:指定要监视的CPU列表。
- -c 或 --count:设置每个事件的采样周期。
- -r 或 --repeat:重复运行给定的命令并收集统计信息,指定重复次数。
- -d 或 --detailed:显示详细的统计信息。
- -D 或 --delay:设置统计输出之间的延迟时间(以毫秒为单位)。
- -n 或 --null:仅运行命令,不收集统计信息。
- -o 或 --output:指定将数据写入的文件。
- -A 或 --no-aggr:不进行聚合统计,为每个硬件事件单独显示结果。
- --metric-only:仅显示指定的度量结果,不显示原始硬件事件。
- --metricgroup:选择度量组。例如,--metricgroup core。
- --metrics:显示与指定事件相关的度量。
- --per-socket:按每个 CPU 套接字显示聚合统计。
- --per-core:按每个物理 CPU 核心显示聚合统计。
- --per-thread:按每个线程显示聚合统计。
- --no-merge:不合并不同 PMU (Performance Monitoring Unit) 的结果。
perf record:记录性能数据 (perf record: Recording Performance Data)
perf record 命令用于收集指定事件的性能数据,并将其保存在文件中以便后续分析。默认情况下,数据将保存在名为 perf.data 的文件中。
$ perf record [options] [command]
以下是perf record命令的一些常用参数:
- -e 或 --event:指定要记录的事件类型,例如cache-misses, instructions等。
- -p 或 --pid:指定要监控的进程ID。
- -t 或 --tid:指定要监控的线程ID。
- -a 或 --all-cpus:监控所有CPU,而不仅仅是当前CPU。
- -C 或 --cpu:指定要监控的CPU列表。
- -f 或 --overwrite:以覆盖模式记录事件。
- -c 或 --count:设置每个事件的采样周期。
- -r 或 --real-time:设置实时优先级。
- -o 或 --output:指定要将数据写入的文件。
- -g 或 --call-graph:指定调用图记录方法,例如dwarf或fp(帧指针)。
- --switch-events:记录上下文切换事件。
- --no-buffering:禁用数据缓冲。
- --dry-run:显示要执行的操作,但不实际执行。
perf report:生成性能报告 (perf report: Generating Performance Reports)
perf report 命令从 perf.data 文件中读取性能数据,并以多种格式展示分析结果。用户可以根据需要自定义报告的输出格式。
$ perf report [options]
以下是 perf report 的一些常用参数:
- -i 或 --input:指定要读取的输入文件,默认为 perf.data。
- -F 或 --fields:指定要显示的字段,例如:comm, dso, symbol 等。
- --sort:指定排序顺序,例如:dso,symbol 或 symbol,dso。
- --show-total-period:显示每个符号的总周期数。
- -T 或 --threads:显示线程相关数据。
- -m 或 --modules:显示模块(共享库)相关数据。
- -k 或 --vmlinux:指定内核符号表文件(vmlinux)的路径。
- -f 或 --force:强制解析文件,即使它看起来无效或损坏。
- -c 或 --comms:指定要显示的命令(进程)列表。
- --dsos:指定要显示的动态共享对象(DSO)列表。
- -s 或 --symbols:指定要显示的符号(函数)列表。
- --percent-limit:仅显示超过指定百分比的项。
- -P 或 --pretty:指定输出格式,如raw、normal等。
- --stdio:以文本模式显示报告(而非 TUI 模式)。
- --tui:以 TUI 模式显示报告(默认方式)。
- --gtk:以 GTK 模式显示报告。
- -g 或 --call-graph:显示调用图数据。
- --no-children:仅显示独立样本,不显示调用子函数的样本。
- --no-demangle:禁用 C++ 符号解析。
- --demangle:指定 C++ 符号解析方式,如:no, normal, smart 等。
- --filter:指定过滤器,如:--filter 'dso(/lib*)'。
- --max-stack:指定栈帧的最大数量。
CPU性能分析 (CPU Performance Analysis)
perf工具可以分析CPU的使用情况,如缓存命中率、分支预测错误率等。以下是一个使用perf stat分析CPU性能的简单示例:
$ perf stat -e cycles,instructions,cache-references,cache-misses,branches,branch-misses -- ./my_program
此命令将收集指定事件的数据,并在程序运行结束后显示统计信息。
内存性能分析 (Memory Performance Analysis)
使用perf工具,用户可以对内存访问进行深入分析,以确定内存性能瓶颈。以下示例展示了如何使用perf mem命令分析内存性能:
$ perf mem record ./my_program $ perf mem report
这将记录内存访问事件并生成报告,帮助用户发现程序中的内存瓶颈。
IO性能分析 (IO Performance Analysis)
perf可以跟踪与IO相关的事件,如磁盘读写操作。以下示例展示了如何使用perf trace命令分析IO性能:
$ perf trace -e block:block_rq_issue,block:block_rq_complete -- ./my_program
这将跟踪磁盘请求的发出和完成事件,并展示相关信息。
软件性能调优 (Software Performance Tuning)
perf工具可以帮助开发者发现代码中的性能瓶颈,从而进行优化。例如,可以使用perf record和perf report命令对程序进行剖析:
$ perf record -g ./my_program $ perf report
这将记录程序的性能数据,并生成一个包含热点函数和调用图的报告。
系统瓶颈定位 (System Bottleneck Localization)
perf可以辅助系统管理员找出系统资源瓶颈,例如使用perf top命令实时监控耗费CPU资源的函数:
$ perf top
这有助于快速发现系统中的性能问题,并采取相应措施进行优化。
硬件性能评估 (Hardware Performance Evaluation)
perf工具还可以用于评估硬件性能,如处理器、内存等。使用perf bench命令进行内置基准测试,例如测试内存带宽:
$ perf bench mem memcpy
此命令将执行内存拷贝基准测试,并输出性能数据。
通过这些实际应用和案例,perf工具为开发者、系统管理员和硬件工程师提供了强大的性能分析能力,帮助他们优化软件和硬件,提升整体系统性能。
浙公网安备 33010602011771号