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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux内核tracepoints

發布時間:2024/1/17 linux 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux内核tracepoints 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

具體的可以參考kernel的文章,路徑如下:Documentation/trace里面的tracepoints.txt和tracepoint-analysis.txt。

這里簡要說明一下,舉一個小例子,怎么樣使用!

內核中的每個tracepoint提供一個鉤子來調用probe函數。一個tracepoint可以打開或關閉。打開時,probe函數關聯到tracepoint;關閉時,probe函數不關聯到tracepoint。tracepoint關閉時對kernel產生的影響很小,只是增加了極少的時間開銷(一個分支條件判斷),極小的空間開銷(一條函數調用語句和幾個數據結構)。當一個tracepoint打開時,用戶提供的probe函數在每次這個tracepoint執行是都會被調用。

如果用戶準備為kernel加入新的tracepoint,每個tracepoint必須以下列格式聲明:

#include <linux/tracepoint.h>DECLARE_TRACE(tracepoint_name,TPPROTO(trace_function_prototype),TPARGS(trace_function_args));

上面的宏定義了一個新的tracepoint叫tracepoint_name。與這個tracepoint關聯的probe函數必須與TPPROTO宏定義的函數prototype一致,probe函數的參數列表必須與TPARGS宏定義的一致。

或許用一個例子來解釋會比較容易理解。Kernel里面已經包含了一些tracepoints,其中一個叫做sched_wakeup,這個tracepoint在每次scheduler喚醒一個進程時都會被調用。它是這樣定義的:

DECLARE_TRACE(sched_wakeup,TPPROTO(struct rq *rq, struct task_struct *p),TPARGS(rq, p))

實際在kernel中插入這個tracepoint點的是一行如下代碼:

trace_sched_wakeup(rq, p);

注意,插入tracepoint的函數名就是將trace_前綴添加到tracepoint_name的前面。除非有一個實際的probe函數關聯到這個tracepoint,trace_sched_wakeup()這個只是一個空函數。下面的操作就是將一個probe函數關聯到一個tracepoint:

void my_sched_wakeup_tracer(struct rq *rq, struct task_struct *p);register_trace_sched_wakeup(my_sched_wakeup_tracer);

register_trace_sched_wakeup()函數實際上是DEFINE_TRACE()定義的,它把probe函數my_sched_wakeup_tracer()和tracepoint sched_wakeup關聯起來。

這樣就可以使用這個鉤子函數給我們做很多事情了!

轉載于:https://www.cnblogs.com/muahao/p/7999281.html

總結

以上是生活随笔為你收集整理的Linux内核tracepoints的全部內容,希望文章能夠幫你解決所遇到的問題。

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