發表文章

目前顯示的是 3月, 2010的文章

GNU Autotools 初探 & share library 的蠢事

圖片
說GNU Autotools 可能很多人不清楚那是什麼?但是編譯提到編譯套件三部曲"./configure ; make ; make install",就很清楚了,這就是Autotools的功勞,它大大簡化了編譯程式的移植跟相容性問題,只要三個步驟就可以把軟體裝到你的Linux上,*nix系統特點就是家族衍生繁雜,因此也凸顯出Autotools之於GNU / Linux 的重要性。 前情提要說完了,再來一點心得感想,其實一直覺得編譯套件三部曲"./configure ; make ; make install"很神奇,想知道後面的動作,如何能精確的檢查編譯需要的函式庫跟相依性,再進一步就是如何把自己的軟體改成一樣的形式,讓它們可以在各系統暢行無阻,這次因為buildroot強烈要求外掛軟體要遵循Autotools的規範,就開始這次的研究。 廢話交代完畢,進入實做細節,首先是整個Autotools的流程圖:(取自 http://en.wikipedia.org/wiki/GNU_build_syste m) 圖中的橢圓形指的是處理的程式,長方形就是相關的資料檔。 Step by Step教學可以在這裡找到; http://markuskimius.wikidot.com/programming:tut:autotools/ 按著步驟一步一步大概就知道要怎麼進行了,基本上要準備的就是configure.ac跟Makefile.am,前者可以由autoscan產生,後者就要自己寫了,但是configure.ac不是拿到就可以用的,autoscan產生的檔名是configure.scan,要自己手動更名為configure.ac,再來要小小修改一下內容,才能繼續後面的步驟,必須要加入的兩行是: AM_INIT_AUTOMAKE(httpfs2, 1.0) AM_PROG_CC_C_O 另外,一個完整的GNU套件需要有一些相關的文件,就是我們拿到套件會包含在內的NEWS、README、AUTHORS、ChangeLog等,上述四個檔案需要自己準備,可以用touch創造空檔案騙過檢查即可,其他的可以透過"automake --add-missing"自動補齊 再來談到Makefi

Linux 2.6 Network Performance Tunning Note

前情提要: 某PC-Based 4 Port Gigabit Router被客戶用SmartBit 測出效能低落的問題,PM請我複製問題,於是開始這次的艱困的實驗。 問題描述: 在Linux 2.4可以做出不錯得成績,但是換到Ubuntu 9.04客戶的標準測試系統時,效能只有Linux 2.4的一半,後來在其他Fedora跟Debian重測,效能一樣不好,所以首要目標就是要把Linux 2.6的Network Performance調校到最佳,至少要跟Linux 2.4一樣。 系統環境: Atom N270 + 82574L x 4 過程: Google->Make changes->SmartBit Test->Fail->Goto First.... 結論: 1 測試結果數字上上下下不穩定:請把cpufreq的模式設定成Performance,固定核心頻率 >>列出可用模式:cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors >>強迫跑效能模式:echo "performance" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors 2 Intel Driver可以Tune的參數很多,其中最重要的就是IntMode,預設是2,範圍0-2都可以換換看,有沒有不一樣,以我的例子,預設值只能跑出50%(對比於Linux 2.4),改成1,可以跑出75% 3 手動分配IRQ到不同的CPU,總算讓我搾出最後的25%,得到跟Linux 2.4一樣的好成績,方法如下 >>列出所有IRQ:cat /proc/interrupts >>修改APIC對應:echo 2 > /proc/irq/29/smp_affinity (把IRQ 29 Mapping到CPU 1) 4 網路上很多修改TCP buffer memory的文章,不過在此例沒有顯著的效果,因為Bottleneck在CPU處理IRQ的能力 5 以上方法其實都是事後補救,理論上應該是用預設值就應該是sett

Ubuntu 升級 2.6.33 Kernel 筆記

網路高手整理的作法: How To Compile A Kernel - The Ubuntu Wa y 不過照步驟做時,發現一個問題,錯誤的訊息如下: echo "The UTS Release version in include/linux/version.h"; echo " \"\" "; echo "does not match current version:"; echo " \"2.6.33-rc1-amd64\" "; echo "Please correct this."; exit 2 The UTS Release version in include/linux/version.h "" does not match current version: "2.6.33-rc1-amd64" 原因是UTS_RELEASE在2.6.32之後被換地方放了,修正方法如下: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=561569 修改debian/ruleset/misc/version_vaer.mk檔案, 把 echo include/linux/version.h; 換成 echo include/generated/utsrelease.h; 即可 編譯完成之後就可以直接用dpkg安裝,重新開機就OKAY了