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

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

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

Linux跟蹤器如何選擇,學(xué)會這招就很簡單了

Linux愛好者 ? 來源:未知 ? 作者:龔婷 ? 2018-03-12 15:45 ? 次閱讀

跟蹤器tracer是一個高級的性能分析和調(diào)試工具,如果你使用過 strace或者 tcpdump,你不應(yīng)該被它嚇到 … 你使用的就是跟蹤器。系統(tǒng)跟蹤器能讓你看到很多的東西,而不僅是系統(tǒng)調(diào)用或者數(shù)據(jù)包,因?yàn)槌R姷母櫰鞫伎梢愿檭?nèi)核或者應(yīng)用程序的任何東西。

有大量的 Linux 跟蹤器可供你選擇。由于它們中的每個都有一個官方的(或者非官方的)的吉祥物,我們有足夠多的選擇給孩子們展示。

你喜歡使用哪一個呢?

我從兩類讀者的角度來回答這個問題:大多數(shù)人和性能/內(nèi)核工程師。當(dāng)然,隨著時間的推移,這也可能會發(fā)生變化,因此,我需要及時去更新本文內(nèi)容,或許是每年一次,或者更頻繁。(LCTT 譯注:本文最后更新于 2015 年)

對于大多數(shù)人

大多數(shù)人(開發(fā)者、系統(tǒng)管理員、運(yùn)維人員、網(wǎng)絡(luò)可靠性工程師(SRE)…)是不需要去學(xué)習(xí)系統(tǒng)跟蹤器的底層細(xì)節(jié)的。以下是你需要去了解和做的事情:

1. 使用 perf_events 進(jìn)行 CPU 剖析

可以使用 perf_events 進(jìn)行 CPU 剖析profiling。它可以用一個 火焰圖 來形象地表示。比如:

git clone --depth1https://github.com/brendangregg/FlameGraph

perf record -F99 -a -g -- sleep30

perf script | ./FlameGraph/stackcollapse-perf.pl | ./FlameGraph/flamegraph.pl > perf.svg

Linux 的 perf_events(即perf,后者是它的命令)是官方為 Linux 用戶準(zhǔn)備的跟蹤器/分析器。它位于內(nèi)核源碼中,并且維護(hù)的非常好(而且現(xiàn)在它的功能還在快速變強(qiáng))。它一般是通過 linux-tools-common 這個包來添加的。

perf可以做的事情很多,但是,如果我只能建議你學(xué)習(xí)其中的一個功能的話,那就是 CPU 剖析。雖然從技術(shù)角度來說,這并不是事件“跟蹤”,而是采樣sampling。最難的部分是獲得完整的棧和符號,這部分在我的Linux Profiling at Netflix中針對 JavaNode.js 討論過。

2. 知道它能干什么

正如一位朋友所說的:“你不需要知道 X 光機(jī)是如何工作的,但你需要明白的是,如果你吞下了一個硬幣,X 光機(jī)是你的一個選擇!”你需要知道使用跟蹤器能夠做什么,因此,如果你在業(yè)務(wù)上確實(shí)需要它,你可以以后再去學(xué)習(xí)它,或者請會使用它的人來做。

簡單地說:幾乎任何事情都可以通過跟蹤來了解它。內(nèi)部文件系統(tǒng)、TCP/IP 處理過程、設(shè)備驅(qū)動、應(yīng)用程序內(nèi)部情況。

3. 需要一個前端工具

如果你要購買一個性能分析工具(有許多公司銷售這類產(chǎn)品),并要求支持 Linux 跟蹤。想要一個直觀的“點(diǎn)擊”界面去探查內(nèi)核的內(nèi)部,以及包含一個在不同堆棧位置的延遲熱力圖。

我創(chuàng)建并開源了我自己的一些前端工具,雖然它是基于 CLI 的(不是圖形界面的)。這樣可以使其它人使用跟蹤器更快更容易。比如,我的perf-tools,跟蹤新進(jìn)程是這樣的:

# ./execsnoop

Tracing exec()s.Ctrl-Ctoend.

PID PPID ARGS

2289822004man ls

2290522898preconv -eUTF-8

2290822898pager -s

2290722898nroff -mandoc -rLL=164n -rLT=164n -Tutf8

[...]

在 Netflix 公司,我正在開發(fā)Vector,它是一個實(shí)例分析工具,實(shí)際上它也是一個 Linux 跟蹤器的前端。

對于性能或者內(nèi)核工程師

一般來說,我們的工作都非常難,因?yàn)榇蠖鄶?shù)人或許要求我們?nèi)ジ闱宄绾稳ジ櫮硞€事件,以及因此需要選擇使用哪個跟蹤器。為完全理解一個跟蹤器,你通常需要花至少一百多個小時去使用它。理解所有的 Linux 跟蹤器并能在它們之間做出正確的選擇是件很難的事情。(我或許是唯一接近完成這件事的人)

在這里我建議選擇如下,要么:

A)選擇一個全能的跟蹤器,并以它為標(biāo)準(zhǔn)。這需要在一個測試環(huán)境中花大量的時間來搞清楚它的細(xì)微差別和安全性。我現(xiàn)在的建議是 SystemTap 的最新版本(例如,從源代碼構(gòu)建)。我知道有的公司選擇的是 LTTng ,盡管它并不是很強(qiáng)大(但是它很安全),但他們也用的很好。如果在sysdig中添加了跟蹤點(diǎn)或者是 kprobes,它也是另外的一個候選者。

B)按我的Velocity 教程中的流程圖。這意味著盡可能使用 ftrace 或者 perf_events,eBPF 已經(jīng)集成到內(nèi)核中了,然后用其它的跟蹤器,如 SystemTap/LTTng 作為對 eBPF 的補(bǔ)充。我目前在 Netflix 的工作中就是這么做的。

以下是我對各個跟蹤器的評價:

1. ftrace

我愛ftrace,它是內(nèi)核黑客最好的朋友。它被構(gòu)建進(jìn)內(nèi)核中,它能夠利用跟蹤點(diǎn)、kprobes、以及 uprobes,以提供一些功能:使用可選的過濾器和參數(shù)進(jìn)行事件跟蹤;事件計數(shù)和計時,內(nèi)核概覽;函數(shù)流步進(jìn)function-flow walking。關(guān)于它的示例可以查看內(nèi)核源代碼樹中的ftrace.txt。它通過/sys來管理,是面向單一的 root 用戶的(雖然你可以使用緩沖實(shí)例以讓其支持多用戶),它的界面有時很繁瑣,但是它比較容易調(diào)校hackable,并且有個前端:ftrace 的主要創(chuàng)建者 Steven Rostedt 設(shè)計了一個 trace-cmd,而且我也創(chuàng)建了 perf-tools 集合。我最詬病的就是它不是可編程的programmable,因此,舉個例子說,你不能保存和獲取時間戳、計算延遲,以及將其保存為直方圖。你需要轉(zhuǎn)儲事件到用戶級以便于進(jìn)行后期處理,這需要花費(fèi)一些成本。它也許可以通過 eBPF 實(shí)現(xiàn)可編程。

2. perf_events

perf_events是 Linux 用戶的主要跟蹤工具,它的源代碼位于 Linux 內(nèi)核中,一般是通過 linux-tools-common 包來添加的。它又稱為perf,后者指的是它的前端,它相當(dāng)高效(動態(tài)緩存),一般用于跟蹤并轉(zhuǎn)儲到一個文件中(perf.data),然后可以在之后進(jìn)行后期處理。它可以做大部分 ftrace 能做的事情。它不能進(jìn)行函數(shù)流步進(jìn),并且不太容易調(diào)校(而它的安全/錯誤檢查做的更好一些)。但它可以做剖析(采樣)、CPU 性能計數(shù)、用戶級的棧轉(zhuǎn)換、以及使用本地變量利用調(diào)試信息debuginfo進(jìn)行行級跟蹤line tracing。它也支持多個并發(fā)用戶。與 ftrace 一樣,它也不是內(nèi)核可編程的,除非 eBPF 支持(補(bǔ)丁已經(jīng)在計劃中)。如果只學(xué)習(xí)一個跟蹤器,我建議大家去學(xué)習(xí) perf,它可以解決大量的問題,并且它也相當(dāng)安全。

3. eBPF

擴(kuò)展的伯克利包過濾器extended Berkeley Packet Filter(eBPF)是一個內(nèi)核內(nèi)in-kernel的虛擬機(jī),可以在事件上運(yùn)行程序,它非常高效(JIT)。它可能最終為 ftrace 和 perf_events 提供內(nèi)核內(nèi)編程in-kernel programming,并可以去增強(qiáng)其它跟蹤器。它現(xiàn)在是由 Alexei Starovoitov 開發(fā)的,還沒有實(shí)現(xiàn)完全的整合,但是對于一些令人印象深刻的工具,有些內(nèi)核版本(比如,4.1)已經(jīng)支持了:比如,塊設(shè)備 I/O 的延遲熱力圖latency heat map。更多參考資料,請查閱 Alexei 的BPF 演示,和它的eBPF 示例。

4. SystemTap

SystemTap是一個非常強(qiáng)大的跟蹤器。它可以做任何事情:剖析、跟蹤點(diǎn)、kprobes、uprobes(它就來自 SystemTap)、USDT、內(nèi)核內(nèi)編程等等。它將程序編譯成內(nèi)核模塊并加載它們 —— 這是一種很難保證安全的方法。它開發(fā)是在內(nèi)核代碼樹之外進(jìn)行的,并且在過去出現(xiàn)過很多問題(內(nèi)核崩潰或凍結(jié))。許多并不是 SystemTap 的過錯 —— 它通常是首次對內(nèi)核使用某些跟蹤功能,并率先遇到 bug。最新版本的 SystemTap 是非常好的(你需要從它的源代碼編譯),但是,許多人仍然沒有從早期版本的問題陰影中走出來。如果你想去使用它,花一些時間去測試環(huán)境,然后,在 irc.freenode.net 的 #systemtap 頻道與開發(fā)者進(jìn)行討論。(Netflix 有一個容錯架構(gòu),我們使用了 SystemTap,但是我們或許比起你來說,更少擔(dān)心它的安全性)我最詬病的事情是,它似乎假設(shè)你有辦法得到內(nèi)核調(diào)試信息,而我并沒有這些信息。沒有它我實(shí)際上可以做很多事情,但是缺少相關(guān)的文檔和示例(我現(xiàn)在自己開始幫著做這些了)。

5. LTTng

LTTng對事件收集進(jìn)行了優(yōu)化,性能要好于其它的跟蹤器,也支持許多的事件類型,包括 USDT。它的開發(fā)是在內(nèi)核代碼樹之外進(jìn)行的。它的核心部分非常簡單:通過一個很小的固定指令集寫入事件到跟蹤緩沖區(qū)。這樣讓它既安全又快速。缺點(diǎn)是做內(nèi)核內(nèi)編程不太容易。我覺得那不是個大問題,由于它優(yōu)化的很好,可以充分的擴(kuò)展,盡管需要后期處理。它也探索了一種不同的分析技術(shù)。很多的“黑匣子”記錄了所有感興趣的事件,以便可以在 GUI 中以后分析它。我擔(dān)心該記錄會錯失之前沒有預(yù)料的事件,我真的需要花一些時間去看看它在實(shí)踐中是如何工作的。這個跟蹤器上我花的時間最少(沒有特別的原因)。

6. ktap

ktap是一個很有前途的跟蹤器,它在內(nèi)核中使用了一個 lua 虛擬機(jī),不需要調(diào)試信息和在嵌入時設(shè)備上可以工作的很好。這使得它進(jìn)入了人們的視野,在某個時候似乎要成為 Linux 上最好的跟蹤器。然而,由于 eBPF 開始集成到了內(nèi)核,而 ktap 的集成工作被推遲了,直到它能夠使用 eBPF 而不是它自己的虛擬機(jī)。由于 eBPF 在幾個月過去之后仍然在集成過程中,ktap 的開發(fā)者已經(jīng)等待了很長的時間。我希望在今年的晚些時間它能夠重啟開發(fā)。

7. dtrace4linux

dtrace4linux主要由一個人(Paul Fox)利用業(yè)務(wù)時間將 Sun DTrace 移植到 Linux 中的。它令人印象深刻,一些供應(yīng)器provider可以工作,還不是很完美,它最多應(yīng)該算是實(shí)驗(yàn)性的工具(不安全)。我認(rèn)為對于許可證的擔(dān)心,使人們對它保持謹(jǐn)慎:它可能永遠(yuǎn)也進(jìn)入不了 Linux 內(nèi)核,因?yàn)?Sun 是基于 CDDL 許可證發(fā)布的 DTrace;Paul 的方法是將它作為一個插件。我非常希望看到 Linux 上的 DTrace,并且希望這個項目能夠完成,我想我加入 Netflix 時將花一些時間來幫它完成。但是,我一直在使用內(nèi)置的跟蹤器 ftrace 和 perf_events。

8. OL DTrace

Oracle Linux DTrace是將 DTrace 移植到 Linux (尤其是 Oracle Linux)的重大努力。過去這些年的許多發(fā)布版本都一直穩(wěn)定的進(jìn)步,開發(fā)者甚至談到了改善 DTrace 測試套件,這顯示出這個項目很有前途。許多有用的功能已經(jīng)完成:系統(tǒng)調(diào)用、剖析、sdt、proc、sched、以及 USDT。我一直在等待著 fbt(函數(shù)邊界跟蹤,對內(nèi)核的動態(tài)跟蹤),它將成為 Linux 內(nèi)核上非常強(qiáng)大的功能。它最終能否成功取決于能否吸引足夠多的人去使用 Oracle Linux(并為支持付費(fèi))。另一個羈絆是它并非完全開源的:內(nèi)核組件是開源的,但用戶級代碼我沒有看到。

9. sysdig

sysdig是一個很新的跟蹤器,它可以使用類似tcpdump的語法來處理系統(tǒng)調(diào)用syscall事件,并用 lua 做后期處理。它也是令人印象深刻的,并且很高興能看到在系統(tǒng)跟蹤領(lǐng)域的創(chuàng)新。它的局限性是,它的系統(tǒng)調(diào)用只能是在當(dāng)時,并且,它轉(zhuǎn)儲所有事件到用戶級進(jìn)行后期處理。你可以使用系統(tǒng)調(diào)用來做許多事情,雖然我希望能看到它去支持跟蹤點(diǎn)、kprobes、以及 uprobes。我也希望看到它支持 eBPF 以查看內(nèi)核內(nèi)概覽。sysdig 的開發(fā)者現(xiàn)在正在增加對容器的支持??梢躁P(guān)注它的進(jìn)一步發(fā)展。

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

    關(guān)注

    68

    文章

    10696

    瀏覽量

    209319
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11123

    瀏覽量

    207888
  • 跟蹤器
    +關(guān)注

    關(guān)注

    0

    文章

    127

    瀏覽量

    19957

原文標(biāo)題:Linux 跟蹤器之選

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    #造物大賞 GPS跟蹤器(轉(zhuǎn)載油管)

    GPS定位跟蹤器
    睡不著
    發(fā)布于 :2022年05月31日 18:48:29

    秀秀我做的GPS跟蹤器

    `前陣子做了個GPS跟蹤器的項目,是基于STM32的,GSMGPRS模塊用的是移為的M20(兼容MC55i及EM310),GPS模塊用的也是他家的L10。可以做為車載跟蹤器、防盜,還可以作為短信控制
    發(fā)表于 04-10 22:00

    最小的跟蹤器有多大?

    最小的跟蹤器有多大?
    發(fā)表于 09-05 22:44

    Linux入門很簡單

    Linux入門很簡單,,
    發(fā)表于 12-29 16:48

    Linux入門很簡單

    Linux入門很簡單
    發(fā)表于 01-24 14:55

    FBI秘密跟蹤器是什么

    【拆解】FBI秘密跟蹤器
    發(fā)表于 04-23 10:59

    基于雙DSP的電視跟蹤器

    基于雙DSP的電視跟蹤器
    發(fā)表于 05-08 17:22 ?13次下載

    基于ATmega8的雙軸太陽跟蹤器設(shè)計

    為提高太陽能的利用率,以ATmega8單片機(jī)為控制核心,設(shè)計一套光電跟蹤與視日運(yùn)動軌跡跟蹤互補(bǔ)控制的雙軸太陽跟蹤器。該跟蹤器在晴天時,利用
    發(fā)表于 01-04 16:00 ?104次下載

    峰值跟蹤器電路圖

    峰值跟蹤器電路圖
    發(fā)表于 07-02 11:38 ?963次閱讀
    峰值<b class='flag-5'>跟蹤器</b>電路圖

    使用Arduino的光跟蹤器

    電子發(fā)燒友網(wǎng)站提供《使用Arduino的光跟蹤器.zip》資料免費(fèi)下載
    發(fā)表于 11-01 11:56 ?4次下載
    使用Arduino的光<b class='flag-5'>跟蹤器</b>

    使用Raspberry Pi的溫度跟蹤器

    電子發(fā)燒友網(wǎng)站提供《使用Raspberry Pi的溫度跟蹤器.zip》資料免費(fèi)下載
    發(fā)表于 11-11 14:38 ?0次下載
    使用Raspberry Pi的溫度<b class='flag-5'>跟蹤器</b>

    簡單的單軸太陽能跟蹤器

    電子發(fā)燒友網(wǎng)站提供《簡單的單軸太陽能跟蹤器.zip》資料免費(fèi)下載
    發(fā)表于 11-15 14:49 ?2次下載
    <b class='flag-5'>簡單</b>的單軸太陽能<b class='flag-5'>跟蹤器</b>

    移動水位跟蹤器開源分享

    電子發(fā)燒友網(wǎng)站提供《移動水位跟蹤器開源分享.zip》資料免費(fèi)下載
    發(fā)表于 11-21 10:52 ?0次下載
    移動水位<b class='flag-5'>跟蹤器</b>開源分享

    什么是電壓跟蹤器?

    什么是電壓跟蹤器?
    的頭像 發(fā)表于 12-07 16:10 ?728次閱讀
    什么是電壓<b class='flag-5'>跟蹤器</b>?

    光學(xué)跟蹤器信號源手機(jī)怎么設(shè)置

    手機(jī)設(shè)置的基本步驟: 確保您的手機(jī)支持光學(xué)跟蹤器功能。許多現(xiàn)代智能手機(jī)都配備光學(xué)跟蹤器硬件,但并非所有手機(jī)都支持此功能。 下載并安裝光學(xué)跟蹤器應(yīng)用程序。有許多應(yīng)用程序可供
    的頭像 發(fā)表于 08-29 18:03 ?415次閱讀