動(dòng)態(tài)追蹤技術(shù):Linux喜迎DTrace

通過前面幾篇文章的介紹仔引,我們已經(jīng)可以通過一系列命令抑诸,從不同維度獲得操作系統(tǒng)當(dāng)前的性能運(yùn)行情況。
另外界赔,借助類似Ganglia這樣的開源產(chǎn)品古话,持續(xù)不斷地實(shí)施性能數(shù)據(jù)采集和存儲雏吭,我們基于時(shí)間序列的歷史性能圖形,就可以大致判讀出計(jì)算集群的資源消耗情況和變化趨勢陪踩。
但是杖们,僅僅這些還是不夠的,在很多情況下膊毁,我們希望能夠知道:“慢胀莹,是為什么慢基跑;快婚温,又是為什么快”。
如果要回答這個(gè)問題媳否,就必須引入另外一件神兵利器:動(dòng)態(tài)追蹤技術(shù)(Dynamic Tracing)栅螟。

鑒于這套兵器過于復(fù)雜(牛逼)荆秦,屬于專家級技能, advanced performance analysis and troubleshooting tool力图。
據(jù)稱掌握該技能需要耗費(fèi)大約100小時(shí)以上步绸,所以如果不是對于系統(tǒng)性能問題有極致追求,以及變態(tài)般地技術(shù)狂熱吃媒,建議繞過本文瓤介。

為了便于展開,今天先起個(gè)頭赘那,重點(diǎn)梳理下動(dòng)態(tài)追蹤技術(shù)的發(fā)展簡史和目前的生態(tài)環(huán)境刑桑。更加具體詳細(xì)的內(nèi)容,會在后續(xù)的文章中陸續(xù)發(fā)表募舟。

上月底祠斧,正當(dāng)全國人民翹首以盼光棍節(jié)的時(shí)候,開源社區(qū)傳來一則重要新聞:
Linux 4.9-rc1發(fā)布拱礁,正式合并了一項(xiàng)重要特性:BPF追蹤(Timed sampling)琢锋。

系統(tǒng)性能領(lǐng)域的國際導(dǎo)師Brendan Gregg,感動(dòng)得都快哭了呢灶,當(dāng)即在Twitter上表示這是一個(gè)重要的里程碑!
他隨后又寫了一篇長文《DTrace for Linux 2016》吴超,以示慶祝。

As a long time DTrace user and expert, this is an exciting milestone!
--Brendan Gregg

Linux 合并了BPF而已嘛填抬,跟DTrace這個(gè)勞什子有什么關(guān)系呢烛芬?

DTrace 是動(dòng)態(tài)追蹤技術(shù)的鼻祖,源自 Solaris 操作系統(tǒng)飒责,提供了高級性能分析和調(diào)試功能赘娄,它的源代碼采用 CDDL 許可證,不兼容 Linux 內(nèi)核使用的 GPLv2 許可證宏蛉,無法直接移植遣臼。
當(dāng)然,江湖上還有另外一種說法拾并,Linux之所以一直沒有原生支持DTrace,是因?yàn)長inus 覺得這玩意沒什么必要揍堰。
Anyway,隨著 BPF跟蹤的最后主要功能合并到 Linux 4.9-rc1,Linux 現(xiàn)在有了類似 DTrace 的高級分析和調(diào)試功能嗅义。

Linux 這次合并的BPF(The Berkeley Packet Filter )屏歹,和Ganglia一樣,來自于加州大學(xué)伯克利分校(這所大學(xué)很有意思之碗,以后還要反復(fù)提到)蝙眶。
BPF,顧名思義褪那,最早只是一個(gè)純粹的封包過濾器幽纷,大家比較熟知的netfilter式塌,就是基于BPF實(shí)現(xiàn)的動(dòng)態(tài)編譯器。
后來在很多牛人的參與下友浸,進(jìn)行了擴(kuò)展峰尝,得到了一個(gè)所謂的 eBPF,可以作為某種更加通用的內(nèi)核虛擬機(jī)收恢。
通過這種機(jī)制武学,我們其實(shí)可以在 Linux 中構(gòu)建類似 DTrace 那種常駐內(nèi)核的動(dòng)態(tài)追蹤虛擬機(jī)。

Linux 沒有 DTrace(名字)伦意,但現(xiàn)在有了 DTrace(功能)

嚴(yán)格來說劳淆,DTrace這個(gè)詞本身,已經(jīng)并不是狹義上基于Solaris的那套工具了默赂,而是代表的是后現(xiàn)代操作系統(tǒng)的一整套工具家族和方法論沛鸵。

History

當(dāng)時(shí) Solaris 操作系統(tǒng)的幾個(gè)工程師花了幾天幾夜去排查一個(gè)看似非常詭異的線上問題。
開始他們以為是很高級的問題缆八,就特別賣力曲掰,結(jié)果折騰了幾天,最后發(fā)現(xiàn)其實(shí)是一個(gè)非常愚蠢的奈辰、某個(gè)不起眼的地方的配置問題栏妖。
自從那件事情之后,這些工程師就痛定思痛奖恰,創(chuàng)造了 DTrace 這樣一個(gè)非常高級的調(diào)試工具吊趾,來幫助他們在未來的工作當(dāng)中避免把過多精力花費(fèi)在愚蠢問題上面。
畢竟大部分所謂的“詭異問題”其實(shí)都是低級問題瑟啃,屬于那種“調(diào)不出來很郁悶论泛,調(diào)出來了更郁悶”的類型。---《漫談動(dòng)態(tài)追蹤技術(shù)》

通觀DTrace的演變過程蛹屿,幾乎相當(dāng)于一部現(xiàn)代操作系統(tǒng)系統(tǒng)的發(fā)展史屁奏,細(xì)查起來,極其復(fù)雜错负。
但是有兩個(gè)人非常值得關(guān)注坟瓢,一個(gè)是國際級的布道師,一個(gè)是國內(nèi)的代表人物犹撒,
初學(xué)者完全可以通過閱讀他們的文章折联、代碼,甚至微博/Twitter動(dòng)態(tài)识颊,了解動(dòng)態(tài)追蹤技術(shù)的實(shí)際應(yīng)用情況诚镰。

Brendan Gregg

前SUN性能工程師,最早的DTrace用戶,出版了包括《性能之巔》在內(nèi)的一大批書籍怕享,囊括了性能問題領(lǐng)域的技術(shù)、工具镰踏、方法論等方方面面函筋。
是動(dòng)態(tài)追蹤技術(shù)當(dāng)之無愧的首席布道師。他維護(hù)的個(gè)人博客發(fā)布了大量的原創(chuàng)內(nèi)容奠伪,并且持續(xù)保持著相當(dāng)?shù)幕钴S度跌帐。可以作為第一手的學(xué)習(xí)資料绊率。

Twitter:https://twitter.com/brendangregg
個(gè)人網(wǎng)站:http://www.brendangregg.com

章亦春
網(wǎng)名 agentzh谨敛。開源項(xiàng)目OpenResty創(chuàng)始人,編寫了很多 Nginx 的第三方模塊滤否, Perl 開源模塊脸狸,以及最近一些年寫的很多 Lua 方面的庫。
他發(fā)表過的《漫談動(dòng)態(tài)追蹤技術(shù)》藐俺,是目前唯一由Brendan認(rèn)證的中文資料炊甲,入門首選。
另外欲芹,他本人也在目前的工作卿啡、開源項(xiàng)目運(yùn)營中大量使用動(dòng)態(tài)追蹤技術(shù)。
微博:http://weibo.com/agentzh

Linux 追蹤器選型

動(dòng)態(tài)追蹤技術(shù)最復(fù)雜的地方在于追蹤器種類繁多菱父,讓人一時(shí)無從下手颈娜。
根據(jù)前人的一些經(jīng)驗(yàn)總結(jié),建議按照以下路徑進(jìn)行選擇:

普通模式

適用于:開發(fā)者, 系統(tǒng)管理員, DevOps, SRE

CPU分析

perf_events的應(yīng)用很廣泛浙宜,配合Brendan Gregg老師研究的火焰圖工具官辽,可以分析程序在所有代碼基的資源消耗,精確定位到函數(shù)級粟瞬。
例如:


火焰圖實(shí)例

進(jìn)程追蹤

# ./execsnoop
Tracing exec()s. Ctrl-C to end.
   PID   PPID ARGS
 22898  22004 man ls
 22905  22898 preconv -e UTF-8
 22908  22898 pager -s
 22907  22898 nroff -mandoc -rLL=164n -rLT=164n -Tutf8

HARD模式

適用于:性能或內(nèi)核工程師

Understanding all the Linux tracers to make a rational decision between them a huge undertaking.

  1. ftrace
    內(nèi)核hacker的最愛野崇。已經(jīng)包含在內(nèi)核,能夠支持 tracepoints, kprobes, and uprobes,
    并提供一些能力: 事件追蹤, 可選擇過濾器和參數(shù); 事件計(jì)數(shù)和時(shí)間采樣亩钟,內(nèi)核概覽乓梨;基于函數(shù)的路徑追蹤。

  2. perf_events
    Linux用戶的主要追蹤器之一清酥,它的源代碼在內(nèi)核中扶镀,通常在一個(gè) linux-tools-common包。

  3. eBPF
    基于內(nèi)核的虛擬機(jī)

  4. SystemTap
    最強(qiáng)有力的追蹤器焰轻。它可以做幾乎所有的事情: 分析臭觉,打點(diǎn), kprobes, uprobes (源子 SystemTap), USDT, 內(nèi)核編程等。

  5. LTTng
    事件收集器, 優(yōu)于其它追蹤器,支持多種事件類型蝠筑,包括 USDT狞膘。

  6. ktap
    一個(gè)很有前景的追蹤器,基于lua內(nèi)核虛擬機(jī)

  7. dtrace4linux
    個(gè)人開發(fā)者業(yè)余產(chǎn)出 (Paul Fox) 什乙,將 Sun DTrace遷移到 Linux挽封。

  8. OL DTrace
    Oracle Linux DTrace,將 DTrace 遷移到Oracle Linux的實(shí)現(xiàn)臣镣。

  9. sysdig
    一種新型追蹤器辅愿, 能夠基于類似tcpdump的命令操作 syscall events, 再用lua后處理。

擴(kuò)展閱讀:Linux 操作系統(tǒng)

推薦:電子書《Linux Perf Master》

發(fā)表在GitBook平臺忆某,歡迎訂閱点待、下載、批評指正:
https://www.gitbook.com/book/riboseyim/linux-perf-master/details

eBook
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末弃舒,一起剝皮案震驚了整個(gè)濱河市癞埠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌聋呢,老刑警劉巖燕差,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異坝冕,居然都是意外死亡徒探,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進(jìn)店門喂窟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來测暗,“玉大人,你說我怎么就攤上這事磨澡⊥胱模” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵稳摄,是天一觀的道長稚字。 經(jīng)常有香客問我,道長厦酬,這世上最難降的妖魔是什么胆描? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮仗阅,結(jié)果婚禮上昌讲,老公的妹妹穿的比我還像新娘。我一直安慰自己减噪,他們只是感情好短绸,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布车吹。 她就那樣靜靜地躺著,像睡著了一般醋闭。 火紅的嫁衣襯著肌膚如雪窄驹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天证逻,我揣著相機(jī)與錄音乐埠,去河邊找鬼。 笑死瑟曲,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的豪治。 我是一名探鬼主播洞拨,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼负拟!你這毒婦竟也來了烦衣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤掩浙,失蹤者是張志新(化名)和其女友劉穎花吟,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體厨姚,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡衅澈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了谬墙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片今布。...
    茶點(diǎn)故事閱讀 40,852評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖拭抬,靈堂內(nèi)的尸體忽然破棺而出部默,到底是詐尸還是另有隱情,我是刑警寧澤造虎,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布傅蹂,位于F島的核電站,受9級特大地震影響算凿,放射性物質(zhì)發(fā)生泄漏份蝴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一氓轰、第九天 我趴在偏房一處隱蔽的房頂上張望搞乏。 院中可真熱鬧,春花似錦戒努、人聲如沸请敦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽侍筛。三九已至萤皂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間匣椰,已是汗流浹背裆熙。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留禽笑,地道東北人入录。 一個(gè)月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像佳镜,于是被迫代替她去往敵國和親僚稿。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容