通過前面幾篇文章的介紹仔引,我們已經(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ù)級粟瞬。
例如:
進(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ù)和時(shí)間采樣亩钟,內(nèi)核概覽乓梨;基于函數(shù)的路徑追蹤。perf_events
Linux用戶的主要追蹤器之一清酥,它的源代碼在內(nèi)核中扶镀,通常在一個(gè) linux-tools-common包。eBPF
基于內(nèi)核的虛擬機(jī)SystemTap
最強(qiáng)有力的追蹤器焰轻。它可以做幾乎所有的事情: 分析臭觉,打點(diǎn), kprobes, uprobes (源子 SystemTap), USDT, 內(nèi)核編程等。LTTng
事件收集器, 優(yōu)于其它追蹤器,支持多種事件類型蝠筑,包括 USDT狞膘。ktap
一個(gè)很有前景的追蹤器,基于lua內(nèi)核虛擬機(jī)dtrace4linux
個(gè)人開發(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