日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LTTng 简介使用实战

發布時間:2023/12/10 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LTTng 简介使用实战 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、LTTng簡介

? ? ??LTTng: (Linux Trace Toolkit Next Generation),它是用于跟蹤 Linux 內核、應用程序以及庫的系統軟件包。LTTng 主要由內核模塊和動態鏈接庫(用于應用程序和動態鏈接庫的跟蹤)組成。它由一個會話守護進程控制,該守護進程接受來自命令行接口的命令。babeltrace 項目允許將追蹤信息翻譯成用戶可讀的日志,并提供一個讀追蹤庫,即 libbabletrace。


? ? ? ? LTTng 不僅使用了 Linux 內核中的追蹤點(tracepoint)手段,而且可以使用其他各種信息來源,比如kprobes 和 Perf(Linux 中的性能監檢測工具)。這對于調試大范圍內的bug 是非常有用的,否則這種調試工作將極具挑戰性。比如,包括并行系統和實時系統中的性能問題。另外,用戶自己定制的工具也可以加入到其中。LTTng 的設計目標是將性能影響最小化,而且在沒有跟蹤的情況下,對系統的影響應該幾乎為零。


? ? ? ? LTTng如今已支持多個發行版(Ubuntu/Dibian、Fedora、OpenSUSE、Arch etc.)和多種架構(x86 and x86-64 、ARM 、PowerPC, Sparc, Mips etc.),此外官方還說支持Android和FreeBSD系統。

更多相關知識參見: 《使用LTTng鏈接內核和用戶空間應用程序追蹤

?

二、LTTng使用實戰 -- 安裝

2.0 LTTng需要的內核配置(通過讀取LTTng-module文檔中的README了解)


必選配置:?

CONFIG_MODULES?? 內核模塊支持
CONFIG_KALLSYMS ??查看wrapper/ 文件。?
CONFIG_HIGH_RES_TIMERS ?高精度時鐘,LTTng2.0的時鐘源?
CONFIG_TRACEPOINTS ?內核追蹤點


可選配置(下面的內核配置會影響LTTng的特性):

CONFIG_HAVE_SYSCALL_TRACEPOINTS: ?
? ? ? ? ? ? 系統調用追蹤:
? ? ? ? ? ? ? ?lttng enable-event -k --syscall
? ? ? ? ? ? ? ?lttng enable-event -k -a
CONFIG_PERF_EVENTS:?? ? ? ? ? ? lttng add-context -t perf:*
CONFIG_EVENT_TRACING:
? ? ? ? ? ? 事件追蹤,塊層的追蹤
CONFIG_KPROBES? ? ? ? ? ? ? ??? ? ? lttng enable-event -k --probe ...
CONFIG_KRETPROBES?? ? ? ? ? ? ? lttng enable-event -k --function ...


2.1 ?Ubuntu ?:

從Ubuntu 12.04開始,LTTng的包可以直接從包管理器的倉庫里找到,所以安裝變得非常簡單:
? ? ? ? ? ? ? ? ?sudo apt-get install lttng-tools
對于其他版本,需要添加PPA才能使用包管理器安裝(https://launchpad.net/~lttng/+archive/ppa):
? ? ? ? ? ? ? ? $ sudo apt-add-repository ppa:lttng/ppa
? ? ? ? ? ? ? ? $ sudo apt-get update
? ? ? ? ? ? ? ? $ sudo apt-get install lttng-tools lttng-modules-dkms babeltrace


2.2?Fedora:

從 Fedora 17開始, UST 和工具包也可以使用yum直接安裝:
? ? ? ? ? ? ? ? $ sudo yum install lttng-tools
但是你需要手動的編譯lttng模塊。(從官網下載一個lttng-modules-***.tar.bz2)
#?tar xvf lttng-modules-2.3.2.tar.bz2? # cd?lttng-modules-2.3.2 # vim README --- > 通過讀README學習如何安裝 # make
# make modules_install
# depmod -a

2.3 OpenSUSE(或者其他的使用rpm包的Linux發行版)的RPM包:

https://build.opensuse.org/project/show?project=devel%3Atools%3Alttng


2.4 Arch Linux:

https://aur.archlinux.org/packages.php?O=0&K=lttng&do_Search=Go

?

三、LTTng使用實戰 -- 內核追蹤

?

首先我們得確認你是否已經安裝了lttng-modules 和lttng-tools。

?

3.1 ?內核追蹤

列出所有的可追蹤內核事件:
# lttng list -k
Kernel events:
-------------
? ? ?timer_init (loglevel: TRACE_EMERG (0)) (type: tracepoint)
? ? ?timer_start (loglevel: TRACE_EMERG (0)) (type: tracepoint)
? ? ?timer_expire_entry (loglevel: TRACE_EMERG (0)) (type: tracepoint)
?……


3.2?創建一個追蹤會話(session),這個命令會創建一個目錄用以存放追蹤結果:

?

? ? ? ? ? ? ? ? ?# lttng create mysession
? ? ? ? ? ? ? ? Session mysession created.
? ? ? ? ? ? ? ? Traces will be written in /home/dslab/lttng-traces/mysession-20131010-145153

假如你當前已經有了很多的會話,我們可以設置當前追蹤會話:

# lttng set-session myothersession
Session set to myothersession

3.3 創建追蹤規則(探測點/系統調用 etc.)

1) 追蹤內核所有的探測點和所有的系統調用事件(-k/--kernel)
# lttng enable-event -a -k

2)?
追蹤探測點事件,這里我們追蹤 sched_switch和sched_wakeup為例?(-k/--kernel) 。

?

# lttng enable-event sched_switch,sched_wakeup -k
或者追蹤所有的探測點事件:
# lttng enable-event -a -k --tracepoint

3) 追蹤所有的系統調用:
# lttng enable-event -a -k --syscall


4) 使用 kprobes 以及 (或) 其他追蹤器作為lttng的源:
這是一個LTTng2.0內核追蹤器的一個新特性,你可以使用一個動態probe作為源,probe的追蹤結果會顯示在lttng的追蹤結果中

# lttng enable-event aname -k --probe symbol+0x0
or
# lttng enable-event aname -k --probe 0xffff7260695
可以為probe制定一個準確的地址0xffff7260695或者?symbol+offset。

你也可以使用功能追蹤(使用的Ftrace API),追蹤結果也會顯示在lttng的追蹤結果中:

# lttng enable-event aname -k --function <symbol_name>


5) 打開一個事件的上下文信息:
這也是一個新特性,可以讓你添加一個事件的上下文信息。比如說你可以添加PID:

# lttng add-context -k -e sched_switch -t pid
你也可以使用多個上下文信息:
#?lttng add-context -k -e sched_switch -t pid -t nice -t tid

你可以使用' lttng add-context --help?' 學習所有的上下文格式的用法。

6) 打開事件的Perf計數器:?
這也是一個新的很強大的特性,為每個追蹤的事件添加Perf計數器數據(使用Perf的API)。下面實例為為每個事件添加CPU周期:
# lttng add-context -k -e sched_switch -t perf:cpu-cycles

注: 你需要使用?add-context 的help學習所有的perf計數器值的含義。

3.4 開始追蹤:

# lttng start

追蹤結果會寫到上面創建會話時創建的文件夾中。比如上面的 :/home/dslab/lttng-traces/mysession-20131010-145153

注意:這個命令會打開所有的追蹤,如果你想同時追蹤用戶空間和內核空間,你在使用這個之前需要設置好所有的追蹤規則。

3.5 停止追蹤:

# lttng stop

注:在這時候,你可一使用 lttng start 重新追蹤,也可以打開/關閉某個事件或者隔段時間再來追蹤。當然你也可以查看追蹤信息。

?


3.6 關閉追蹤(你的追蹤工作已經結束)

# lttng destroy?

?


四、LTTng使用實戰 -- 用戶空間追蹤

待以后添加。

?

五、LTTng使用實戰 -- 追蹤數據分析

5.1 分析工具 --?babeltrace

?

babeltrace是lttng tools中自帶的分析工具,很強大。我們可以直接使用babeltrace打開追蹤數據,比如上面提到的?/home/dslab/lttng-traces/mysession-20131010-145153。

我們先查看下這個追蹤結果下的結構:

# tree /home/dslab/lttng-traces/mysession-20131010-145153

?

/home/dslab/lttng-traces/mysession-20131010-145153

└── kernel

? ? ├── channel0_0
? ? ├── channel0_1
? ? ├── channel0_2
? ? ├── channel0_3
? ? └── metadata

可以看出來追蹤目錄下只有一個目錄,叫做kernel,所以……如果追蹤前也打開了用戶追蹤,那么這里面還會多個追蹤目錄(用戶空間的)。kernel目錄下分幾個文件保存追蹤數據。但是我們使用babeltrace查看追蹤結果時不能指定到具體的文件,需要指定到kernel。

# babeltrace?/home/dslab/lttng-traces/mysession-20131010-145153

[13:09:27.585271256] (+?.?????????) Raring-Ringtail sys_geteuid: { cpu_id = 2 }, { }
[13:09:27.585273674] (+0.000002418) Raring-Ringtail exit_syscall: { cpu_id = 2 }, { ret = 0 }
[13:09:27.585275886] (+0.000002212) Raring-Ringtail sys_pipe: { cpu_id = 2 }, { fildes = 0xB6588B84 }
[13:09:27.585283170] (+0.000007284) Raring-Ringtail exit_syscall: { cpu_id = 2 }, { ret = 0 }
……

如果我們將babeltrace的輸出信息輸出到一個文件中,比如# babeltrace?/home/dslab/lttng-traces/mysession-20131010-145153 > /tmp/trace 。我們就可以使用shell腳本獲取/tmp/trace中的追蹤數據并進一步分析。


?



轉載于:https://www.cnblogs.com/suncoolcat/p/3366045.html

總結

以上是生活随笔為你收集整理的LTTng 简介使用实战的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。