瀏覽模式: 普通 | 列表
04
29

NAPI與pure interrupt driver的效能比較

下星期就要出差去美國了,擔心的反而不是豬流感,而是未來一星期的IOT會不會出問題,雖然測試好幾遍了,但工作那麼多年,根據經驗,只要是正式的測試場合,平常不會出trouble的地方全部都會在那時出現,不過這種東西是危機也是轉機,看個人造化

NAPI的相關資料可查尋此網站,它推出的目的就是為了在interrupt和polling之間取得一個效能平衡,interrupt的缺點就是當封包數目多且中斷頻繁發生時,可能會有upper layer skb queue starvation的情況,嚴重者會造成其它的driver無法取得中斷資源,而polling會耗費大量的cpu time,為了終結以上兩個情況,在2.6的kernel已經把NAPI的相關函式提供給driver programmer,NAPI會在中斷時提供一polling函式把drvier queue裡面的skb一口氣讀出(假設weight為64,就是一次讀取64個skb),這樣不但減輕interrupt對系統造成的負擔,也間接解決drvier資源相競的問題

[閱讀全文]

標籤: linux
04
21

usermode helper-來自kernel的呼喚

博客來最近都在促銷Orielly的書,只要買足3本,就可享75折的優惠,所以我這次一口氣買了三本雖然之前看過但很想收藏的書,自從出社會後,幾乎每個月都會買個幾本技術相關的書籍典藏,雖然網路上都抓得到,但總覺的缺了一份質感,沒有翻書的感覺,就好像沒在看書

這次要介紹東西很簡單,但這種技巧很常見,不論是hotplug會是kernel init,都會發現這個函式的蹤影,當安裝plug&play裝置時,kernel會呼叫hotplug執行device setup script,而從kernel呼叫user space的API,就是user modehelper,簡單的程式我列如下

程式的重點在於envp和argv的設定,envp是環境設定的變數,而argv是user application的執行參數

[閱讀全文]

標籤: linux
04
09

rpcapd與netcat-測試嵌入式系統的好工具

最近在改一個SPI driver,發現硬體的通訊界面好像都差不多,不是direct就是indirect, command與data也是一來一回,不同的硬體通訊界面只有速度快慢的問題,感覺SPI似乎比IIC要快很多

[閱讀全文]

標籤: embedded
03
31

kernel module memory detector-抓出有害的kernel module

之前的文章有提到想用kallsyms_lookup做出kernel module memory detector,剛好今天有空抽點時間做出來,不過在實做的過程中發現,要改動的地方還真多阿,在hack的過程中,絕大部份都是苦工,剪剪貼貼一大堆,不過講到這邊,我突然想到我去年有一次寫程式寫到睡著,因為從頭到尾都剪貼,又一堆fopen, fread,fclose,說老實話,這種程式寫久了會頭暈想吐…

[閱讀全文]

標籤: linux
03
26

kernel space coding-如履薄冰

有碰過kernel code的人大概多少都瞭解我標題的意思,kernel code很迷人,但很危險,稍不小心,就會被kernel panic拖進地獄

拿我最近review的code當例子,截取某一段code如下,這是一段相當簡單的kernel threading code,當kernel module被insert時,會開啟kernel thread執行thread_main這個function,當remove module時,會呼叫delete_thread把kernel thread砍掉,可以仔細看看thread_kill這段function,有沒有什麼問題

[閱讀全文]

標籤: linux
03
06

readahead與posix_advise-預讀取是萬能靈丹?

最近在改善程式讀檔的效能,發現這兩個函式可以好好利用,因為我都用buffered IO的API讀取資料,所以想藉由標題那兩位人兄幫我加速存取檔案的動作,根據Linux system programming和kernel的mm/readahead.c原始碼,都證明kernel會根據readahead API把目標檔擺到memory cache加速程式讀取目標檔的速度,而實際上真的這樣嗎?

[閱讀全文]

標籤: linux
02
19

Who call me – kernel版

很感謝jserv兄的who call me,讓我學到不少東西,而在Linux 2.6 kernel,也有相似的技巧可用,搭配__builtin_return_address和kallsyms_lookup,我們可以做出一個簡單的kernel module who call me

查看kallsyms.c這個程式,會發現其實已經有不少現成的kernel API封裝好給你用了,我這邊範例用的就是sprint_symbol這個函式,簡單的範例如下所示

[閱讀全文]

標籤: linux
02
11

SIPp-惡搞SIP的工具

前一陣子被交待要做SIP stack的測試,跟同事討論後又學到一個好東西,SIPp,它是一個很直覺化的工具,只要寫出你要測試的SIP流程,就可以用各種不同的SIP method測試SIP stack.

SIPp強大的地方在於可以自己編寫SIP method script,舉例如下,一個簡單的向SIP server (192.168.15.3)register的script,而register的username和password分別為444

[閱讀全文]

標籤: linux