動態追蹤技術:Linux喜迎DTrace

經過前面幾篇文章的介紹,咱們已經能夠經過一系列命令,從不一樣維度得到操做系統當前的性能運行狀況。 另外,藉助相似Ganglia這樣的開源產品,持續不斷地實施性能數據採集和存儲,咱們基於時間序列的歷史性能圖形,就能夠大體判讀出計算集羣的資源消耗狀況和變化趨勢。 可是,僅僅這些仍是不夠的,在不少狀況下,咱們但願可以知道:「慢,是爲何慢;快,又是爲何快」。 若是要回答這個問題,就必須引入另一件神兵利器:動態追蹤技術(Dynamic Tracing)。html

鑑於這套兵器過於複雜(牛逼),屬於專家級技能, advanced performance analysis and troubleshooting tool。據稱掌握該技能須要耗費大約100小時以上,因此若是不是對於系統性能問題有極致追求,以及變態般地技術狂熱,建議繞過本文。linux

爲了便於展開,今天先起個頭,重點梳理下動態追蹤技術的發展簡史和目前的生態環境。更加具體詳細的內容,會在後續的文章中陸續發表。git

上月底,正當全國人民翹首以盼光棍節的時候,開源社區傳來一則重要新聞: Linux 4.9-rc1發佈,正式合併了一項重要特性:BPF追蹤(Timed sampling)。github

系統性能領域的國際導師Brendan Gregg,感動得都快哭了,立即在Twitter上表示這是一個重要的里程碑! 他隨後又寫了一篇長文《DTrace for Linux 2016》,以示慶祝。編程

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

Linux 合併了BPF而已嘛,跟DTrace這個勞什子有什麼關係呢?tcp

DTrace 是動態追蹤技術的鼻祖,源自 Solaris 操做系統,提供了高級性能分析和調試功能,它的源代碼採用 CDDL 許可證,不兼容 Linux 內核使用的 GPLv2 許可證,沒法直接移植。固然,江湖上還有另一種說法,Linux之因此一直沒有原生支持DTrace,是由於Linus 以爲這玩意沒什麼必要。Anyway,隨着 BPF跟蹤的最後主要功能合併到 Linux 4.9-rc1,Linux 如今有了相似 DTrace 的高級分析和調試功能。函數

Linux 此次合併的BPF(The Berkeley Packet Filter ),和Ganglia同樣,來自於加州大學伯克利分校(這所大學頗有意思,之後還要反覆提到)。BPF,顧名思義,最先只是一個純粹的封包過濾器,後來在不少牛人的參與下,進行了擴展,獲得了一個所謂的 eBPF,能夠做爲某種更加通用的內核虛擬機。 經過這種機制,咱們其實能夠在 Linux 中構建相似 DTrace 那種常駐內核的動態追蹤虛擬機。工具

Linux 沒有 DTrace(名字),但如今有了 DTrace(功能)oop

嚴格來講,DTrace這個詞自己,已經並非狹義上基於Solaris的那套工具了,而是表明的是後現代操做系統的一整套工具家族和方法論。

History

當時 Solaris 操做系統的幾個工程師花了幾天幾夜去排查一個看似很是詭異的線上問題。 開始他們覺得是很高級的問題,就特別賣力,結果折騰了幾天,最後發現實際上是一個很是愚蠢的、某個不起眼的地方的配置問題。 自從那件事情以後,這些工程師就痛定思痛,創造了 DTrace 這樣一個很是高級的調試工具,來幫助他們在將來的工做當中避免把過多精力花費在愚蠢問題上面。 畢竟大部分所謂的「詭異問題」其實都是低級問題,屬於那種「調不出來很鬱悶,調出來了更鬱悶」的類型。---《漫談動態追蹤技術》

通觀DTrace的演變過程,幾乎至關於一部現代操做系統系統的發展史,細查起來,極其複雜。 可是有兩我的很是值得關注,一個是國際級的佈道師,一個是國內的表明人物, 初學者徹底能夠經過閱讀他們的文章、代碼,甚至微博/Twitter動態,瞭解動態追蹤技術的實際應用狀況。

Brendan Gregg

前SUN性能工程師,最先的DTrace用戶,出版了包括《性能之巔》在內的一大批書籍,囊括了性能問題領域的技術、工具、方法論等方方面面。 是動態追蹤技術當之無愧的首席佈道師。他維護的我的博客發佈了大量的原創內容,而且持續保持着至關的活躍度。能夠做爲第一手的學習資料。

Twitter: 我的網站:

章亦春 網名 agentzh。開源項目OpenResty創始人,編寫了不少 Nginx 的第三方模塊, Perl 開源模塊,以及最近一些年寫的不少 Lua 方面的庫。 他發表過的《漫談動態追蹤技術》,是目前惟一由Brendan認證的中文資料,入門首選。 另外,他本人也在目前的工做、開源項目運營中大量使用動態追蹤技術。 微博:

Linux 追蹤器選型

動態追蹤技術最複雜的地方在於追蹤器種類繁多,讓人一時無從下手。 根據前人的一些經驗總結,建議按照如下路徑進行選擇:

普通模式

適用於:開發者, 系統管理員, DevOps, SRE

CPU分析

perf_events的應用很普遍,配合Brendan Gregg老師研究的火焰圖工具,能夠分析程序在全部代碼基的資源消耗,精肯定位到函數級。 例如: 火焰圖實例

進程追蹤

# ./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模式

適用於:性能或內核工程師

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

  1. ftrace 內核hacker的最愛。已經包含在內核,可以支持 tracepoints, kprobes, and uprobes, 並提供一些能力: 事件追蹤, 可選擇過濾器和參數; 事件計數和時間採樣,內核概覽;基於函數的路徑追蹤。

  2. perf_events Linux用戶的主要追蹤器之一,它的源代碼在內核中,一般在一個 linux-tools-common包。

  3. eBPF 基於內核的虛擬機

  4. SystemTap 最強有力的追蹤器。它能夠作幾乎全部的事情: 分析,打點, kprobes, uprobes (源子 SystemTap), USDT, 內核編程等。

  5. LTTng 事件收集器, 優於其它追蹤器,支持多種事件類型,包括 USDT。

  6. ktap 一個頗有前景的追蹤器,基於lua內核虛擬機

  7. dtrace4linux 我的開發者業餘產出 (Paul Fox) ,將 Sun DTrace遷移到 Linux。

  8. OL DTrace Oracle Linux DTrace,將 DTrace 遷移到Oracle Linux的實現。

  9. sysdig 一種新型追蹤器, 可以基於相似tcpdump的命令操做 syscall events, 再用lua後處理。

推薦電子書:《Linux Perf Master》

以Linux性能爲核心,覆蓋評估診斷、監控、優化工具、方法論和參考案例,歡迎訂閱、下載、批評指正。 本書發表在GitBook平臺: https://www.gitbook.com/book/riboseyim/linux-perf-master/details

更多精彩內容掃碼關注公衆號:RiboseYim's Blog:https://riboseyim.github.io 微信公衆號

相關文章
相關標籤/搜索