chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

火焰圖:全局視野的Linux性能剖析

Linux閱碼場 ? 來源:Linuxer ? 2020-06-28 09:44 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

什么是火焰圖

火焰圖(Flame Graph)是由Linux性能優(yōu)化大師Brendan Gregg發(fā)明的,和所有其他的trace和profiling方法不同的是,F(xiàn)lame Graph以一個全局的視野來看待時間分布,它從底部往頂部,列出所有可能的調(diào)用棧。其他的呈現(xiàn)方法,一般只能列出單一的調(diào)用?;蛘叻菍哟位臅r間分布。

我最快樂的童年時代,每逢冬天,尤其是春節(jié)的時候,和一家人圍坐在火堆旁邊烤火。這已經(jīng)成為最美好的回憶,其實人生追求的快樂非常簡單?;鹧鎴D的火焰首先來自于根,然后以火苗的形式往上面竄??梢园褟目拷孛娴母巾斏系拿總€火苗,想想成一個調(diào)用棧。由于火苗有很多根,這正好也和現(xiàn)實生活中程序的執(zhí)行邏輯相似。

以典型的分析CPU時間花費到哪個函數(shù)的on-cpu火焰圖為例來展開。

CPU火焰圖中的每一個方框是一個函數(shù),方框的長度,代表了它的執(zhí)行時間,所以越寬的函數(shù),執(zhí)行越久?;鹧鎴D的樓層每高一層,就是更深一級的函數(shù)被調(diào)用,最頂層的函數(shù),是葉子函數(shù)。

火焰圖的生成過程是:

先trace系統(tǒng),獲取系統(tǒng)的profiling數(shù)據(jù)

用腳本來繪制

系統(tǒng)的profiling數(shù)據(jù)獲取,可以選擇最流行的perf record,而后把采集的數(shù)據(jù)進行加工處理,繪制為火焰圖。其中第二步的繪制火焰圖的腳本程序,通過如下方式獲取:

gitclone https://github.com/brendangregg/FlameGraph

火焰圖案例

廢話不多說,直接從最簡單的例子開始說起。talk is cheap, show you the cde,代碼如下:

c()

{

for(int i=0;i<1000;i++);

}

b()

{

for(int i=0;i<1000;i++);

c();

}

a()

{

for(int i=0;i<1000;i++);

b();

}

則這三個函數(shù),在火焰圖中呈現(xiàn)的樣子為:

a()的2/3的時間花在b()上面,而b()的1/3的時間花在c()上面。很多個這樣的a->b->c的火苗堆在一起,就構成了火焰圖。

進一步理解火焰圖的最好方法仍然是通過一個實際的案例,下面的程序創(chuàng)建2個線程,兩個線程的handler都是thread_fun(),之后thread_fun()調(diào)用fun_a()、fun_b()、fun_c(),而fun_a()又會調(diào)用fun_d():

/*

* One example to demo flamegraph

*

* Copyright (c) Barry Song

*

* Licensed under GPLv2

*/

#include

func_d()

{

int i;

for(i=0;i<50000;i++);

}

func_a()

{

int i;

for(i=0;i<100000;i++);

func_d();

}

func_b()

{

int i;

for(i=0;i<200000;i++);

}

func_c()

{

int i;

for(i=0;i<300000;i++);

}

void* thread_fun(void* param)

{

while(1) {

int i;

for(i=0;i<100000;i++);

func_a();

func_b();

func_c();

}

}

int main(void)

{

pthread_t tid1,tid2;

int ret;

ret=pthread_create(&tid1,NULL,thread_fun,NULL);

if(ret==-1){

...

}

ret=pthread_create(&tid2,NULL,thread_fun,NULL);

...

if(pthread_join(tid1,NULL)!=0){

...

}

if(pthread_join(tid2,NULL)!=0){

...

}

return 0;

}

先看看不用火焰圖的缺點在哪里。

如果不用火焰圖,我們也可以用類似perf top這樣的工具分析出來CPU時間主要花費在哪里了:

$gcc exam.c -pthread

$./a.out&

$sudo perf top

perf top的顯示結果如下:

perf top提示出來了fun_a()、fun_b()、fun_c(), fun_d(),thread_func()這些函數(shù)內(nèi)部的代碼是CPU消耗大戶,但是它缺乏一個全局的視野,我們無法看出全局的調(diào)用棧,也弄不清楚這些函數(shù)之間的關系。火焰圖則不然,我們用下面的命令可以生成火焰圖(以root權限運行):

perf record -F 99 -a -g -- sleep 60

perf script | ./stackcollapse-perf.pl > out.perf-folded

./flamegraph.pl out.perf-folded > perf-kernel.svg

上述程序捕獲系統(tǒng)的行為60秒鐘,最后調(diào)用flamegraph.pl生成一個火焰圖perf-kernel.svg,用看圖片的工具就可以打開這個svg。

上述火焰圖顯示出了a.out中,thread_func()、func_a()、func_b()、fun_c()和func_d()的時間分布。

從上述火焰圖可以看出,雖然thread_func()被兩個線程調(diào)用,但是由于thread_func()之前的調(diào)用棧是一樣的,所以2個線程的thread_func()調(diào)用是合并為同一個方框的。

更深閱讀

除了on-cpu的火焰圖以外,off-cpu的火焰圖,對于分析系統(tǒng)堵在IO、SWAP、取得鎖方面的幫助很大,有利于分析系統(tǒng)在運行的時候究竟在等待什么,系統(tǒng)資源之間的彼此伊伴。

比如,下面的火焰圖顯示,nginx的吞吐能力上不來的很多程度原因在于sem_wait()等待信號量。

上圖摘自Yichun Zhang (agentzh)的《Introduction to offCPU Time Flame Graphs》。

關于火焰圖的更多細節(jié)和更多種火焰圖各自的功能,可以訪問:

http://www.brendangregg.com/flamegraphs.html

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

    關注

    88

    文章

    11806

    瀏覽量

    219493
  • 函數(shù)
    +關注

    關注

    3

    文章

    4421

    瀏覽量

    67815

原文標題:火焰圖:全局視野的Linux性能剖析

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    12 位高速 ADC AD9432:性能剖析與應用指南

    12 位高速 ADC AD9432:性能剖析與應用指南 在電子設計領域,高速、高精度的模數(shù)轉換器(ADC)是實現(xiàn)信號處理和數(shù)據(jù)采集的關鍵組件。AD9432 作為一款 12 位、具有 80 MSPS
    的頭像 發(fā)表于 04-02 17:05 ?391次閱讀

    AD7327:高性能12位ADC的深度剖析與應用指南

    AD7327:高性能12位ADC的深度剖析與應用指南 引言 在電子設計領域,模數(shù)轉換器(ADC)扮演著至關重要的角色,它是模擬世界與數(shù)字世界之間的橋梁。AD7327作為一款8通道、12位加符號的逐次
    的頭像 發(fā)表于 04-02 10:10 ?183次閱讀

    AD9625:高性能12位ADC的深度剖析與應用指南

    AD9625:高性能12位ADC的深度剖析與應用指南 在電子設計領域,模數(shù)轉換器(ADC)的性能直接影響著整個系統(tǒng)的精度和穩(wěn)定性。AD9625作為一款12位的高性能ADC,以其卓越的特
    的頭像 發(fā)表于 03-30 15:00 ?178次閱讀

    AD9081:高性能混合信號前端的技術剖析

    AD9081:高性能混合信號前端的技術剖析 在當今的電子領域,對于高性能、高集成度的混合信號前端(MxFE)的需求日益增長。AD9081作為一款備受關注的產(chǎn)品,以其卓越的性能和豐富的功
    的頭像 發(fā)表于 03-25 15:05 ?134次閱讀

    昉·星光開發(fā)板火焰傳感器探測火光

    本次課程為昉·星光開發(fā)板IoT開發(fā)系列課程的第九講,將帶領同學們在昉·星光開發(fā)板上,使用火焰傳感器探測火焰火光。 本次課程,在昉·星光開發(fā)板V1和V2上,操作步驟相同。 一、學習目標 學習昉
    發(fā)表于 03-16 06:48

    內(nèi)核配置項引發(fā)網(wǎng)絡性能下降的深度剖析

    在嵌入式系統(tǒng)開發(fā)中,內(nèi)核配置對系統(tǒng)性能起著關鍵作用。近期在對基于 Rockchip 平臺的 Linux 內(nèi)核配置調(diào)試時,發(fā)現(xiàn)三個內(nèi)核跟蹤器配置項(CONFIG_IRQSOFF_TRACER
    的頭像 發(fā)表于 02-01 16:48 ?1799次閱讀
    內(nèi)核配置項引發(fā)網(wǎng)絡<b class='flag-5'>性能</b>下降的深度<b class='flag-5'>剖析</b>

    瑞芯微(EASY EAI)RV1126B 火焰檢測

    1.火焰檢測簡介火焰檢測是一種基于深度學習的對火焰進行檢測定位的目標檢測?;诖笠?guī)模火焰數(shù)據(jù)識別訓練,配合攝像頭,實時識別監(jiān)控區(qū)內(nèi)明火情況立刻發(fā)出警報,提醒監(jiān)控室查看,及時止損。本
    的頭像 發(fā)表于 01-13 11:52 ?7104次閱讀
    瑞芯微(EASY EAI)RV1126B <b class='flag-5'>火焰</b>檢測

    博通薄膜熱釋電火焰傳感器:技術特性與應用潛力

    博通薄膜熱釋電火焰傳感器:技術特性與應用潛力 在電子工程領域,火焰檢測技術至關重要,它關乎著眾多場景下的安全保障。博通的薄膜熱釋電紅外火焰探測器憑借其卓越的性能,成為了
    的頭像 發(fā)表于 12-30 16:35 ?330次閱讀

    ezPyro? TO I2C 熱釋電紅外火焰傳感器:高性能火焰檢測的理想之選

    ezPyro? TO I2C 熱釋電紅外火焰傳感器:高性能火焰檢測的理想之選 在電子工程師的日常設計工作中,火焰檢測傳感器是一個關鍵的組件,它在許多安全和監(jiān)控系統(tǒng)中發(fā)揮著至關重要的作用
    的頭像 發(fā)表于 12-30 16:10 ?741次閱讀

    AMD UltraScale架構:高性能FPGA與SoC的技術剖析

    AMD UltraScale架構:高性能FPGA與SoC的技術剖析 在當今的電子設計領域,高性能FPGA和MPSoC/RFSoC的需求日益增長。AMD的UltraScale架構憑借其創(chuàng)新的技術和卓越
    的頭像 發(fā)表于 12-15 14:35 ?714次閱讀

    Linux系統(tǒng)性能優(yōu)化技巧

    經(jīng)過10年一線運維經(jīng)驗,我發(fā)現(xiàn)大多數(shù)工程師只掌握了Linux優(yōu)化的冰山一角。今天分享的這些秘技,能讓你的系統(tǒng)性能提升200%以上!
    的頭像 發(fā)表于 08-27 14:34 ?1126次閱讀

    Linux網(wǎng)絡性能調(diào)優(yōu)方案

    在當今高并發(fā)、大流量的互聯(lián)網(wǎng)環(huán)境下,網(wǎng)絡性能往往成為系統(tǒng)的瓶頸。作為一名資深運維工程師,我在生產(chǎn)環(huán)境中遇到過無數(shù)次因為TCP/IP參數(shù)配置不當導致的性能問題。今天分享一套完整的Linux網(wǎng)絡
    的頭像 發(fā)表于 08-06 18:01 ?1482次閱讀

    Linux系統(tǒng)性能調(diào)優(yōu)方案

    關鍵要點預覽:本文將深入解析Linux系統(tǒng)性能瓶頸的根本原因,提供可直接落地的調(diào)優(yōu)方案,讓你的系統(tǒng)性能提升30-50%!
    的頭像 發(fā)表于 08-06 17:49 ?1043次閱讀

    Linux系統(tǒng)目錄結構全面剖析

    Linux文件系統(tǒng)采用層次化的目錄結構,這種設計遵循了Unix哲學中的"一切皆文件"原則。理解Linux目錄層次架構對于系統(tǒng)管理員、運維工程師和開發(fā)人員來說至關重要,它不僅影響系統(tǒng)的組織方式,還直接關系到系統(tǒng)的可維護性、安全性和性能
    的頭像 發(fā)表于 07-21 17:33 ?960次閱讀

    Linux主要的性能有哪些?

    都有確定的用途。它支持32位和64位硬件,能運行主要的unix工具軟件、應用程序和網(wǎng)絡協(xié)議。linux繼承了unix以網(wǎng)絡為核心的設計思想,是一個性能穩(wěn)定的多用戶網(wǎng)絡操作系統(tǒng)。 Linux主要特性 1 永久免費
    的頭像 發(fā)表于 04-30 18:09 ?758次閱讀
    <b class='flag-5'>Linux</b>主要的<b class='flag-5'>性能</b>有哪些?