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

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

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

Linux閱碼場(chǎng) ? 來(lái)源:Linuxer ? 2020-06-28 09:44 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

什么是火焰圖

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

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

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

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

火焰圖的生成過(guò)程是:

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

用腳本來(lái)繪制

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

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

火焰圖案例

廢話不多說(shuō),直接從最簡(jiǎn)單的例子開始說(shuō)起。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();

}

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

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

進(jìn)一步理解火焰圖的最好方法仍然是通過(guò)一個(gè)實(shí)際的案例,下面的程序創(chuàng)建2個(gè)線程,兩個(gè)線程的handler都是thread_fun(),之后thread_fun()調(diào)用fun_a()、fun_b()、fun_c(),而fun_a()又會(huì)調(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;

}

先看看不用火焰圖的缺點(diǎn)在哪里。

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

$gcc exam.c -pthread

$./a.out&

$sudo perf top

perf top的顯示結(jié)果如下:

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

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生成一個(gè)火焰圖perf-kernel.svg,用看圖片的工具就可以打開這個(gè)svg。

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

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

更深閱讀

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

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

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

關(guān)于火焰圖的更多細(xì)節(jié)和更多種火焰圖各自的功能,可以訪問(wèn):

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

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

    關(guān)注

    87

    文章

    11509

    瀏覽量

    213726
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4379

    瀏覽量

    64841

原文標(biāo)題:火焰圖:全局視野的Linux性能剖析

文章出處:【微信號(hào):LinuxDev,微信公眾號(hào):Linux閱碼場(chǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Linux系統(tǒng)性能指南

    Linux服務(wù)器運(yùn)行了很多應(yīng)用,在高負(fù)載下,服務(wù)器可能會(huì)出現(xiàn)性能瓶頸,例如CPU利用率過(guò)高、內(nèi)存不足、磁盤I/O瓶頸等,從而導(dǎo)致系統(tǒng)卡頓,服務(wù)無(wú)法正常運(yùn)行等問(wèn)題。所以針對(duì)以上問(wèn)題,可以通過(guò)調(diào)整內(nèi)核參數(shù)和系統(tǒng)的相關(guān)組件,優(yōu)化應(yīng)用程序來(lái)提高服務(wù)器的
    的頭像 發(fā)表于 06-23 14:12 ?701次閱讀
    <b class='flag-5'>Linux</b>系統(tǒng)<b class='flag-5'>性能</b>指南

    Linux主要的性能有哪些?

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

    基于RV1126開發(fā)板的火焰檢測(cè)算法開發(fā)

    火焰檢測(cè)是一種基于深度學(xué)習(xí)的對(duì)火焰進(jìn)行檢測(cè)定位的目標(biāo)檢測(cè)。基于大規(guī)模火焰數(shù)據(jù)識(shí)別訓(xùn)練,配合攝像頭,實(shí)時(shí)識(shí)別監(jiān)控區(qū)內(nèi)明火情況立刻發(fā)出警報(bào),提醒監(jiān)控室查看,及時(shí)止損。
    的頭像 發(fā)表于 04-14 14:53 ?326次閱讀
    基于RV1126開發(fā)板的<b class='flag-5'>火焰</b>檢測(cè)算法開發(fā)

    BNC接頭技術(shù)原理與工程應(yīng)用剖析:從結(jié)構(gòu)到性能優(yōu)化

    在現(xiàn)代電子通信和射頻領(lǐng)域,BNC接頭作為一種廣泛應(yīng)用的連接器件,發(fā)揮著至關(guān)重要的作用。它以其可靠的連接性能、優(yōu)異的電氣特性和廣泛的兼容性,成為眾多電子設(shè)備和系統(tǒng)中不可或缺的一部分。本文將深入剖析
    的頭像 發(fā)表于 12-31 16:07 ?1486次閱讀
    BNC接頭技術(shù)原理與工程應(yīng)用<b class='flag-5'>剖析</b>:從結(jié)構(gòu)到<b class='flag-5'>性能</b>優(yōu)化

    思特威推出高性能智能交通應(yīng)用全局快門圖像傳感器產(chǎn)品

    近日,技術(shù)先進(jìn)的CMOS圖像傳感器供應(yīng)商思特威(SmartSens,股票代碼688213),全新推出高性能智能交通(ITS)應(yīng)用全局快門圖像傳感器產(chǎn)品——SC935HGS(9MP)及SC635HGS(6MP)。
    的頭像 發(fā)表于 12-26 10:48 ?880次閱讀

    多光譜火焰檢測(cè)攝像頭

    隨著工業(yè)化進(jìn)程的加快,火災(zāi)安全問(wèn)題日益受到重視。傳統(tǒng)的火焰檢測(cè)技術(shù)主要依賴于溫度傳感器和煙霧探測(cè)器,但這些方法在某些情況下存在響應(yīng)慢、誤報(bào)率高等缺陷。為了解決這些問(wèn)題,多光譜火焰檢測(cè)攝像頭應(yīng)運(yùn)而生
    的頭像 發(fā)表于 12-11 10:50 ?732次閱讀
    多光譜<b class='flag-5'>火焰</b>檢測(cè)攝像頭

    使用Arthas火焰工具的Java應(yīng)用性能分析和優(yōu)化經(jīng)驗(yàn)

    分享作者在使用Arthas火焰工具進(jìn)行Java應(yīng)用性能分析和優(yōu)化的經(jīng)驗(yàn)。
    的頭像 發(fā)表于 10-28 09:27 ?1274次閱讀
    使用Arthas<b class='flag-5'>火焰</b><b class='flag-5'>圖</b>工具的Java應(yīng)用<b class='flag-5'>性能</b>分析和優(yōu)化經(jīng)驗(yàn)

    迅為瑞芯微RK3588開發(fā)板深度剖析丨首選的性能

    搭建文檔),到軟件開發(fā)(Linux/Android等系統(tǒng)開發(fā)文檔),硬件開發(fā)(最小系統(tǒng)原理,復(fù)用關(guān)系表,電路介紹等文檔)。再到學(xué)習(xí)資料(如NPU快速上手,RK原廠NPU資料講解,系統(tǒng)編程,驅(qū)動(dòng)開發(fā)等
    發(fā)表于 10-17 10:49

    如何優(yōu)化Linux服務(wù)器的性能

    優(yōu)化Linux服務(wù)器的性能是一個(gè)綜合性的任務(wù),涉及硬件、軟件、配置、監(jiān)控等多個(gè)方面。以下是一個(gè)詳細(xì)的指南,旨在幫助系統(tǒng)管理員和運(yùn)維人員提升Linux服務(wù)器的性能和穩(wěn)定性。
    的頭像 發(fā)表于 09-29 16:50 ?668次閱讀

    迅為RK3588開發(fā)板深度剖析丨首選的性能

    搭建文檔),到軟件開發(fā)(Linux/Android等系統(tǒng)開發(fā)文檔),硬件開發(fā)(最小系統(tǒng)原理,復(fù)用關(guān)系表,電路介紹等文檔)。再到學(xué)習(xí)資料(如NPU快速上手,RK原廠NPU資料講解,系統(tǒng)編程,驅(qū)動(dòng)開發(fā)等
    發(fā)表于 09-03 15:49

    Linux服務(wù)器性能查看方法

    Linux服務(wù)器性能查看是系統(tǒng)管理員和開發(fā)人員在日常工作中經(jīng)常需要進(jìn)行的任務(wù),以確保系統(tǒng)穩(wěn)定運(yùn)行并優(yōu)化資源使用。以下將詳細(xì)介紹多種Linux服務(wù)器性能查看的方法,這些方法涵蓋了CPU、
    的頭像 發(fā)表于 09-02 11:15 ?1785次閱讀

    探索巔峰性能 | 迅為RK3588開發(fā)板深度剖析

    探索巔峰性能 | 迅為RK3588開發(fā)板深度剖析
    的頭像 發(fā)表于 08-12 14:07 ?1595次閱讀
    探索巔峰<b class='flag-5'>性能</b> | 迅為RK3588開發(fā)板深度<b class='flag-5'>剖析</b>

    探索巔峰性能 |迅為 RK3588開發(fā)板深度剖析

    搭建文檔),到軟件開發(fā)(Linux/Android等系統(tǒng)開發(fā)文檔),硬件開發(fā)(最小系統(tǒng)原理,復(fù)用關(guān)系表,電路介紹等文檔)。再到學(xué)習(xí)資料(如NPU快速上手,RK原廠NPU資料講解,系統(tǒng)編程,驅(qū)動(dòng)開發(fā)等
    發(fā)表于 08-09 15:44

    深入剖析石英 CMOS 振蕩器 PC3225 系列(1 to 200 MHz)的卓越性能

    深入剖析石英 CMOS 振蕩器 PC3225 系列(1 to 200 MHz)的卓越性能
    的頭像 發(fā)表于 08-08 10:14 ?710次閱讀
    深入<b class='flag-5'>剖析</b>石英 CMOS 振蕩器 PC3225 系列(1 to 200 MHz)的卓越<b class='flag-5'>性能</b>

    多光譜火焰智能監(jiān)測(cè)攝像機(jī)

    當(dāng)談到多光譜火焰智能監(jiān)測(cè)攝像機(jī)時(shí),我們進(jìn)入了火災(zāi)監(jiān)測(cè)和安全預(yù)警領(lǐng)域的新時(shí)代。這些先進(jìn)的攝像機(jī)利用多光譜技術(shù),不僅能夠?qū)崟r(shí)監(jiān)測(cè)火焰的存在和擴(kuò)展,還能夠識(shí)別不同類型的火焰,從而提高火災(zāi)檢測(cè)的準(zhǔn)確性
    的頭像 發(fā)表于 07-25 10:21 ?657次閱讀
    多光譜<b class='flag-5'>火焰</b>智能監(jiān)測(cè)攝像機(jī)