使用perf查看热点函数和系统调用最大延迟函数

1、安装perf工具

1.1、ubuntu 18.04 x86下的安装

安装sudo apt install linux-source

sudo apt install linux-tools-`uname -r` # ubuntu 18.04虚拟机实操可行

1.2、ubuntu 18.04 ARM下的安装

  • 参考 Nvidia Jetson系列产品安装Perf

  • ​ARM64版本的Ubuntu上安装perf

与参考文章不同之处:

  • 须使用4.9内核版本的NVIDIA L4T 32.7.1:​Jetson Linux R32.7.1 Release Page

因为内核ARM机器的内核版本为:

linux系统如何查看内核版本、操作系统版本等信息

  • 最好安装sudo apt install linux-source

  • 安装依赖包文件到如此程度

到kernel/kernel-4.9/tools/perf目录下执行make,编译器会自动检测依赖项。缺少的依赖项可通过apt安装。

perf ARM可执行文件和运行脚本已上传,下载路径

2、perf使用介绍(查找CPU热点函数。

性能调优时,我们通常需要分析查找到程序CPU占比高的热点代码片段,这便需要使用 perf record 记录单个函数级别的统计信息,并使用 perf report 来显示统计结果;

主要使用到perf的这两个指令

perf record 和 perf report

2.1、获取XXX进程的perf数据:

首先启动XXX进程,使用ps -ef | grep XXX查看进程号

  • sudo perf record -e cpu-clock -g -p 67925

-g 选项是告诉perf record额外记录函数的调用关系

-e cpu-clock 指perf record监控的指标为cpu周期

-p 指定需要record的进程pid

程序运行完之后,perf record会生成一个名为perf.data的文件,如果之前已有,那么之前的perf.data文件会被覆盖

  • 获得这个perf.data文件之后,就需要perf report工具进行查看

perf report -i perf.data

-i 指定要查看的文件

 以诊断XXX进程为例,report结果:

$sudo perf report  -i perf.data

可以看到crc32_do函数使用cpu 20.58%

2.2、使用火焰图

  • 火焰图下载仓库地址:​编辑GitHub - brendangregg/FlameGraph: Stack trace visualizer

  • 下载火焰图工程代码,并添加至Linux系统环境变量,如/opt/FlameGraph

  • 使用参考 arm linux 生成火焰图 

  • 基于perf运行火焰图脚本,需要root权限

online cpu火焰图

On-CPU生成脚本 

#!/bin/bashexport PATH=/tmp:$PATHrm -f perf.*
ppid=`ps -ef | grep "XXX" | grep -v "grep" | awk '{print $1}'`
if [[ -z "${ppid}" ]]; thenecho "XXX not running"exit -1
fi
echo "pid is $ppid"./perf record -F 99  -e cpu-clock -p ${ppid} -g -- sleep 60
./perf script -i perf.data &> perf.unfold
offline火焰图
offline火焰图

Off-CPU生成脚本

#!/bin/bashexport PATH=$PATH:/opt/FlameGraphrm -f perf.*
ppid=`ps -ef | grep -i "XXX" | grep -v "grep" | awk '{print $2}'`
if [[ -z "${ppid}" ]]; thenecho "app not running"exit -1
fi
echo "pid is $ppid"sudo offcputime-bpfcc -df -p ${ppid} 120 > out.stacks # 120s
flamegraph.pl --color=io --title="Off-CPU Time Flame Graph" --countname=us out.stacks > perf_offline.svg

3、查看系统调用延迟

perf sched latency -s max是一个用于查看系统调度延迟的命令。具体而言,它用于查看最大的调度延迟。系统调度延迟是指在操作系统中,从一个任务被触发到它被实际执行之间的时间延迟。

perf sched latency命令可以解析当前目录下的perf.data文件。“-s”表示进行排序,后接参数“max”表示按照最大延迟时间大小排序。

其它参考

C++:perf + Flame Graph火焰图生成

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

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

相关文章

汽车灯罩使用聚碳酸酯(PC)和PMMA(亚克力)哪个更好?汽车车灯的灯罩如果破损破裂破洞了要怎么修复?

汽车灯罩使用聚碳酸酯(PC)和PMMA(亚克力)哪个更好? 聚碳酸酯(PC)和PMMA(亚克力)都是汽车灯罩常见的材质,它们各自具有独特的优点和特性,因此选择…

更专业的汽车软件研发工具链,怿星重磅发布新产品

怿星科技在2024北京国际车展同期举办主题为“创新引领未来——聚焦智能汽车软件新基建”的新产品发布会,重磅推出1款绝对优势产品和4套场景解决方案。同时举行了4场热点技术研讨:国产工具链的机遇与挑战、新架构下的的车载DDS应用探索及测试方案介绍、软…

微店商品详情API接口:打造个性化电商体验的利器

前言 随着电子商务的快速发展,越来越多的商家开始注重线上店铺的个性化建设和用户购物体验的优化。在这个过程中,API(应用程序接口)技术发挥着至关重要的作用。本文将重点介绍微店商品详情API接口,探讨其如何帮助商家提…

高压开关柜局部放电监测装置APD

安科瑞薛瑶瑶18701709087/17343930412 APD系列高压柜局部放电监测装置通过检测伴随局部放电而产生的电磁波辐射,实时监测的开关柜内局部放电的放电次数和放电频次等数据,对电气设备绝缘状况进行评估,发现设备潜伏性故障,最终实现…

docker 方式 elasticsearch 8.13 简单例子

安装 docker 虚拟机安装 elastic search 安装本地 # 创建 elastic 的网络 docker network create elastic # 用镜像的方式创建并启动容器 docker run -d --name es --net elastic -p 9200:9200 -p 9300:9300 -e "discovery.typesingle-node" -e "xpack.secur…

API开发淘宝(京东)API接口:获取淘宝京东等平台数据的api接口分享

接口应用场景——电商产品定价 电商平台产品的定价问题是很多品牌非常重视的一个问题,产品的定价取决于很多因素,包括成本、供需情况、促销策略及竞争对手的价格等。因此,想要更合理地定价,品牌需要获取到影响产品定价的各类数据&…

【Linux】17. 进程间通信 --- 管道

1. 什么是进程间通信(进程间通信的目的) 数据传输:一个进程需要将它的数据发送给另一个进程 资源共享:多个进程之间共享同样的资源。 通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了…

团队执行力差,多半都是管理的问题

在日常管理中,我们习惯用“执行力好不好”来评价一个团队的表现,但实际上,执行力更应该是一个管理者需要思考和解决的问题,而非单纯归咎于团队。 我们需要明确一点:执行力不是团队的问题,而是管理者的问题…

比亚迪CAN数据实时监控分析应用数字化差异化的决策价值洞察

在当今这个信息化飞速发展的时代,汽车数字化转型已成为企业持续竞争力的关键。中国新能源汽车行业的领军企业——比亚迪,其数字化之旅充分展现了企业的创新精神和对未来的深远洞察。 比亚迪的数字化战略不是简单的技术应用,而是一场深刻的商…

C++奇迹之旅:string类对象的容量操作

文章目录 📝 string类的常用接口🌉 string类对象的容量操作🌠size🌠length🌠capacity🌠clear🌠empty🌠reserve🌉resize 🚩总结 📝 string类的常用…

大数据集成平台建设方案-word原件资料

基础支撑平台主要承担系统总体架构与各个应用子系统的交互,第三方系统与总体架构的交互。需要满足内部业务在该平台的基础上,实现平台对于子系统的可扩展性。基于以上分析对基础支撑平台,提出了以下要求: (1) 基于平台的基础架构&…

【优选算法】——Leetcode——611. 有效三角形的个数

目录 ​编辑 1.题目 2 .补充知识 3.解法⼀(暴⼒求解)(可能会超时): 算法思路: 算法代码: 4.解法⼆(排序双指针): 算法思路: 以输入: nums …

多个glibc库存在时如何查看ldd调用的哪个

但是发现存在多个版本的glibc版本,需要查看具体的库的信息,和相应的关键函数的信息,但是并不知道具体的libc.so.6的路径信息 rootalg-dev04:~/xingqiao# ldd --version ldd (GNU libc) 2.29 rootalg-dev04:/opt# which ldd /usr/local/bin/…

硬件基础——晶振(复试被问到)

1.什么是晶振 石英晶体振荡器,是芯片的心脏,主要用于提供给芯片稳定、精确的时钟频率信号。其主要利用石英晶体的压电效应,从而实现振荡。 一般晶振会在芯片的旁边,不能远离晶振,因为振荡时会受外界电磁干扰的影响。 我…

LLM——大语言模型完整微调策略指南

1、 概述 GPT-4、LaMDA、PaLM等大型语言模型(LLMs)以其在广泛主题上的深入理解和生成高度类人文本的能力而闻名遐迩,它们在全球范围内引起了广泛关注。这些模型的预训练过程涉及对来自互联网、书籍和其他来源的数十亿词汇的海量数据集进行学…

如何阅读:一个已被证实的低投入高回报的学习方法的笔记

系列文章目录 如何有效阅读一本书笔记 如何阅读:一个已被证实的低投入高回报的学习方法 麦肯锡精英高效阅读法笔记 读懂一本书笔记 文章目录 系列文章目录第一章 扫清阅读障碍破解读不快、读不进去的谜题一切为了阅读小学教师让你做,但中学老师阻止你做的…

ffmpeg ubuntu18.04编译报错fcntl64

fcntl,fcntl64均是系统的api提供的文件操作,fcntl64本来是用来解决操作大文件的问题,后面fcntl本身已经解决了这个问题,fcntl64就被舍弃了 系统环境信息: ubuntu 18.04 root# cat /etc/issue Ubuntu 18.04.6 LTS \n…

DLP数据防泄密软件推荐盘点:防泄密软件厂商

数据防泄密软件在当今的数字化时代扮演着至关重要的角色。随着信息技术的迅猛发展,企业、组织乃至个人面临着日益严峻的数据安全挑战。数据防泄密软件应运而生,为信息安全领域筑起了一道坚实的防线。以下是五款备受推崇的数据防泄密软件,它们…

【工具】Office/WPS 插件|AI 赋能自动化生成 PPT 插件测评 —— 必优科技 ChatPPT

本文参加百度的有奖征文活动,更主要的也是借此机会去体验一下 AI 生成 PPT 的产品的现状,因此本文是设身处地从用户的角度去体验、使用这个产品,并反馈最真实的建议和意见,除了明确该产品的优点之外,也发现了不少缺陷和…

[C++基础编程]----预处理指令简介、typedef关键字和#define预处理指令之间的区别

目录 引言 正文 01-预处理指令简介 02-typedef关键字简介 03-#define预处理指令简介 04-#define预处理指令和typedef关键字的区别 (1)原理不同 (2)功能不同 &#xf…