C++性能优化- perf 和火焰图的安装使用

news2024/10/2 14:36:42

工欲善其事必先利其器,要想做Linux下的程序性能优化,就得先知道当前性能的瓶颈在哪里。
这里主要介绍一下常用的工具:perf工具和火焰图的使用方法

本文中的命令都是自己在Ubuntu18.04系统上测试可用的,在其他系统可能会需要不同的版本,但是方法都是一致的。

先简单介绍一下perf工具和火焰图:

Linux的perf工具是一个性能分析工具,用于收集系统的性能数据。它可以提供对CPU使用情况、内存操作、磁盘 I/O、软件事件等的详尽分析。perf能够帮助开发者和系统管理员定位程序性能问题,找出性能瓶颈,并进行性能调优。
perf工具可以收集系统性能相关的信息,如:

  • CPU 使用率
  • 硬件和软件事件
  • 缓存命中率
  • 调用图
  • 跟踪程序执行路径

另外,perf还支持创建火焰图。火焰图是一种直观的性能分析图表,可以直观展示程序的函数调用情况、执行时间以及资源消耗情况。它通过可视化的方式展示代码中函数之间的调用关系和耗时情况,帮助定位性能瓶颈和优化程序性能。

火焰图工具通常与perf结合使用,可以通过perf script命令将perf的记录数据转换成火焰图所需的格式,然后使用相应的火焰图生成工具(如FlameGraph)生成火焰图。这些火焰图能够以直观的方式展示出程序执行过程中不同函数的调用关系和耗时情况,有助于开发者快速定位性能问题。

工具安装

perf的安装

$ sudo apt install linux-tools-common linux-tools-5.4.0-124-generic linux-cloud-tools-5.4.0-124-generic

火焰图工具安装

$ git clone https://github.com/brendangregg/FlameGraph.git
下载后可以看到文件夹 FlameGraph (我放在了~/software/FlameGraph)
可直接以 ./xxx的方式使用

数据采集及火焰图获取

首先启动我们要看的进程
然后进行数据采集
$ sudo perf record -g -F 1000 -p pid_of_myprocess
$ sudo perf script -i perf.data > out.perf
$ ~/software/FlameGraph/stackcollapse-perf.pl out.perf > out.floded
$ ~/software/FlameGraph/flamegraph.pl out.floded > cp.svg
$ ls
cp.svg  aaa.test  out.floded  out.perf  perf.data

火焰图查看

可以使用浏览器打开该svg格式图片,可以ctrl+f 搜索函数
格子的宽度越宽,说明函数耗时越长
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1362320.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

64.Go整洁代码架构实践

文章目录 一、为什么要有代码架构二、好的代码架构是如何构建的1、整洁架构2、洋葱架构三、六边形架构4、COLA (Clean Object-oriented and Layered Architecture)架构 三、Go 代码架构实践1、目录设计2、Adapter 层 : 负责http路由或者rpc接口管理3、Ap…

关于谷歌Gemini大模型

2023年12月7日,谷歌AI宣布发布新一代基于Transformer架构的大模型Gemini。 Gemini的名字来源于双子座,象征着模型的双重性质: 一方面,它是一个强大的训练模型,可以在各种下游任务上进行微调,如文本摘要、机…

真空引水罐 虹吸抽水机 负压虹吸罐 农业灌溉工作原理动画介绍

​ 1:真空引水罐虹吸抽水机虹吸罐介绍 真空引水罐是一种水泵吸水设备,也被称为真空罐、吸水罐或自动引水装置。它是一个密封的罐体,被串联在泵前的吸水管上,能够使水泵的吸水口从负压吸水变为正压吸水。使用真空引水罐可以节省真…

[蓝桥 2023 ]三带一

问题描述 小蓝和小桥玩斗地主,小蓝只剩四张牌了,他想知道是否是“三带一”牌型。 所谓“三带一”牌型,即四张手牌中,有三张牌一样,另外一张不与其他牌相同,换种说法,四张手牌经过重新排列后&am…

前端结合MQTT实现连接 订阅发送信息等操作 VUE3

MQTT客户端下载 使用测试 在我之前文章中 MQTT下载基础使用 下面记录一下前端使用的话的操作 1.安装 npm i mqtt引入 import * as mqtt from "mqtt/dist/mqtt.min"; //VUE3 import mqtt from mqtt //VUE2 一、MQTT协议中的方法 Connect。等待与服务器建立连接…

体系化的进阶学习内容

UWA学堂:传播游戏行业的体系化的进阶学习内容。UWA学堂作为面向开发者的在线学习平台,目前已经上线272门课程,涵盖了3D引擎渲染、UI、逻辑代码等多个模块,拥有完整的学习体系,一直致力于为广大的开发者提供更丰富、更优…

线程同步及互斥锁

一、线程同步 1. 线程同步:即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进 行操作,直到该线程完成操作,其他线程才能对该内存地址进行操作,而其他线程则处 于等待状态。 2. 临界区是指访问某…

junit单元测试:使用@ParameterizedTest 和 @CsvSource注解简化单元测试方法

在平常的开发工作中,我们经常需要写单元测试。比如,我们有一个校验接口,可能会返回多种错误信息。我们可以针对这个接口,写多个单元测试方法,然后将其场景覆盖全。那么,怎么才能写一个测试方法,…

CSDN的Markdown编辑器使用教程

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

YOLOv5改进 | 2023 | SCConv空间和通道重构卷积(精细化检测,又轻量又提点)

一、本文介绍 本文给大家带来的改进内容是SCConv,即空间和通道重构卷积,是一种发布于2023.9月份的一个新的改进机制。它的核心创新在于能够同时处理图像的空间(形状、结构)和通道(色彩、深度)信息,这样的处理方式使得SCConv在分析图像时更加精细和高效。这种技术不仅适…

【Flink精讲】双流Join之Regular Join(即普通Join)

Regular Join 普通Join 通过条件关联两条实时数据流:动态表Join动态表支持Inner Join、Left Join、Right Join、Full Join。 1. Inner Join(Join):只有两边数据流都关联上才输出[L,R] 2. Left Join(Left Outer Join):只要左流有数据即输出[…

听GPT 讲Rust源代码--compiler(26)

File: rust/compiler/rustc_target/src/abi/call/mips.rs 在Rust源代码中的rust/compiler/rustc_target/src/abi/call/mips.rs文件是关于MIPS架构的函数调用ABI(Aplication Binary Interface)定义。ABI是编程语言与底层平台之间的接口规范,用于定义函数调用、参数传…

三英战吕布web3游戏项目启动全流程

项目是一个学习相关的很好的例子并且开源,原本的项目是连接goerli网络,但我把它修改为可连接ganache网络的项目了,更方便启动。 智能合约部分 进入文件 hardhat.config.js ,增加一个钱包私钥 2.执行npm install 3.测试合约 npx ha…

乔布斯在斯坦福大学经典演讲

今天,很荣幸来到各位从世界上最好的学校之一毕业的毕业典礼上。我从来没从大学毕业过,说实话,这是我离大学毕业最近的一刻。 今天,我只说三个故事,不谈大道理,三个故事就好。 第一个故事,是关于…

机器人相关知识

机器人学(Robotics) 一些基础概念 位姿 位姿位置姿态 位姿的表示 刚体 刚性物体是一组粒子的集合,其中任意两个粒子之间的距离保持固定,不受物体运动或施加在物体上的力的影响。 “完全不可变形”的物体就是刚体。 刚体位置 刚性连杆 …

web——德州扑克

1.此案例只用于学习 2.未接入游戏规则 HTML代码部分 <!DOCTYPE html> <html><head><meta charset"utf-8"><meta name"viewport" content"widthdevice-width"><meta name"Poker Skin" content&quo…

YOLOv5改进 | 注意力篇 | Deformable-LKA(DLKA)可变形的大核注意力(附多个位置添加教程)

一、本文介绍 本文给大家带来的改进内容是Deformable-LKA(可变形大核注意力)。Deformable-LKA结合了大卷积核的广阔感受野和可变形卷积的灵活性,有效地处理复杂的视觉信息。这一机制通过动态调整卷积核的形状和大小来适应不同的图像特征,提高了模型对目标形状和尺寸的适应…

转转服务瘦身实战

文章目录 1 背景2 第一步-发现并下掉僵尸服务2.1 如何发现僵尸服务2.2 如何下掉僵尸服务 3 第二步-发现并下掉僵尸方法3.1 如何发现僵尸方法3.1.1 全量方法的获取3.1.2 活动方法的获取3.1.3 ServiceAbility Agent方案详解3.1.3.1 ServiceAbility Agent使用方法3.1.3.2 解决stop…

文本批量操作技巧:告别繁琐让办公更轻松,批量添加内容的方法

在工作中&#xff0c;经常要处理大量的文本数据&#xff0c;如文档、电子表格、邮件等。如果一个个地手动编辑&#xff0c;不仅效率低下&#xff0c;还容易出错。现代办公软件提供了许多批量操作技巧&#xff0c;可以轻松完成大量文本的处理。下面一起来看下“办公提效工具”如…

计算机Java项目|基于SpringBoot+Vue的图书个性化推荐系统

项目编号&#xff1a;L-BS-GX-10 一&#xff0c;环境介绍 语言环境&#xff1a;Java: jdk1.8 数据库&#xff1a;Mysql: mysql5.7 应用服务器&#xff1a;Tomcat: tomcat8.5.31 开发工具&#xff1a;IDEA或eclipse 二&#xff0c;项目简介 图片管理系统是一个为学生和…