通過前面幾篇文章的介紹,我們已經(jīng)可以通過一系列命令,從不同維度獲得操作系統(tǒng)當(dāng)前的性能運(yùn)行情況。
另外,借助類似Ganglia這樣的開源產(chǎn)品,持續(xù)不斷地實(shí)施性能數(shù)據(jù)采集和存儲,我們基于時間序列的歷史性能圖形,就可以大致判讀出計(jì)算集群的資源消耗情況和變化趨勢。
但是,僅僅這些還是不夠的,在很多情況下,我們希望能夠知道:“慢,是為什么慢;快,又是為什么快”。
如果要回答這個問題,就必須引入另外一件神兵利器:動態(tài)追蹤技術(shù)(Dynamic Tracing)。
鑒于這套兵器過于復(fù)雜(牛逼),屬于專家級技能, advanced performance analysis and troubleshooting tool。
據(jù)稱掌握該技能需要耗費(fèi)大約100小時以上,所以如果不是對于系統(tǒng)性能問題有極致追求,以及變態(tài)般地技術(shù)狂熱,建議繞過本文。
為了便于展開,今天先起個頭,重點(diǎn)梳理下動態(tài)追蹤技術(shù)的發(fā)展簡史和目前的生態(tài)環(huán)境。更加具體詳細(xì)的內(nèi)容,會在后續(xù)的文章中陸續(xù)發(fā)表。
上月底,正當(dāng)全國人民翹首以盼光棍節(jié)的時候,開源社區(qū)傳來一則重要新聞:
Linux 4.9-rc1發(fā)布,正式合并了一項(xiàng)重要特性:BPF追蹤(Timed sampling)。
系統(tǒng)性能領(lǐng)域的國際導(dǎo)師Brendan Gregg,感動得都快哭了,當(dāng)即在Twitter上表示這是一個重要的里程碑!
他隨后又寫了一篇長文《DTrace for Linux 2016》,以示慶祝。
As a long time DTrace user and expert, this is an exciting milestone!
--Brendan Gregg
Linux 合并了BPF而已嘛,跟DTrace這個勞什子有什么關(guān)系呢?
DTrace 是動態(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,顧名思義,最早只是一個純粹的封包過濾器,大家比較熟知的netfilter,就是基于BPF實(shí)現(xiàn)的動態(tài)編譯器。
后來在很多牛人的參與下,進(jìn)行了擴(kuò)展,得到了一個所謂的 eBPF,可以作為某種更加通用的內(nèi)核虛擬機(jī)。
通過這種機(jī)制,我們其實(shí)可以在 Linux 中構(gòu)建類似 DTrace 那種常駐內(nèi)核的動態(tài)追蹤虛擬機(jī)。
Linux 沒有 DTrace(名字),但現(xiàn)在有了 DTrace(功能)
嚴(yán)格來說,DTrace這個詞本身,已經(jīng)并不是狹義上基于Solaris的那套工具了,而是代表的是后現(xiàn)代操作系統(tǒng)的一整套工具家族和方法論。
History
當(dāng)時 Solaris 操作系統(tǒng)的幾個工程師花了幾天幾夜去排查一個看似非常詭異的線上問題。
開始他們以為是很高級的問題,就特別賣力,結(jié)果折騰了幾天,最后發(fā)現(xiàn)其實(shí)是一個非常愚蠢的、某個不起眼的地方的配置問題。
自從那件事情之后,這些工程師就痛定思痛,創(chuàng)造了 DTrace 這樣一個非常高級的調(diào)試工具,來幫助他們在未來的工作當(dāng)中避免把過多精力花費(fèi)在愚蠢問題上面。
畢竟大部分所謂的“詭異問題”其實(shí)都是低級問題,屬于那種“調(diào)不出來很郁悶,調(diào)出來了更郁悶”的類型。---《漫談動態(tài)追蹤技術(shù)》

通觀DTrace的演變過程,幾乎相當(dāng)于一部現(xiàn)代操作系統(tǒng)系統(tǒng)的發(fā)展史,細(xì)查起來,極其復(fù)雜。
但是有兩個人非常值得關(guān)注,一個是國際級的布道師,一個是國內(nèi)的代表人物,
初學(xué)者完全可以通過閱讀他們的文章、代碼,甚至微博/Twitter動態(tài),了解動態(tài)追蹤技術(shù)的實(shí)際應(yīng)用情況。
Brendan Gregg
前SUN性能工程師,最早的DTrace用戶,出版了包括《性能之巔》在內(nèi)的一大批書籍,囊括了性能問題領(lǐng)域的技術(shù)、工具、方法論等方方面面。
是動態(tài)追蹤技術(shù)當(dāng)之無愧的首席布道師。他維護(hù)的個人博客發(fā)布了大量的原創(chuàng)內(nèi)容,并且持續(xù)保持著相當(dāng)?shù)幕钴S度??梢宰鳛榈谝皇值膶W(xué)習(xí)資料。
Twitter:https://twitter.com/brendangregg
個人網(wǎng)站:http://www.brendangregg.com
章亦春
網(wǎng)名 agentzh。開源項(xiàng)目OpenResty創(chuàng)始人,編寫了很多 Nginx 的第三方模塊, Perl 開源模塊,以及最近一些年寫的很多 Lua 方面的庫。
他發(fā)表過的《漫談動態(tài)追蹤技術(shù)》,是目前唯一由Brendan認(rèn)證的中文資料,入門首選。
另外,他本人也在目前的工作、開源項(xiàng)目運(yùn)營中大量使用動態(tài)追蹤技術(shù)。
微博:http://weibo.com/agentzh
Linux 追蹤器選型
動態(tài)追蹤技術(shù)最復(fù)雜的地方在于追蹤器種類繁多,讓人一時無從下手。
根據(jù)前人的一些經(jīng)驗(yàn)總結(jié),建議按照以下路徑進(jìn)行選擇:

普通模式
適用于:開發(fā)者, 系統(tǒng)管理員, DevOps, SRE
CPU分析
perf_events的應(yīng)用很廣泛,配合Brendan Gregg老師研究的火焰圖工具,可以分析程序在所有代碼基的資源消耗,精確定位到函數(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.

ftrace
內(nèi)核hacker的最愛。已經(jīng)包含在內(nèi)核,能夠支持 tracepoints, kprobes, and uprobes,
并提供一些能力: 事件追蹤, 可選擇過濾器和參數(shù); 事件計(jì)數(shù)和時間采樣,內(nèi)核概覽;基于函數(shù)的路徑追蹤。perf_events
Linux用戶的主要追蹤器之一,它的源代碼在內(nèi)核中,通常在一個 linux-tools-common包。eBPF
基于內(nèi)核的虛擬機(jī)SystemTap
最強(qiáng)有力的追蹤器。它可以做幾乎所有的事情: 分析,打點(diǎn), kprobes, uprobes (源子 SystemTap), USDT, 內(nèi)核編程等。LTTng
事件收集器, 優(yōu)于其它追蹤器,支持多種事件類型,包括 USDT。ktap
一個很有前景的追蹤器,基于lua內(nèi)核虛擬機(jī)dtrace4linux
個人開發(fā)者業(yè)余產(chǎn)出 (Paul Fox) ,將 Sun DTrace遷移到 Linux。OL DTrace
Oracle Linux DTrace,將 DTrace 遷移到Oracle Linux的實(shí)現(xiàn)。sysdig
一種新型追蹤器, 能夠基于類似tcpdump的命令操作 syscall events, 再用lua后處理。
擴(kuò)展閱讀:Linux 操作系統(tǒng)
- 《Linus Torvalds:Just for Fun》
- Linux 常用命令一百條
- Linux 性能診斷:負(fù)載評估
- Linux 性能診斷:快速檢查單(Netflix版)
- Linux 性能診斷:薦書|《圖解性能優(yōu)化》
- Linux 性能診斷:Web應(yīng)用性能優(yōu)化
- 操作系統(tǒng)原理 | How Linux Works(一):How the Linux Kernel Boots
- 操作系統(tǒng)原理 | How Linux Works(二):User Space & RAM
- 操作系統(tǒng)原理 | How Linux Works(三):Memory
推薦:電子書《Linux Perf Master》
發(fā)表在GitBook平臺,歡迎訂閱、下載、批評指正:
https://www.gitbook.com/book/riboseyim/linux-perf-master/details
