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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux内核tcp时间测量,linux内核 – 测试linux内核中函数的执行时间

發(fā)布時間:2023/12/15 linux 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux内核tcp时间测量,linux内核 – 测试linux内核中函数的执行时间 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我使用Linux安全模塊掛鉤來添加一些自定義功能到recv()系統(tǒng)調(diào)用。與原始的recv()相比,我想測量這個功能的開銷。我寫了一個簡單的tcp服務(wù)器,我運(yùn)行與沒有我的模塊。這個tcp服務(wù)器調(diào)用recv()函數(shù)’N’次。它可以測量每個recv的時間,例如:

clock_gettime(before);

recv()

clock_gettime(after);

global_time += after - before.

最后,我用“global_time / N”打印單個recv()的平均時間。讓我們把這個時間稱為“user_space_avg_recv”。

在我的模塊內(nèi),我想放置時間測量功能來計(jì)算我的鉤子的確切執(zhí)行時間。我嘗試了3種方法。

>我用jiffies如下:

sj = jiffies

my_hook();

ej = jiffies;

current-> total_oh = ej – sj;

但是我看到sj和ej值之間沒有差別。因此total_oh不變。

>我使用current_kernel_time(),因?yàn)槲乙詾樗约{秒為單位返回時間。但是,再一次,前后沒有差別。

我用了get_cycles。當(dāng)過程退出時,我打印總循環(huán)。然而,當(dāng)我將總周期值轉(zhuǎn)換為毫秒時,它的出現(xiàn)遠(yuǎn)遠(yuǎn)大于

“user_space_avg_recv”值。內(nèi)核中的測量值總是小于從用戶空間測量的時間值,這是沒有意義的。這可能意味著我不是使用正確的API進(jìn)行測量,或者我將值從周期轉(zhuǎn)換為毫秒時出錯。

我基本上使用以下公式將周期轉(zhuǎn)換為毫秒:

avg overhead of my hook in milliseconds =

(((cycles / 2.99) / 10^6) / N)

因?yàn)槲业臅r鐘頻率是2.99Ghz

幾點(diǎn):

>我的用戶空間程序使用set affinity綁定到單個核心。

我正在使用內(nèi)核2.6.22.14

>要阻止內(nèi)核在我的鉤子內(nèi)切換上下文,我使用preempt_disable()和preempt_enable()。因此,它不會計(jì)算其他內(nèi)核線程的執(zhí)行時間。即使這樣,由于我的鉤子使用一些I / O,我的線程可能會自動釋放控制,或者可能會發(fā)生一些可能會增加總循環(huán)次數(shù)的中斷。

題:

如何在內(nèi)核中精確地測量功能執(zhí)行時間?

總結(jié)

以上是生活随笔為你收集整理的Linux内核tcp时间测量,linux内核 – 测试linux内核中函数的执行时间的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。