99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取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程序為了優(yōu)化性能添加了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執(zhí)行消耗可以使用如下命令。

如果我們只想查看內核態(tài)的off-cpu消耗可以加上-K參數。如果想把TASK_UNINTERRUPTIBLE狀態(tài)過濾掉可以添加--state 2,其中TASK_RUNNING狀態(tài)為0, TASK_INTERRUPTIBLE狀態(tài)為1 TASK_UNINTERRUPTIBLE狀態(tài)為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或者要發(fā)送切換時,記錄一下當前的堆棧和時間,當切換回來的時候再次記錄下堆棧和時間即可。
編輯:hfy

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    11075

    瀏覽量

    216956
  • Linux
    +關注

    關注

    87

    文章

    11509

    瀏覽量

    213674
  • 定時器
    +關注

    關注

    23

    文章

    3298

    瀏覽量

    118808
  • 線程
    +關注

    關注

    0

    文章

    508

    瀏覽量

    20202
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Linux進程怎么綁定CPU

    昨天在群里有朋友問:把進程綁定到某個 CPU 上運行是怎么實現(xiàn)的。
    發(fā)表于 10-26 10:26 ?2067次閱讀

    實戰(zhàn)eBPF kprobe函數插樁

    本文作者為團隊小伙伴阿松,在Linux文件監(jiān)控領域實戰(zhàn)經驗豐富。本次引入eBPF在文件監(jiān)控上應用,提升文件變更的關聯(lián)進程信息等。在實現(xiàn)過程中,分享了eBPF kbproe時,被插樁函數
    發(fā)表于 11-29 09:03 ?2379次閱讀

    Linux進程的睡眠和喚醒

    Linux中,僅等待CPU時間的進程稱為就緒進程,它們被放置在一個運行隊列中,一個就緒進程的狀 態(tài)標志位為 TASK_RUNNING。一旦
    發(fā)表于 06-07 12:26 ?619次閱讀

    干貨分享:基于嵌入式Linux進程調度實現(xiàn)方法

    可運行隊列中。Linux進程調度采用了動態(tài)優(yōu)先級 和權值調控的方法,既可實現(xiàn)上述三種調度策略,又能保證實時進程總是比普通進程優(yōu)先使用
    發(fā)表于 12-10 14:17

    openEuler 倡議建立 eBPF 軟件發(fā)布標準

    《The future of eBPF in the Linux Kernel》展望了 eBPF 的發(fā)展方向,具體的演進方向包括幾個方面:更完備的編程能力:當前 eBPF 的編程能力
    發(fā)表于 12-23 16:21

    Linux進程管理

    Linux進程管理 本章主要介紹進程的概念、狀態(tài)、構成以及Linux進程的相關知識。 掌握進程
    發(fā)表于 04-28 14:57 ?0次下載

    如何使用OFF-CPU火焰圖調查分析Linux性能問題概述

    本文用off-cpu火焰圖分析一個程序的延遲(主要在拿鎖上),找出來瓶頸,并消除該瓶頸的故事。本文非常值得一讀,但是"Linux閱碼場"沒有足夠的時間將其翻譯為中文,希望童鞋們直接讀英文。
    的頭像 發(fā)表于 12-23 13:47 ?7415次閱讀

    如何設置Linux進程的睡眠和喚醒

    Linux中,僅等待CPU時間的進程稱為就緒進程,它們被放置在一個運行隊列中,一個就緒進程的狀 態(tài)標志位為TASK_RUNNING。
    發(fā)表于 04-23 14:29 ?1018次閱讀

    學會Linux進程管理的方法

    Linux 是一種動態(tài)系統(tǒng),能夠適應不斷變化的計算需求。Linux 計算需求的表現(xiàn)是以進程 的通用抽象為中心的。進程可以是短期的(從命令行執(zhí)行的一個命令),也可以是長期的(一種網絡服務
    發(fā)表于 05-16 17:19 ?863次閱讀
    學會<b class='flag-5'>Linux</b><b class='flag-5'>進程</b>管理的<b class='flag-5'>方法</b>

    Linux CPU的性能應該如何優(yōu)化

    Linux系統(tǒng)中,由于成本的限制,往往會存在資源上的不足,例如 CPU、內存、網絡、IO 性能。本文,就對 Linux 進程CPU
    的頭像 發(fā)表于 01-18 08:52 ?3721次閱讀

    虛擬機:查看進程內存和CPU占用的方法

    虛擬機:查看進程內存和CPU占用的方法
    的頭像 發(fā)表于 06-22 11:06 ?8842次閱讀

    eBPF是什么以及eBPF能干什么

    一、eBPF是什么 eBPF是extended BPF的縮寫,而BPF是Berkeley Packet Filter的縮寫。對linux網絡比較熟悉的伙伴對BPF應該比較了解,它通過特定的語法
    的頭像 發(fā)表于 07-05 15:17 ?1.3w次閱讀
    <b class='flag-5'>eBPF</b>是什么以及<b class='flag-5'>eBPF</b>能干什么

    linux查看端口被進程占用的方法 Linux與windows的區(qū)別

    基于POSIX的多用戶、多任務、支持多線程和多CPU的操作系統(tǒng)。 linux查看端口被進程占用的方法 1、、lsof -i:端口號 2、netstat -tunlp|grep 端口號
    的頭像 發(fā)表于 08-22 14:23 ?2572次閱讀

    Linux進程間通信方法之管道

    上文中我們介紹了進程間通信的方法之一:信號,本文將繼續(xù)介紹另一種進程間通信的方法,即管道。管道是Linux中使用shell經常用到的一個技術
    的頭像 發(fā)表于 05-14 15:47 ?2233次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>進程</b>間通信<b class='flag-5'>方法</b>之管道

    linux查看weblogic進程

    Linux操作系統(tǒng)中,WebLogic是一種常用的Java應用服務器,用于部署和管理企業(yè)級Java應用程序。為了確保WebLogic服務器正常運行,有時我們需要查看WebLogic進程以了解其狀態(tài)
    的頭像 發(fā)表于 12-05 16:07 ?2546次閱讀