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

    文章

    10824

    浏览量

    211098
  • Linux
    +关注

    关注

    87

    文章

    11219

    浏览量

    208879
  • 定时器
    +关注

    关注

    23

    文章

    3237

    浏览量

    114435
  • 线程
    +关注

    关注

    0

    文章

    504

    浏览量

    19646
收藏 人收藏

    评论

    相关推荐

    Linux进程怎么绑定CPU

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

    实战eBPF kprobe函数插桩

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

    Linux进程的睡眠和唤醒

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

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

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

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

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

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

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

    Linux进程管理

    Linux进程管理 本章主要介绍进程的概念、状态、构成以及Linux进程的相关知识。 掌握进程
    发表于 04-28 14:57 0次下载

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

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

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

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

    学会Linux进程管理的方法

    Linux 是一种动态系统,能够适应不断变化的计算需求。Linux 计算需求的表现是以进程 的通用抽象为中心的。进程可以是短期的(从命令行执行的一个命令),也可以是长期的(一种网络服务
    发表于 05-16 17:19 769次阅读
    学会<b class='flag-5'>Linux</b><b class='flag-5'>进程</b>管理的<b class='flag-5'>方法</b>

    Linux CPU的性能应该如何优化

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

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

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

    eBPF是什么以及eBPF能干什么

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

    Linux进程间通信方法之管道

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

    linux查看weblogic进程

    Linux操作系统中,WebLogic是一种常用的Java应用服务器,用于部署和管理企业级Java应用程序。为了确保WebLogic服务器正常运行,有时我们需要查看WebLogic进程以了解其状态
    的头像 发表于 12-05 16:07 1796次阅读