2009年10月29日 星期四

gparted


這是一套類似partition magic的軟體,可以幫您重新reisze您的partition,而且不會遺失資料,由於是圖形化操作,我就不囉嗦了。










module-init-tools


module-init-tools是我拿ubuntu的package名稱來當標題,這邊是要來介紹tools for managing Linux kernel modules管理Linux kernel module的工具。
這裡面主要的工具有
/bin/lsmod
顯示目前kernel的module之狀態
/sbin/insmod
insert module到kernel中
/sbin/rmmod
將module從kernel中移除
/sbin/depmod
用以產生modules.dep和map檔
/sbin/modprobe
新增/刪除module,藉由modules.dep連帶將相關的module做新增/刪除
/sbin/modinfo
顯示module的相關資訊



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。

2009年10月21日 星期三

ubuntu 9.04(jaunty)升級至9.10(karmic)


今天心血來潮,索性把ubuntu 9.04升級到9.10,沒考慮太多,所以不怕危險的話,就彷下面步驟升級吧。
  1. 修改/etc/apt/sources.list,把裏面的jaunty改成karmic
  2. apt-get update
  3. apt-get dist-upgrade

重開機後就完成啦。

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並沒有帶來好處。



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:

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  
下載unixbench:
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嚕。


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
StateDescription
0The request is not initialized
1The request has been set up
2The request has been sent
3The request is in process
4The request is complete



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即可進入修改(必須是存在系統的帳號)。

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的效能與提供額外的功能。