【调试工具】perf 定位cpu占用100%

本文介绍了Linux服务器上kworker进程高CPU占用的问题,通过perf工具的编译与使用,定位到fsl_scan_event函数的死循环。作者强调了性能优化中考虑实际CPU处理能力的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、问题描述

在一台服务器上,出现一个进程占用cpu百分比,如下
在这里插入图片描述
tips:

什么是 kworker?
kworker表示进行“工作”(处理系统调用)的Linux内核进程。在进程列表中可以有多个:kworker/35:1 在第 35 个 CPU 内核上 kworker/35:1 是一个,在第二个CPU内核上是一个,依此类推。

二、perf 源码编译

1.嵌入式linux
内核源码目录中 tools 目录中有 perf 工具源码,编译就可以了

make ARCH=arm64 CROSS_COMPILE=~/bin/arm-histbv320-linux- perf LDFLAGS+=--static NO_LIBELF=1 V=1 WERROR=0 NO_SLANG=1 NO_GTK2=1 NO_LIBAUDIT=1 NO_LIBNUMA=1 NO_LIBPERL=1 NO_STRLCPY=1

发布文件位置:tools 目录
tips:交叉编译只需更改CROSS_COMPILE=<交叉编译工具的路径>

2.通用服务器
安装perf需要根据你的Linux发行版和版本进行区别对待。下面是在Ubuntu系统上安装perf的步骤:

1. sudo apt-get update
2. sudo apt install linux-tools-common
3. uname -r
4. sudo apt-get install linux-tools-内核版本(uname -r)

perf -v

三、问题定位

在出问题的设备上只需记录采集信息

perf record -g -a sleep 10

结束就会生成 perf.data 文件
在这里插入图片描述

perf report

在这里插入图片描述
可以看到:fsl_scan_event 函数占用是最高的,接着就可以去找对应的函数代码了。

四、问题原因

fsl_scan_event 函数内是一个while 循环,如下
在这里插入图片描述
以4ms的频率去做轮询,经调整将轮询时间间隔由4ms改为10ms,cpu 使用就正常了。在代码中需要注意对于不同的cpu处理能力是不一样的,在类似这种死循环中,其中的循环时间间隔要考虑实际情况去配置。

五、总结

perf 工具是非常强大的,能够在项目开发过程中来定位各种系统问题,来达到对性能优化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值