perf record/report

这篇具有很好参考价值的文章主要介绍了perf record/report。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

性能优化

性能优化通常分为两个阶段:性能分析、性能优化

  • 性能分析:查找性能瓶颈、热点代码,分析引发性能问题的原因。
  • 性能优化:基于性能分析,进行性能优化。包括:算法优化(空间复杂度和时间复杂度的权衡)和代码优化(提高执行速度、减少内存占用)。

perf 概述

perf 是 Linux 下的一款性能分析工具,可以用来分析程序中热点函数的 CPU 占用率,从而定位性能瓶颈。
perf 核心功能由 Performance counters(性能计数器) 子系统实现,它提供一个性能分析框架,比如硬件(CPU、PMU(Performance Monitoring Unit))功能和软件(软件计数器、tracepoint)功能。
通过 perf,应用程序可以利用 PMU、tracepoint 和内核中的计数器来进行性能统计。
perf record/report
perf 可以对程序进行函数级和指令级的采样,从而了解程序的性能瓶颈在哪里。
基本原理:在采样时间内,每隔一个固定采样周期,在 CPU 上产生一个中断,看当前是哪个进程、哪个函数在运行,然后就给对应的进程和函数加一个统计值,这样就可以估算出这段采样时间内,CPU 有多少时间花在某个进程和某个函数上。
perf 工具功能非常多,今天我们就来学习最常使用的两个命令:perf record 和 perf report。其中,一个用来统计,一个用来展示。

示例

使用下面这个示例程序,来学习 perf record/report 命令的使用。
perftest.c

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>

void for_loop()
{
	int i, j;
	int x;

	for (i = 0; i < 1000; i++) {
		for (j = 0; j < 10000; j++) {
			x = sin(i) + cos(j);
		}
	}
}

void loop_samll()
{
	int i;

	for (i = 0; i < 10; i++) {
		for_loop();
	}
}

void loop_big()
{
	int i;

	for (i = 0; i < 100; i++) {
		for_loop();
	}
}

int main(int argc, char *argv[])
{

	printf("pid = %d\n", getpid());
	loop_big();
	loop_samll();

	return EXIT_SUCCESS;
}
$ gcc -o perftest.out perftest.c -lm
$ ./perftest.out 
pid = 826526

perf record

$ sudo perf record -p 826526 -a -g -F 99 -- sleep 10
Warning:
PID/TID switch overriding SYSTEM
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.082 MB perf.data (991 samples) ]

-p:分析指定进程
-a:对所有 CPU 进行采样
-g:启用调用追溯功能
-F:指定采样频率
-- sleep:采集时长
执行这个命令后,会在当前目录下产生一个 perf.data 文件,接下来就可以使用 perf report 命令来分析这份采样记录了。

perf report

$ sudo perf report

perf record/report
通过 perf report 命令可以展示采样记录,大概介绍下面板参数

  • Samples:采样个数
  • Event count:系统总共发生的事件数
  • Symbol:函数名,其中 [.] 表示用户空间函数,[k] 表示内核函数
  • Shared Objec:函数所在的共享库或所在的程序
  • Command:进程名
  • Self:该函数的 CPU 使用率
  • Children:该函数的子函数的 CPU 使用率

那么,通过示例的展示面板,我们能得到的信息如下:

  • 这次采样,是对 perftest.out 这个进程进行采样
  • 总共采集到了 991 个事件(符合 -F 99 -- sleep 10,即,一秒钟采样 99 次,采样 10 秒钟)
  • 第一行:__libc_start_main 函数,处于用户空间,处于共享库 libc-2.31.so 中,CPU 使用率为 0,其子函数的 CPU 使用率为 47.63%。(因为 __libc_start_main 只调用一次,实际使用 CPU 的都是其子函数)
  • 第二行:main 函数同 __libc_start_main
  • 第三行:loop_big 函数同 __libc_start_main
  • 第四行:__sin_avx 函数,自身 CPU 使用率为 40.36%,子函数 CPU 使用率为 40.36%,说明其没有子函数。
  • 第五行:__cos_avx 函数,CPU 使用率为 38.65%
  • 第六行:for_loop 函数,CPU 使用率 20.99%

通过以上分析,可以知道 CPU 大部分时间都花在执行 sin() 和 cos() 这两个函数上,和示例代码吻合。

以上分析中,有些参数还没理解透彻,后面还会继续对 perf 工具进行学习,逐步增强吧。文章来源地址https://www.toymoban.com/news/detail-414099.html

到了这里,关于perf record/report的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • linux下性能分析工具Perf安装与用法

    目录 1、Perf介绍 2、火焰图分类  (1)CPU  (2)Memory Flame Graphs  (3)Off-CPU Flame Graphs  (4)Hot/Cold Flame Graphs  (5)Differential  3、火焰图安装命令 (1)安装Perf工具 (2)下载可视化工具FlameGraph  4、火焰图demo测试 (1)生成CPU火焰图1 (2)火焰图表解析 (3)当前程序图标

    2024年02月04日
    浏览(40)
  • 性能测试大致分为以下六种

    性能测试大致分为以下六种:   第一种是Benchmark(标杆测试)又叫基准测试,主要是测试一些基础数据,给进一步建立性能模型提供依据,一般测试人员按照1并发用户来执行脚本,校验脚本正确与否,为之后的压力测试和负载测试做准备;   第二种是Load(负载测试),对照

    2024年02月11日
    浏览(47)
  • Linux性能分析工具perf和火焰图使用方法

    perf是linux上的性能分析工具,perf可以对event进行统计得到event的发生次数,或者对event进行采样,得到每次event发生时的相关数据(cpu、进程id、运行栈等),利用这些数据来对程序性能进行分析。 perf可以统计或采样的event有很多,如果我们要分析cpu,那么我们可以使用cpu-cycles、

    2024年01月16日
    浏览(59)
  • gas费用测试优化:hardhat-gas-reporter

    ​ gas费是我们每一次与区块链交互的时候产生的一笔费用,每次我们读取数据,运算数据,修改数据的时候,都会产生一定数量的gas。 ​ gas费是我们与区块链通信的过程中提交的费用,,我们通过一定的语法技巧能节约很多的gas,给用户操作节省gas费,一个优秀的项目应该

    2024年01月15日
    浏览(37)
  • 【Pytorch】进阶学习:深入解析 sklearn.metrics 中的 classification_report 函数---分类性能评估的利器

    【Pytorch】进阶学习:深入解析 sklearn.metrics 中的 classification_report 函数—分类性能评估的利器 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您的订阅和支持~ 💡 创作高质量博文

    2024年03月11日
    浏览(42)
  • 【性能优化】性能优化

    ❤️ Author: 老九 ☕️ 个人博客:老九的CSDN博客 🙏 个人名言:不可控之事 乐观面对 😍 系列专栏: 性能优化分为运行效率和加载效率 减少HTTP请求数量 1.合并文件:精灵图,字体图标 使用CDN 一般都分发静态内容 缓存 压缩文件、混淆 js,css,html等都压缩,gzip minify:去掉

    2024年02月09日
    浏览(41)
  • 前端面试:【性能优化】页面加载性能、渲染性能、资源优化

    嗨,亲爱的前端开发者!在今天的Web世界中,用户期望页面加载速度快、交互流畅。因此,前端性能优化成为了至关重要的任务。本文将探讨三个关键方面的性能优化:页面加载性能、渲染性能以及资源优化,以帮助你构建更快速、响应更快的Web应用程序。 1. 页面加载性能:

    2024年02月11日
    浏览(51)
  • 什么是性能优化?如何性能优化?

    场景说明 :当用户访问一个新网站时,首次绘制(FP)就像是网站的大门第一次打开。用户期待着的不只是白色的加载屏幕;他们希望有个迹象表明网站正在努力加载。 为何重要 :即使内容还未完全到位,FP给了用户一个信号——你的网站在工作。在竞争激烈的互联网上,每

    2024年04月23日
    浏览(41)
  • 【性能优化】聊聊性能优化那些事

    针对于互联网应用来说,性能优化其实就是一直需要做的事情,因为系统响应慢,是非常影响用户的体验,可能回造成用户流失。所以对于性能非常重要。最近正好接到一个性能优化的需求,需要对所负责的系统进行性能提升。目前接口耗时基本在30S左右,争取可以提升到

    2024年02月10日
    浏览(56)
  • 项目性能优化—性能优化的指标、目标

    性能优化的目标实际上是为了更好的用户体验: 一般我们认为用户体验是下面的公式: 用户体验 = 产品设计(非技术)+ 系统性能 ≈ 系统性能 = 快 那什么样的体验叫快呢? 一般我们认为网站页面的加载速度在3秒以内就可以称作合格了,加载速度越趋近于0,越快。 3秒定理

    2024年03月15日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包