国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網 會員登陸 & 注冊

(一篇解決~)利用可掛載內核模塊進行高負載處理

2022-11-04 17:00 作者:補給站Linux內核  | 我要投稿

概述

本程序在高負載處理模塊的代碼基礎上,根據(jù)5.15版內核的變化,修改出的。本程序是一個內核模塊,用于監(jiān)控系統(tǒng)負載,在平均負載超過4時,打印所有進程的調用棧。

本程序分為三個文件:main.c、load.h、Makefile。其中,main.c是本內核模塊的主程序;load.h中是該內核模塊的擴展代碼,這里放了一個獲取內核中未被導出符號(變量或函數(shù))的一個函數(shù);Makefile用來編譯該內核模塊。完整代碼在文章的最下面。

模塊的主要實現(xiàn)方式為:設置一個定時器,以固定的間隔訪問系統(tǒng)給出的1分鐘內平均負載,如果超過負載閾值,則輸出運行隊列全部進程棧信息,并使程序休眠一段較長的時間。流程圖如下:


定時器

本模塊采用了hrtimer——高精度定時器,由linux/hrtimer.h引入,可精確到ns級。

平均負載

這里有所改動,原文中是通過kallsyms_lookup_name函數(shù)獲取的,但我在瀏覽頭文件時發(fā)現(xiàn)了linux/sched/loadavg.h頭文件,里面已經定義好了一些有關平均負載——loadavg的宏,并導出了avenrun——平均負載數(shù)組——1、5、15分鐘內的平均負載,所以我這里直接引用了該頭文件、直接使用了相關符號

輸出進程棧

這里改動很大,在5.15版中,沒有了save_stack_trace_tsk,通過查看linux/stacktrace.h文件,發(fā)現(xiàn)這個函數(shù)被用于未配置CONFIG_ARCH_STACKWALK的系統(tǒng),而配置了CONFIG_ARCH_STACKWALK的系統(tǒng)中,有新的函數(shù):unsigned int stack_trace_save_tsk(struct task_struct *task, unsigned long *store, unsigned int size, unsigned int skipnr),定義于kernel/stacktrace.c中,與舊函數(shù)相比變化很大,好在在源代碼中有詳細的接口說明,根據(jù)這我成功的修改了棧的輸出部分。

與此同時我發(fā)現(xiàn)了功能類似的另一個函數(shù)show_stack,定義于arch/x86/kernel/dumpstack.c

然而,這兩個函數(shù)的符號都沒有導出,也就無法通過引入相關頭文件來使用,原文章來獲取內核中未導出符號的kallsyms_lookup_name函數(shù)也未被導出,這就要求我尋找一種新的方法來獲取未導出符號,我找到了kprobe技術。

kprobes技術^[3]^是內核開發(fā)者們專門為了便于跟蹤內核函數(shù)執(zhí)行狀態(tài)所設計的一種輕量級內核調試技術。利用kprobes技術,內核開發(fā)人員可以在內核的絕大多數(shù)指定函數(shù)中動態(tài)的插入探測點來收集所需的調試狀態(tài)信息而基本不影響內核原有的執(zhí)行流程。我們可以通過注冊一個指定了函數(shù)名的kprobe來獲取函數(shù)的地址。


【文章福利】小編推薦自己的Linux內核技術交流群:【891587639】整理了一些個人覺得比較好的學習書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。。。ê曨l教程、電子書、實戰(zhàn)項目及代碼)? ??


main.c

load.h

Makefile

運行結果

將三個文件放入一個單獨的文件夾中,運行make命令,編譯出可插入內核的程序。編譯好后,運行sudo insmod load_monitor.ko命令將其插入內核。

接下來是測試,運行stress -c 8命令(stress需要另外安裝),使平均負載快速到達4以上,這里可以在新的虛擬終端通過top命令實時觀測負載。當負載到達4之后,在運行著stress命令的窗口中按下ctrl+c終止程序,運行sudo dmesg命令就可以查看到內核棧的輸出信息。




(一篇解決~)利用可掛載內核模塊進行高負載處理的評論 (共 條)

分享到微博請遵守國家法律
广东省| 县级市| 武宁县| 卢龙县| 阿拉善右旗| 连州市| 凤山县| 苗栗县| 南城县| 淄博市| 霍山县| 平定县| 河津市| 和平区| 石河子市| 平利县| 内江市| 沅陵县| 莱阳市| 凌海市| 乐清市| 金平| 米泉市| 永兴县| 余江县| 大连市| 麟游县| 连城县| 社会| 平南县| 慈溪市| 恩施市| 义马市| 车险| 云安县| 冀州市| 保康县| 年辖:市辖区| 渝北区| 江阴市| 峡江县|