2013年10月12日 星期六

IOZone 效能測試

由於電腦 DRAM 容量越來越大動輒 4GB、8GB,我們可以好好利用高容量的記憶體來加速需要大量讀寫操作的工作。

透過 mount 指令我們可以配置特定大小的記憶體為暫時行的檔案系統,然後掛載到某一目錄底下,接著就可以將我們要處理的程式或資料搬到該目錄裡,即可享受到 RAM Disk 的極佳效能體驗。以下示範掛載 1GB RAM Disk 至 ~/RAMDISK 目錄:
sudo mount -t tmpfs -o size=1GB none ~/RAMDISK/
接著就請出 IOZone 來檢測 ram disk 的效能究竟有多強大,在 i5-3317U CPU 搭配 8GB 1600 DDR3 記憶體進行測試,當然測試前必須先安裝 iozone,另外為了方便顯示結果一併安裝 gnuplot 以及 gnuplot-x11 。
sudo apt-get install iozone3 gnuplot gnuplot-x11
安裝好 iozone 之後立馬進行測試,iozone 測試相當容易只要下指令 iozone -az 即可跑出測試結果,當然我們可以把結果給紀錄到檔案中。
# 切換到將要進行測試的目錄 
cd ~/RAMDISK 
# 執行 iozone 並將結果存到 IOZone.log 檔案中g3m/4
iozone -a | tee IOZone.log
接著可以在 /usr/share/doc/iozone3/examples 目錄裡找到一些顯示結果的工具,將需要的檔案 copy 出來:
cp /usr/share/doc/iozone3/examples/Generate_Graphs  ./
cp /usr/share/doc/iozone3/examples/gengnuplot.sh ./
cp /usr/share/doc/iozone3/examples/gnu3d.dem.gz  ./
# 解壓縮 gnu3d.dem.gz 
gzip -d gzip -d gnu3d.dem.gz
執行 Generate_Graphs 將結果以圖形呈現:
chmod +x Generate_Graphs
./Generate_Graphs IOZone.log
圖形是以 gnuplot 繪製可以透過滑鼠拖拉轉換不同的視角觀看,可以從結果看出無論讀寫都有達到 GB 等級的表現,檔案寫入達到 2GB/s 以上檔案讀取更超出 4GB/s 以上的結果,算是相當優異,最後提醒一下結果跑完記得存回硬碟裡否則 ramdisk 的資料可是一關機就消失囉。















2013年1月9日 星期三

wireshark 擷取 USB 訊號

最近發現 wireshark 新增 USB 擷取的功能,只要是 Linux kernel 2.6.21 以上的版本皆可透過 usbmon 模組擷取 USB 裝置上的資料流,搭配 wireshark 本身強大的 filter 功能對於 USB 應用的開發與除錯帶來相當大的便利性。

使用 wireshark 擷取 USB 訊號實需先載入 usbmon 模組,於 terminal 執行指令:
$ sudo modprobe usbmon

根據官方 wiki 說法,若系統沒有掛載 debugfs 需執行以下指令(小弟於 ubuntu 12.10 測試結果是不需要的)。
$ sudo mount -t debugfs / /sys/kernel/debug
執行 wireshark 之前先確認 USB 裝置已接上電腦,可以透過 lsusb 確認想擷取的 usb ,lsusb 會顯示出 usb 裝置目前屬於哪個 USB Bus 與 Device 代號以及USB ID裝置,例如我們想觀察 Alcor Micro Corp. Flash Driver 這一個 USB 隨身碟裝置, lsusb 顯示該裝置目前位於 USB Bus 002 上代號為 Device 007 其 ID 為 058f:6387。

接著開啟 wireshark ,由於 usbmon 的加持每個 USB bus 皆顯示為一個獨立的 USB 裝置,假設想要擷取 Bus 2 的裝置即可選擇 Bus 2。

接著點選 Expression 設定 filter expression。

點選 Expression 按鈕會跳出 Filter Express 視窗,可以在 Field Name 欄位中尋找 USB 相關的項目並設定,例如想監測 USB ID 為 058f:6387 的裝置,先選擇 "usb.idVendor" 欄位接著選擇判斷條件 "==" 以及條件值 "0x058f",設定完之後按下確定。

回到 wireshark 主視窗中剛才設定的 filter 條件自動填入 filter 輸入欄位中,若條件格式語法正確其底色為綠色,反之語法錯誤則為紅色。


當然如果要設定較複雜的條件也沒問題,可將多個判斷是以 && 或是 || 進行組合。設定完 filter 條件後記得按下 Apply。

接著點選 Start 開始對 USB 裝置進行監測,即可體驗 wireshark 強大的 USB 封包擷取功能囉!

使用完之後可卸載 usbmon 模組。
$ sudo modprobe -r usbmon


參考資料 - http://wiki.wireshark.org/CaptureSetup/USB

2013年1月6日 星期日

Android裝置上執行Linux桌面環境

Android 系統擁有豐富的 app 提供行動應用便利的服務,而 Linux desktop environment 則擁有眾多桌面應用程式,無論是 Android 或是 Linux desktop environment 這兩者都是基於 Linux 核心發展出來的操作環境, 因此在同一硬體裝置上同時執行 Android 以及 Linux desktop environment 技術上是可行的方案,例如 Ubuntu 積極推出的 Ubuntu for Android 展示了 Android 與 Ubuntu 桌面環境的整合應用。

然而 Linux 的發行版本眾多每個使用者偏好不盡相同,假若要將自己喜愛的 Linux 環境也執行在 Android 裝置上該如何進行呢?以下提供一項解決方案(以 ARM -Based Android 裝置為例):
  1. 下載 ARM Linux 桌面發行版本的映像檔。
  2. 於 Android 上掛載 Linux 映像檔。 
  3. chroot 至 Linux 環境。
  4. 於 Linux 環境裝執行 vnc server。
  5. 使用 Android 的 vnc client 連線至 vnc server。
如此一來即可在單一裝置上同時執行 Android 與 Linux desktop environment。