2009年10月29日 星期四
module-init-tools
module-init-tools是我拿ubuntu的package名稱來當標題,這邊是要來介紹tools for managing Linux kernel modules管理Linux kernel module的工具。
這裡面主要的工具有
標籤:
tools - admin
2009年10月28日 星期三
Universally Unique Identifier, UUID
UUID是一組16進制組成的128bit的ID,如果每秒產生1兆個UUID,要花100億年才會將所有UUID用完。所以,重複的機率非常低。UUID 的目的,是讓分散式系統中的所有元素,都能有唯一的辨識資訊,而不需要透過中央控制端來做辨識資訊的指定。UUID被廣泛的使用,而這邊要介紹在linux的hard disk上。
由於可能因為hard disk的順序變了,原本設定的/dev/sda1開機,現在變成了/dev/sdb1,需要更改boot的menu,如果我們對每個partition都給一個UUID,那麼即便hard disk順序變了,UUID不變的情況下,boot的menu就不需要做任何改變了。在fstab也是相同的道理。
可以利用tune2fs或blkid取得UUID。
標籤:
Ubuntu - Admin
2009年10月21日 星期三
ubuntu 9.04(jaunty)升級至9.10(karmic)
cachefilesd
由debian的說明,來看
FSCache is a generic caching manager in the Linux kernel which can be used by network and other filesystems to cache data locally. FSCache是linux kernel中一個通用的cache管理者,用於管理網路和其他檔案系統的cache。 CacheFiles is an FSCache backend that's meant to use as a cache a directory on an already mounted filesystem of a local type (such as Ext3). This package installs the userspace support required by the cachefiles backend.在ubuntu中即便安裝了cachefilesd,nfs還是無法使用cache機制,所以要重先編譯一下kernel module。將CONFIG_NFS_FSCACHE=y才能讓nfs支援cachefilesd。
而cache所在的partition必須是ext3或ext4並支援user_xattr屬性:
tune2fs -o user_xattr /dev/sdaX sudo mount /var/cache/fscache
接著將修改/etc/cachefilesd.conf(或者使用預設值)。
當要mount nfs時,必須-o fsc告訴kernel這個nfs要使用cache機制。
sudo mount -o fsc 10.0.100.11:/opt /opt
心得: 由於常用的是compile程式,大量的小檔讀寫,使用cache並沒有帶來好處。
標籤:
tools - admin
2009年10月19日 星期一
quota無法正常在ubuntu 9.04上的ext4運作
這是ubuntu 9.04上package的bug,下載9.10的套件裝就好啦,here。
brook@ubuntu1:~$ wget http://kr.archive.ubuntu.com/ubuntu/pool/main/q/quota/quota_3.17-3ubuntu1_i386.deb --2009-10-19 16:09:14-- http://kr.archive.ubuntu.com/ubuntu/pool/main/q/quota/quota_3.17-3ubuntu1_i386.deb Resolving kr.archive.ubuntu.com... 143.248.234.110 Connecting to kr.archive.ubuntu.com|143.248.234.110|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 473516 (462K) [application/x-debian-package] Saving to: `quota_3.17-3ubuntu1_i386.deb' 100%[======================================>] 473,516 490K/s in 0.9s 2009-10-19 16:09:17 (490 KB/s) - `quota_3.17-3ubuntu1_i386.deb' saved [473516/473516] brook@ubuntu1:~$ sudo dpkg --purge quota (Reading database ... 112680 files and directories currently installed.) Removing quota ... * Turning off quotas... [ OK ] * Stopping quota service rpc.rquotad [ OK ] Purging configuration files for quota ... Processing triggers for man-db ... brook@ubuntu1:~$ sudo apt-get autoremove Reading package lists... Done Building dependency tree Reading state information... Done 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. brook@ubuntu1:~$ sudo dpkg -i quota_3.17-3ubuntu1_i386.deb Selecting previously deselected package quota. (Reading database ... 112624 files and directories currently installed.) Unpacking quota (from quota_3.17-3ubuntu1_i386.deb) ... Setting up quota (3.17-3ubuntu1) ... * Checking quotas... [ OK ] * Turning on quotas... [ OK ] * Starting quota service rpc.rquotad [ OK ] Processing triggers for man-db ... brook@ubuntu1:~$ sudo mount -o remount /home [sudo] password for brook:
標籤:
tools - admin
2009年10月18日 星期日
32位元的compiler在32bit與64bit ubuntu下效能比較
繼之前的效能比較後(64bit與32bit應用程式在64位元ubuntu下之效能比較),我們面對比較實際的問題,因為開發用的compiler為32-bit之montavista,那麼到底是32位元的ubuntu效能好還是64位元的ubuntu好,所以我們決定直接將專案分別在32bit和64bit的ubuntu下compiler 10次,最後,發現在32bit底下有較好的效能。
圖為montavista 32bit compiler分別在32bit與64bit ubuntu下,compile專案所需的時間,以及所設定的make之job數比較圖,很明顯的,當job數越多,效能越好,而且32bit效能一直好過64bit。
JOBS | 64-bit(sec) | 32-bit(sec) |
default(4) | 479.567 | 451.847 |
6 | 426.922 | 400.545 |
8 | 400.724 | 370.174 |
10 | 393.842 | 363.798 |
12 | 391.594 | 361.957 |
這邊的結論不是想說32bit或是64bit的ubuntu哪個好,而是得到在我們的編譯環境下,32bit的ubuntu是比較適合我們的
2009年10月17日 星期六
64bit與32bit應用程式在64位元ubuntu下之效能比較
手邊最近剛好進來了一台i7搭配6G的PC,雖然裝了ubuntu 64bit-server的OS,但是我們的應用程式很多都還是32位元的,而且很好奇到底是64bit的application快,還是32bit的application快,於是我分別將unixbench編譯成32-bit和64-bit進行測試。
結果發現,即便是在64bit的OS下執行程式,32bit的效能不見得比64bit來的差,不是單純的將OS和硬體升級成64位元,電腦就會變快了,應用程式有沒有對64做最佳化也是非常重要的關鍵。
在讀寫方面,64位元小勝32位元。圖表為讀寫10sec所讀寫到的資料量,file system為ext3。
在一些演算法的運算下,各有小勝的項目。
在process的處理上,32bit勝出。
至於system call和pipe則64bit勝出。
檔案複製上,32bit勝出。(這點感覺還挺那悶的)
數值運算上,64bit小勝。
所有數據資料
64-bit | 32-bit | ||
Dhrystone 2 without register variables | 22989948.3 | 15872890.4 | lps |
Dhrystone 2 using register variables | 23031345.5 | 15525587.1 | lps |
Arithmetic Test (type = register) | 3795084.9 | 3800669.2 | lps |
Arithmetic Test (type = short) | 3792994 | 3475120.4 | lps |
Arithmetic Test (type = int) | 3798887.6 | 3795243.4 | lps |
Arithmetic Test (type = long) | 1361641.8 | 3797989.6 | lps |
Arithmetic Test (type = float) | 2999814.7 | 1755172.6 | lps |
Arithmetic Test (type = double) | 1908910.6 | 1755790.4 | lps |
System Call Overhead Test | 5310434.8 | 4194268.7 | lps |
Pipe Throughput Test | 2713396.7 | 2364773.8 | lps |
Pipe-based Context Switching Test | N/A | 421790.3 | |
Process Creation Test | 13766.1 | 14274.1 | lps |
Execl Throughput Test | 4028.2 | 4128.9 | lps |
File Read (10 seconds) | 8619286 | 7545589 | KBps |
File Write (10 seconds) | 1519095 | 1453324 | KBps |
File Copy (10 seconds) | 79768 | 91090 | KBps |
File Write (30 seconds) | 1515752 | N/A | KBps |
File Copy (30 seconds) | 89420 | N/A | KBps |
C Compiler Test | 1826.8 | 1863 | lpm |
Shell scripts (1 concurrent) | 8495.3 | 15928.3 | lpm |
Shell scripts (2 concurrent) | 6293.3 | 12343.3 | lpm |
Shell scripts (4 concurrent) | 4276.7 | 7584.6 | lpm |
Shell scripts (8 concurrent) | 2818 | 5387 | lpm |
Dc: sqrt(2) to 99 decimal places | 593737.4 | 625083.3 | lpm |
Recursion Test--Tower of Hanoi | 244750.3 | 168275.4 | lps |
Arithmetic Test (type = double) | 751 | 690.8 | |
Dhrystone 2 without register variables | 1027.9 | 709.7 | |
Execl Throughput Test | 244.1 | 250.2 | |
File Copy (30 seconds) | 499.6 | N/A | |
Pipe-based Context Switching Test | 0 | 319.9 | |
Shell scripts (8 concurrent) | 704.5 | 1346.8 |
http://www.tux.org/pub/tux/benchmarks/System/unixbench
2009年10月12日 星期一
KVM
KVM是Linux底下的Kernel-based Virtual Machine,而在用KVM前,要先知道CPU本身是否支援硬體VM,否則不能用KVM:
Intel CPU:
grep vmx /proc/cpuinfo
AMD CPU:
grep svm /proc/cpuinfo
如果沒有就不支援kvm啦,不過在執行的時候會被轉成qemu執行,並且出現以下錯誤:
open /dev/kvm: No such file or directory
Could not initialize KVM, will disable KVM support
接著載入kvm.ko,並且根據CPU是Intel還是AMD分別載入kvm-intel.ko或kvm-amd.ko。
相關的套件可以使用以下指令一次安裝:
sudo apt-get install kvm libvirt-bin ubuntu-vm-builder bridge-utils
接著使用kvm-img建立disk,或者直接使用硬碟的partition(/dev/sdaX)。
完整的指令如下:
/usr/bin/kvm -M pc -m 2000 -smp 8 -localtime -boot c -hda /var/lib/libvirt/images/linux.img -hdb /dev/sda2
接著就開始安裝您的guest OS嚕。
標籤:
tools - vm
2009年10月8日 星期四
AJAX - Asynchronous JavaScript And XML
AJAX算是一個不算是一個新的技術,利用非同步的方式,提供互動式的網頁,AJAX面對最大的問題就是各個Browser之間對Java Script的標準與設計不一,常常寫好的能在FireFox上執行,在IE卻不能執行,所以在設計AJAX的時候最好考慮一下相容性的問題。
簡單的來說,AJAX提供XMLHttpRequest送出request給Web Server,接著等待回應,並處理回應的資料。
XMLHttpRequest
由於Browser之間對Java Script的標準與設計不一,所以下面的寫法可以用於大多數的形況。// Provide the XMLHttpRequest class for IE 5.x-6.x:
// Other browsers (including IE 7.x-8.x) ignore this
// when XMLHttpRequest is predefined
if (typeof(XMLHttpRequest) == "undefined")
{
XMLHttpRequest = function() {
try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); }
catch(e) {}
try { return new ActiveXObject("Msxml2.XMLHTTP.4.0"); }
catch(e) {}
try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); }
catch(e) {}
try { return new ActiveXObject("Msxml2.XMLHTTP"); }
catch(e) {}
try { return new ActiveXObject("Microsoft.XMLHTTP"); }
catch(e) {}
throw new Error("This browser does not support XMLHttpRequest.");
};
}
xmlHttpRequest = new XMLHttpRequest();
有了XMLHttpRequest之後,我們就可以送出request並且處理資料xmlHttpRequest.onreadystatechange = function () { //處理來自Server的回應
if(xmlHttpRequest.readyState==4) {
alert(xmlHttpRequest.responseText); // Server回應的內容
// 如果回傳的是XML資料可以使用responseXML
}
}
xmlHttpRequest.open("GET","my.php", true);
// 設定送出的method(GET/POST), 以及對象(URL)
// 基於安全考量,你不能呼叫不同網域的網頁。如果網域不同時會出現「權限不足,拒絕存取」的錯誤。
// 第三個參數設定此request是否不同步進行,如果設定為TRUE,則即使伺服器尚未回傳資料,也會繼續執行其餘的程式。
xmlhttp.send(null); // 送出request
State | Description |
---|---|
0 | The request is not initialized |
1 | The request has been set up |
2 | The request has been sent |
3 | The request is in process |
4 | The request is complete |
標籤:
JavaScript
2009年10月6日 星期二
vmware server on Linux(ubuntu 9.04)
VMware Server現在也正式成為VMware的一個免費產品。所以記得前往官方網站下載註冊碼,VMware Server提供Linux和Windows兩個平台,下載後解壓縮,執行sudo ./vmware-install.pl,基本上一直按enter就會用default值安裝。 常遇到的問題就是出現找不到linux的header file(因為要編譯module): What is the location of the directory of C header files that match your running kernel? 解決方法就是安裝heade file嚕sudo apt-get install linux-headers-`uname -r`。移除時,執行sudo vmware-uninstall即可。 vmware server 2.0是以web方式呈現,https://server:8333,然後輸入之前設定時的admin account即可進入修改(必須是存在系統的帳號)。
標籤:
tools - vm
Virtual Box on Linux(ubuntu 9.04)
ubuntu 9.04的apt預設會以virtualbox-ose取代virtualbox-3.0,所以必須修改一下apt。 1. 編輯 /etc/apt/sources.list 加上下列內容。 deb http://download.virtualbox.org/virtualbox/debian jaunty non-free 2. 加入 Sun public key for apt-secure。 wget -q http://download.virtualbox.org/virtualbox/debian/sun_vbox.asc -O- | sudo apt-key add - 3. 更新 Source List。 sudo apt-get update 4. 安裝 VirtualBox 3.0。 sudo apt-get install virtualbox-3.0 5. 執行VirtualBox。
terms
host OS:實際在機器上執行的OS。 guest OS:在Virtual Machine上執行的OS。 Guest Additions:通常VM會提供一些套件,安裝在guest OS上,增加guest OS的效能與提供額外的功能。
標籤:
tools - vm
訂閱:
文章 (Atom)
熱門文章
-
轉自 http://www.wretch.cc/blog/redsonoma/14021073 基本概念: 1> tty(終端設備的統稱): tty一詞源於Teletypes,或者teletypewriters,原來指的是電傳打字機,是通過串行線用打印機鍵盤通過閱...
-
Work queue提供一個interface,讓使用者輕易的建立kernel thread並且將work綁在這個kernel thread上面,如下圖[1]所示。 由於work queue是建立一個kernel thread來執行,所以是在process context...
-
(V)將介紹file operations中的ioctl。ioctl的prototype為: int (*ioctl) (struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg); ...
-
這兩天電腦的word忽然都不能存檔,即便是另存新檔也不行,最後都只能放棄修改檔案,即便重新安裝過或者更新成2007也都不能存檔,最後就乖乖的google一下,原來是暫存的資料夾不存在,按照以下方式就可以解決了。 資料來源: word 2003不能存檔問題 編輯機碼的(reg...
-
System Call在HW和user space提供一層抽象層,主要目的有: 為user space提供硬體抽象層。比如,讀取檔案時,不用管檔案所在的媒體類型與檔案儲存類型。 System call能確保系統的安全與穩定。避免user space的無意或惡意的破壞。 ...
-
在kernel中建立thread可以使用kthread_create(),建立一個task,然後在調用wake_up_process(task)讓task真正的運行,如果要kill一個kthread可以使用kthread_stop()。 在kernel中,將kthread_cr...
-
Linux module練習手札I紀錄如何撰寫一個簡單的module,並且編輯它,以及load和unload一個module。 write a module #include <linux/init.h> #include <linux/module.h...
-
幾乎任何使用 TCP,UDP或UNIX-domain socket的動作都可以用nc來達成,常見的功能如。 simple TCP proxies shell-script based HTTP clients and servers network daemon testi...
-
很多人心中都有過一個問題 What is the difference between Platform driver and normal device driver? ,簡單的來說Platform devices就non-discoverable,也就是device本身沒辦法...
-
組成元件 要能正確顯示資料,必須包含資料倉儲(Store),資料欄位的定義(ColumnModel)。 首先我們先定義資料欄位: var cm = new Ext.grid.ColumnModel({ {header: 'Name', dataIndex...