瀏覽模式: 普通 | 列表
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
03

seq_file-讀取proc資料的新選擇

古早以前kernel對於proc資料的讀取都由read_proc這個callback函式處理,那它的prototype如下

  1. static int read_proc(char *page, char **start, off_t off, int count, int *eof,void *data)

kernel module傳給使用者的資料最終要印在page這個大小為4096bytes的空間裡,所以kernel moduel在處理使用者要讀取資料時要特別注意這個boundry,不過現在因為seq_file的出現,情勢會隨之改觀

[閱讀全文]

標籤: linux
02
02

udev-強大的device node管理系統

過年前跑去書店打發無聊的時間,看到這個月又出了兩本跟linux device driver相關的書籍,隨手拿起來翻翻,發現其中有一篇寫到udev framework,裡面詳盡解釋device node在insert kernel module時如何自動建立,並且可隨著使用者更改規則而產生persistent node…等不同於devfs的變化

[閱讀全文]

標籤: embedded linux
01
23

libevent-很好用,是真的

softpapa建議使用的libevent真的很好用,callback明確簡單,程式寫起來不複雜,libevent我看到國內已經有人幫它寫了三篇教學文章,都相當不錯,我想以後碰到socket programming乾脆就用這套打死算了

小弟簡單用libevent比照此網誌寫了簡單的web server,並做apache benchmark,真機車,libevent效能夠可怕,數據如下

[閱讀全文]

標籤: linux
01
22

NETLINK-與kernel溝通的另一種方法

新年快到了,先祝大家新年快樂,牛年發大財,快到了年關,也該好好輕鬆一下,回頭看看自己這一年是不是做了些足以令你自傲的豐功偉業,也希望我能繼續保持對coding的熱誠在新的一年繼續奮鬥

話說回來,有了ioctl,和proc,我們是不是還有其它可以與kernel交換資料的界面呢?沒錯,就是netlink,那什麼時候會用到netlink呢?當你設routing table或防火牆時就會用到了,kernel就是用netlink界面與route指令溝通,scsi驅動也可以看到netlink的影子,netlink有什麼好處呢?

[閱讀全文]

標籤: linux
01
21

epoll,select,poll-無責任效能評測

有天在看Linux系統程式設計時,翻到其中一頁關於linux2.6引進的epoll事件輪詢界面,在好奇心的驅使下,就想動手寫程式跑跑看epoll,select和poll到底那個效能比較好

而我測試的方法是利用這三個API寫一個小的web server,再用Apache Benchmark測試,並以測試的結果比較這三個效能的優劣,我下的apache benchmark指令為” ab -c 50 -n 500 http://192.168.15.25:5050/” ,結果請見如下

[閱讀全文]

標籤: linux
01
14

寫程式,花10分鐘,證明自己的觀念是錯的,無價

[2009.11.2]嚴重錯誤,kernel會自動poll driver是否有data給使用者,所以poll_wait函式會一直被呼叫,所以char driver只需註冊poll,open,release即可達到user space select的所有功能

前幾天跟同事討論到RTCP的事情時,突然腦中閃過一個想法,記得4年前有寫過一個小程式,可以定時把kernel的statics丟到user space, user space的program只用了select和read函式把資料讀出來並顯示在UI上,那時我以為poll_wait函式可以hang住user space process讓user space的程式可以等待kernel有資料時再讀出來,不過今天寫了一小段code發現自己觀念是錯的

[閱讀全文]

標籤: linux