叢集系統(Cluster)對於一般人來說,就好像冰山美人一般的難以親近,原因大多在於叢集系統一直給人們難以架設的印象。本文就是藉由 OpenMosix 這個比較容易架設的叢集系統,使讀者能夠感受到叢集系統威力,並且搭配應用 Linux 上音樂多媒體轉檔程式,將 WAV 格式轉成 ogg 或 mp3 格式,來驗證 OpenMosix 叢集系統性能。
叢集系統(Cluster)簡單說:就是將多台電腦資源,整合應用起來像是一台超級電腦。
常見叢集系統類型如下:
『High-availability (HA) clusters』高可用度叢集:提供高度可用之電腦系統,單點故障不會影響整體運作(failover),適用於關鍵任務的電腦服務(mission critical)。
『Load balancing clusters』負載平衡叢集:將負載分散到多台電腦之叢集,很適合重型負載服務(Heavy Loading)。
『High-performance (HPC) clusters』高效能叢集:需要大量運算之電腦系統,最適合使用 HPC 來處理,事實上有些高效能叢集系統同時也是負載平衡系統。
『Grid computing』網格運算:分散式運算架構,將運算需求分配給許多電腦,同時也是高效能 HPC 叢集。
OpenMosix 叢集,屬於 HPC Cluster 系統實做,也算是 Load balancing clusters 一種,您可以使用多台電腦,營造出像是一台超級電腦一般,其中的每一台電腦其實是一個運算節點(Node),當某單點(某一個 Node)被下達了許多行程(Process)需要執行,但是卻來不及運算時,OpenMosix 會將行程轉移(migrate)給其他較空閒或是運算能力較強的節點來運算,運作情況有點類似一台主機多顆 CPU 運算方式,OpenMosix 使得不同台電腦上的 CPU ,整合成像是一台擁有多顆 CPU 的超級電腦。

俗話說:「工欲善其事,必先利其器。」,底下先行了解架設 openMosix 所需要軟、硬體設備,接著再按部就班實做,即可感受到 openMosix Cluster 威力。
在硬體方面,openMosix 需要準備兩台以上的電腦,使用區域網路連接起來即可,電腦規格不盡相同也沒有關係,因為 openMosix Cluster 不一定需要相同硬體規格電腦所組成。舉例來說:您可以混用 Intel P3、P4 或 AMD K7、K8 主機當成叢集節點,唯一需注意到是必須使用相同版本的 openMosix Kernel,這與一般需要相同硬體規格的叢集系統不同,OpenMosix 會儘量分散負載給硬體規格較強的節點運算,『不需相同硬體規格』同時也是 openMosix 特色之一。

因為 openMosix 作法是將 Linux kernel 部份改寫而成的 Cluster 系統,所以若要成為 openMosix Cluster ,簡單說就是把原來 Linux kernel 換成 openMosix 版本 kernel 就可以囉!我們可以到「http://openmosix.sourceforge.net/」下載「openMosix-kernel-2.4.26」(Kernel)與「openmosix-user」(Tools)工具。
筆者分別下載到的檔案名稱為:
| openMosix 核心 RPM 格式檔案 | openMosix 工具 RPM 格式檔案 |
| openmosix-kernel-2.4.26-openmosix1.i686.rpm | openmosix-tools-0.3.6-2.i386.rpm |
另外較需注意的是,建議使用以 kernel 2.4 為基礎 Linux distribution(例如:RedHat 9 或 Fedora core 1 ),因為 openMosix 2.6 kernel 的版本至筆者截稿前,還在開發中(beta)階段,若讀者想測試看看 2.6 kernel 版本 openMosix,也可以自行下載做測試,只是實做難度會比 2.4 kernel 版本高出許多。

測試設備如下:使用一般乙太網路交換機連接起來的兩台電腦,分別為 Node A 與 Node B
| Node A | Node B | |
| 處理器 | PIII 600 MHz | PIII 600 MHz |
| 記憶體 | 192 MB SDRAM | 64 MB SDRAM |
| 硬碟 | 40 GB(IDE 介面) | 20 GB(IDE 介面) |
| 網路卡 | 100 Mbit 乙太網路 | 100 Mbit 乙太網路 |
| Distribution | RedHat 9 | RedHat 9 |
使用下列指令安裝 openMosix kernel 與 openMosix tools
「 rpm -ivh openmosix-kernel-2.4.26-openmosix1.i686.rpm 」
「 rpm -ivh openmosix-tools-0.3.6-2.i386.rpm 」

在安裝完 openMosix kernel RPM 檔案後,會自動將開機選單寫入檔案「 /boot/grub/menu.lst」
其中 title 帶有 openmosix 字眼的就是 openMosix kernel 開機選單,而 title 沒有 openmosix 則是原來舊 kernel 的開機選單。
另外「 default=1 」代表開機使用『第二個』title(RedHat 9 內建的),若要使用第一個 title 開機(openMosix),則改成「 default=0 」(建議值)

接下來使用指令「 mosmon 」來觀察 openmosix cluster 運作情形(按下 q 可離開 mosmon),當兩個 Node 皆正常使用 openmosix kernel 開機運行時,會自動偵測成為一個 Cluster 系統,下圖為兩個 Node 執行「 mosmon 」情形。


電腦運算中,以多媒體(影音)檔案格式轉換最需要 CPU 資源,接下來我們藉由多媒體檔案格式轉換,來感受一下 openmosix cluster 威力。
接著將身邊隨便一片音樂 CD(不是 mp3 喔!),放入光碟機中。使用指令「 cdda2wav -B dev=/dev/hdc 」將所有光碟中的歌曲轉出到硬碟成 WAV 格式檔案。
上述指令中,參數 -B 代表「所有曲目」,dev 則指向到光碟機(/dev/hdc)


使用指令「 oggenc audio_01.wav 」或「oggenc track01.cdda.wav」來將 wav 格式轉成 ogg 格式檔案

使用指令「 lame -h audio_01.wav audio_01.mp3」或「lame -h track01.cdda.wav track01.cdda.mp3」來將 wav 格式轉成 mp3 格式檔案,-h 參數是 higher quality (高品質之意)


筆者準備 7 個長短不一的 WAV 檔,使用 oggenc 轉檔工具來測試「單機」與「叢集」差別,配合 scripts 來同時轉 7 個 WAV 檔,並將結果紀錄成檔案,觀察轉檔所需時間差別。
7 個 WAV 檔的大小如下:可使用「 ls -lh audio_0*.wav 」來一併顯示
-rw-r--r-- 1 root root 27M May 22 18:20 audio_01.wav -rw-r--r-- 1 root root 32M May 22 18:21 audio_02.wav -rw-r--r-- 1 root root 24M May 22 18:21 audio_03.wav -rw-r--r-- 1 root root 24M May 22 18:21 audio_04.wav -rw-r--r-- 1 root root 21M May 22 18:21 audio_05.wav -rw-r--r-- 1 root root 24M May 22 18:21 audio_06.wav -rw-r--r-- 1 root root 22M May 22 18:21 audio_07.wav
筆者先以單機來轉檔,使用指令「for i in `seq 1 7`; do oggenc audio_0$i.wav 2> log$i.txt & done」
在所有 oggenc 行程皆執行完畢後,使用指令「grep Elapsed log?.txt」來觀察一次轉換 7 個 WAV 檔,每個檔案從開始轉換到結束所需時間(筆者的大約五分鐘)


接著以叢集來轉檔,使用指令「for i in `seq 1 7`; do oggenc audio_0$i.wav 2> logMosix$i.txt & done」
其中有異動到的,只有 log 檔案改名為 logMosix1.txt ... 到 logMosix7.txt
在所有 oggenc 行程皆執行完畢後,使用指令「grep Elapsed logMosix?.txt」來觀察使用叢集系統後,在一次轉換 7 個 WAV 檔,每個檔案從開始轉換到結束所需時間是否比較短(筆者的大約三分鐘左右)


在使用叢集 encode 這段時間內,也是可以執行「 top -d 1 」來觀察系統負載,load average 會上升但會比單機數值低(筆者測試值約 3),還會明顯發現有些 oggenc 行程狀態是 s (Sleep)並且會耗用別台 cpu 資源來運算

其實 Linux 也是可以直接從音樂 CD 片轉成 ogg 或 mp3。我們測試時沒如此做,是考量 I/O 效能將會影響到測試結果的問題,畢竟 CD-ROM 算是一個較低速設備(相對於硬碟),所以先將 CD 音樂轉到硬碟,這樣 I/O 效能對於測試結果的影響會比較小些。

如果同時間只轉一首歌曲,意味著同時間只有一個 Process 需要大量運算資源,這時 openMosix 就無法滿足您需要的功能,意思是若是你「依序」轉十個音樂檔案,效能上則不會有太大差異,必須要「同時」轉十個音樂檔案,才會感受到差異。
在 openMosix 主網頁,可以連結到「openMosixview」,這是一個 openMosix 圖形監控工具,讀者若有興趣,也可以自行下載安裝及測試。

在 openMosix 主網頁連結「Instant Clusters」可以看到 openMosix 使用 DVD、CD 就可以運行的一些相關資料,這樣就可以使用無硬碟主機當作叢集節點。

一般最簡便方式,就是使用 openMosix 自動發現網路上叢集功能,若是想要限制叢集節點成員,可參考 /etc/openmosix.map 內容來設定。

openMosix 應該會是應用在需要執行很多行程(Multi Process)但單機卻無法負荷,有著很重 loading ,需要多 CPU 運算情形,比如說點閱率很高之 Web Site、郵件量很重的 Mail Server 或是查詢量很大之資料庫服務,另外一項重點是:openMosix 也許能幫您節省下不少費用。
一般 Unix 上磁碟共享常常採用 NFS,openMosix 也可以這樣做,另外 openMosix 還提供一種 MFS 檔案系統,你可以撰寫每一個節點之 /etc/fstab 加入這一行「 cluster /mfs mfs odfsa=1 0 0 」然後做出掛載點「 mkdir /mfs 」在重開機或是重起 openMosix 服務即發現 /mfs/<node>/ 下會是節點之檔案系統資料
ogg 格式使用指令「 ogg123 <ogg檔案> 」來播放,mp3 格式則使用指令「 mpg321 <mp3檔案>」來播放
oggenc、ogg123、oggdec 皆是套件 vorbis-tools 成員,通常 ditribution 就內建 vorbis-tools 所以直接找安裝光碟將套件裝起來就可以用了
mpg321 來源 http://mpg321.sourceforge.net/ ,在 redhat 9 有非官方 rpm 下載點列於下表:
另外 mpg321 還相依於 libid3tag 與 libmad 套件,需一併安裝方可使用
| mpg321 | http://rpmfind.net/linux/RPM/dag/redhat/9/i386/mpg321-0.2.10-8.rh9.rf.i386.html |
| libid3tag | http://fr.rpmfind.net/linux/RPM/dag/redhat/9/i386/libid3tag-0.15.1b-3.0.rh9.dag.i386.html |
| libmad | http://rpmfind.net/linux/RPM/dag/redhat/9/i386/libmad-0.15.1b-3.0.rh9.dag.i386.html |

測試採用 RedHat 9 英文方式、最小安裝、沒有開啟防火牆,之後補裝套件列表如下:
主要使用到軟體:openmosix-kernel、openmosix-tools、cdda2wav、cdparanoia、vorbis(oggenc 與 ogg123)、lame、mpg321 等等(其餘因為相依性而安裝)
arts-1.1-7.i386.rpm audiofile-0.2.3-6.i386.rpm cdda2wav-2.0-6.i386.rpm curl-7.9.8-5.i386.rpm esound-0.2.28-4.i386.rpm fontconfig-2.1-9.i386.rpm freetype-2.1.3-6.i386.rpm lame-3.93.1-fr2.i386.rpm libao-0.8.3-3.i386.rpm libid3tag-0.15.1b-3.0.rh9.dag.i386.rpm libjpeg-6b-26.i386.rpm libmad-0.15.1b-3.0.rh9.dag.i386.rpm libmng-1.0.4-3.i386.rpm libogg-1.0-4.i386.rpm libpng-1.2.2-16.i386.rpm libvorbis-1.0-7.i386.rpm mpg321-0.2.10-8.rh9.rf.i386.rpm openmosix-kernel-2.4.26-openmosix1.i686.rpm openmosix-tools-0.3.6-2.i386.rpm qt-3.1.1-6.i386.rpm vorbis-tools-1.0-3.i386.rpm XFree86-libs-4.3.0-2.i386.rpm XFree86-libs-data-4.3.0-2.i386.rpm XFree86-Mesa-libGL-4.3.0-2.i386.rpm XFree86-Mesa-libGLU-4.3.0-2.i386.rpm