0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于linux eBPF的进程off-cpu的方法

454398 来源: Chinaunix 作者:lvyilong316 2020-09-25 15:41 次阅读

提起off-CPU就不得不提on-cpu,on-cpu是在线程(进程)在CPU上运行的消耗,off-cpu就是进程(线程)由于某种原因阻塞的消耗,如等待IO,等待锁,等待定时器,等待内存页面的swap等。如下图所示,红色部分属于on-cpu部分,蓝色部分属于off-cpu。

一般我们用的perf命令等都是采样on-cpu的指令进行CPU的消耗分析的,这篇文章主要介绍一下分析进程off-cpu的方法。

要想风险一个进程的off-cpu消耗,首先就是要确保程序编译时有完整的堆栈信息。例如有些C程序为了优化性能添加了gcc的-fomit-frame-pointer编译选项,这就导致程序中不再有堆栈信息,对于这种情况是无法分析出off-cpu的堆栈消耗的。

这里讲的分析off-cpu的工具是基于linux eBPF的offcputime(要求linux内核版本在4.8以上),当然使用perf sched timehist工具也可以(linux内核版本大于4.10),但是开销要大一些。我们首先yum安装bpfcc-tools(tools for BPF Compiler Collection),以及git clone了

我们想看一下pgrep -nx tar命令的off-cpu执行消耗可以使用如下命令。

如果我们只想查看内核态的off-cpu消耗可以加上-K参数。如果想把TASK_UNINTERRUPTIBLE状态过滤掉可以添加--state 2,其中TASK_RUNNING状态为0, TASK_INTERRUPTIBLE状态为1 TASK_UNINTERRUPTIBLE状态为2。

当然也可以查看off-cpu的火焰图,如下方式

sudo offcputime-bpfcc -df -p `pgrep -nx a.out` 30 > out.stacks

./flamegraph.pl --color=io --title="Off-CPU Time Flame Graph" --countname=us~/out.stacks > output.svg

打开output.svg图片即可。

然后我们再来讲一下off-cpu的原理。当进程由于某种原因block或者要发送切换时,记录一下当前的堆栈和时间,当切换回来的时候再次记录下堆栈和时间即可。
编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10338

    浏览量

    206238
  • Linux
    +关注

    关注

    87

    文章

    10943

    浏览量

    206547
  • 定时器
    +关注

    关注

    23

    文章

    3128

    浏览量

    111904
  • 线程
    +关注

    关注

    0

    文章

    484

    浏览量

    19469
收藏 人收藏

    评论

    相关推荐

    Linux进程怎么绑定CPU

    昨天在群里有朋友问:把进程绑定到某个 CPU 上运行是怎么实现的。
    发表于 10-26 10:26 1614次阅读

    实战eBPF kprobe函数插桩

    本文作者为团队小伙伴阿松,在Linux文件监控领域实战经验丰富。本次引入eBPF在文件监控上应用,提升文件变更的关联进程信息等。在实现过程中,分享了eBPF kbproe时,被插桩函数
    发表于 11-29 09:03 1478次阅读

    Linux进程的睡眠和唤醒

    Linux中,仅等待CPU时间的进程称为就绪进程,它们被放置在一个运行队列中,一个就绪进程的状 态标志位为 TASK_RUNNING。一旦
    发表于 06-07 12:26 260次阅读

    Linux下常用的查看进程及强制关掉进程方法

    1、TOP命令:查看当前运行的进程,及系统资源消耗状况。  有点类似Windows的系统资源管理器,有时可以看看CPU占用情况,有时可以看看内存占用状况,有时也可以看看硬盘IO使用情况,当然它支持多
    发表于 11-14 14:08

    干货分享:基于嵌入式Linux进程调度实现方法

    可运行队列中。Linux进程调度采用了动态优先级 和权值调控的方法,既可实现上述三种调度策略,又能保证实时进程总是比普通进程优先使用
    发表于 12-10 14:17

    关于 eBPF 安全可观测性,你需要知道的那些事儿

    许庆伟:龙蜥社区eBPF技术探索SIG组 Maintainer & Linux Kernel Security Researcher。本文是作者在 PODS 2022 大会上关于内核
    发表于 09-08 15:31

    openEuler 倡议建立 eBPF 软件发布标准

    《The future of eBPF in the Linux Kernel》展望了 eBPF 的发展方向,具体的演进方向包括几个方面:更完备的编程能力:当前 eBPF 的编程能力
    发表于 12-23 16:21

    如何使用OFF-CPU火焰图调查分析Linux性能问题概述

    本文用off-cpu火焰图分析一个程序的延迟(主要在拿锁上),找出来瓶颈,并消除该瓶颈的故事。本文非常值得一读,但是"Linux阅码场"没有足够的时间将其翻译为中文,希望童鞋们直接读英文。
    的头像 发表于 12-23 13:47 6660次阅读

    如何设置Linux进程的睡眠和唤醒

    Linux中,仅等待CPU时间的进程称为就绪进程,它们被放置在一个运行队列中,一个就绪进程的状 态标志位为TASK_RUNNING。
    发表于 04-23 14:29 792次阅读

    Linux CPU的性能应该如何优化

    Linux系统中,由于成本的限制,往往会存在资源上的不足,例如 CPU、内存、网络、IO 性能。本文,就对 Linux 进程CPU
    的头像 发表于 01-18 08:52 3099次阅读

    虚拟机:查看进程内存和CPU占用的方法

    虚拟机:查看进程内存和CPU占用的方法
    的头像 发表于 06-22 11:06 7962次阅读

    eBPF是什么以及eBPF能干什么

    一、eBPF是什么 eBPF是extended BPF的缩写,而BPF是Berkeley Packet Filter的缩写。对linux网络比较熟悉的伙伴对BPF应该比较了解,它通过特定的语法
    的头像 发表于 07-05 15:17 9134次阅读
    <b class='flag-5'>eBPF</b>是什么以及<b class='flag-5'>eBPF</b>能干什么

    linux查看端口被进程占用的方法 Linux与windows的区别

    ,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。 linux查看端口被进程占用的方法 1、、lsof -i:端口号 2、netstat -tunlp|grep
    的头像 发表于 08-22 14:23 2063次阅读

    Linux进程间通信方法之管道

    上文中我们介绍了进程间通信的方法之一:信号,本文将继续介绍另一种进程间通信的方法,即管道。管道是Linux中使用shell经常用到的一个技术
    的头像 发表于 05-14 15:47 1548次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>进程</b>间通信<b class='flag-5'>方法</b>之管道

    Linux问题故障定位的小技巧

    a. on-CPU:执行中,执行中的时间通常又分为用户态时间user和系统态时间sys。 b. off-CPU:等待下一轮上CPU,或者等待I/O、锁、换页等等,其状态可以细分为可执行、匿名换页、睡眠、锁、空闲等状态。
    的头像 发表于 07-09 16:30 289次阅读
    <b class='flag-5'>Linux</b>问题故障定位的小技巧