= 2010-03-31 = == IDEA: Cloud CPU == * 今天中午在跟擅長 GPU 與平行運算的郭芳安同仁聊天,除了談到怎麼讓 Multiple GPU 可以透過 pthread, OpenMP, MPI 作協同運作外,也談到目前的應用瓶頸主要還是在 Data I/O Throughput,這裡講的並不是最前面讀取資料,最後面寫回硬碟(SAN, NAS, 或 D/P File System)的資料通量,而是在運算過程中的資料通量,可能發生在網路卡之間(MPI job),可能發生在 CPU 經過北橋晶片,存取記憶體的過程。目前最大的問題還是在於 CPU 無法直接存取記憶體,因此 CPU 根本「吃不飽」。在現階段我們的一些省電測試中,確實光是四核心 CPU 就很難餵飽它,讓它一直維持 100%。目前最接近的 CPU 架構應該是 Blue Gene,當然我也提到過去在觀察的 Network Processor。不過最後我們得到一個結論,就是如果有一種 CPU 架構可以直接存取網路跟記憶體,那這種 CPU 大概是最適合高效能運算(HPC)的吧。 {{{ #!graphviz digraph finite_state_machine { rankdir=LR; ranksep=1.0; size="16,10"; node[shape=box,width=2.0]; "Network MAC/PHY" -> "CPU" -> "Memory / Cache" } }}} == Green Computing : Energy Efficiency : DRBL/Clonezilla over NAS == * 關於 Network Processor 目前大多數應用在 NAS 裝置上,因此今天跟哲源討論的時候,談到或許把 NFS 甚至整個 DRBL Server 移植到 NAS 上,搞不好會最省電,因為 CPU 特性的原因。但是這樣造成另一個問題,由於通常 NAS 是 ARM 或 MIPS 等架構,縱使可以裝 Debian,但卻不能拿來接 x86 架構的個人電腦作備份還原。因為光是 linux kernel, glibc 就造成很大的差異。這個問題跟 32 位元的 server 配上 64 位元的 client 有異曲同工之妙,會遇到不同 CPU 架構造成的異質性問題。 == Configuration Management Tool == * 先前常遇到 DRBL 在整合一些叢集軟體的設定檔案問題,有時 Server 跟 Client 必須不同,這就有點跟原始 DRBL 用意不太一致,也容易因為重跑 DRBL redeploy 而需要重新修改,特別是 /etc/hosts。是否該整合所謂 Configuration Management 的軟體,來協助部署像是 Hadoop 或者 Lustre 這種軟體呢?値得評估看看,但第一步可能還是得先了解一下這些 Configuration Management Tool 的用法。 * 參考 [http://wiki.apache.org/hadoop/LargeClusterTips Hadoop Wiki] 有提到幾種:bcfg2, !SmartFrog, Puppet, cfengine {{{ Consider a system configuration management package to keep Hadoop's source and configuration consistent across all nodes. Some example packages are bcfg2, SmartFrog, Puppet, cfengine, etc. }}} * [http://people.apache.org/~stevel/slides/deploying_hadoop_with_smartfrog.pdf Deploying Apache Hadoop with SmartFrog] * http://smartfrog.org/ - 由 HP 實驗室設計的叢集設定軟體(Configuration Management tools, CM-tool) * [http://trac.mcs.anl.gov/projects/bcfg2 Bcfg2] 是由 Argonne National Laboratory 開發的 - [http://packages.debian.org/bcfg2 Debian 有 bcfg2 套件] * [http://www.cfengine.org/ Cfengine] (configuration engine) - [http://cha.homeip.net/blog/archives/2006/03/cfengine.html 自動化管理工具],甚至號稱未來可以管理雲端 - [http://cloudcomputing.sys-con.com/node/795051/print Newly Released Cfengine 3 will Manage Resource Clouds] * [http://www.puppetlabs.com/ puppet] 是一套用來佈署叢集設定檔的工具。不過....從東京大學IRT研究機構(Information and Robot Technology Research Initiative)的叢集管理實務經驗顯示:__'''還挺吃記憶體的'''__ - [http://packages.debian.org/puppet Debian 有 puppet 套件] * 在另一個 mail list ([http://www.mail-archive.com/common-user@hadoop.apache.org/msg03589.html Best CFM Engine for Hadoop]) 中看到有人建議 [http://www.redhat.com/spacewalk/ Spacewalk](太空漫步), 連 Logo 都是太空漫步呢 :) * 根據 google trends 排行榜,cfengine 還是大獲全勝,至於 puppet 因為跟木偶同意,所以不準。初步選擇 cfengine, puppet 來看一下,至於需要資料庫的 SmartFrog 則排在第三順位。 * [[Image(wiki:jazz/10-03-31:10-03-31_cfengine_trends.png)]] == I/O Intensive Virtualization == * 最近 trac 一直不太順,本以為是有大量網路攻擊造成,但也觀察到另一個現象,就是虛擬機器的 host OS 若出現 IOWait 就會影響虛擬機器效能。跟 thomas 討論過,已知若採用 FLAT 格式的 VMDK 比較不會有這種問題,但是如果是支援 Copy-On-Write (COW) 動態成長的虛擬硬碟就容易有效能上的 overhead。因此這裡出現了一個新的問題,虛擬化平台上是否合適執行 I/O Intensive 的虛擬機器呢?? 還是最好讓虛擬機器直接掛載實體硬碟會比較妥當呢?? 先前也有聽過 Database 虛擬化之後,整體效能嚴重降低的問題,而 Hadoop 若放在 Xen 上跑,Cloudera 的 Christophe 似乎也不是非常建議。 * [[Image(10-03-31_vmhost-cpu-week.png)]] * [[Image(10-03-31_vmhost-memory-week.png)]] * [解決方法] 初步想到的解決方法: * VM 採用 local Disk Partition * VM 採用 iSCSI Disk or use Distributed/Parallel File System to share heavy I/O (分散 I/O 到多顆 Disk) * 當然最消極作為是 Data Intensive Job 最好還是在實體機器上跑。 * [注意事項] * 當然不管是當 Data Intensive 計算主機還是 VM Host 主機不可以吃到 SWAP,否則只有一個字:「慘」!!! 這也就代表....記憶體總容量比 CPU 多核重要 (跟上面講的還是一致,多核餵不飽,而且如果記憶體不夠大,更不可能餵飽它) * 謎之聲:那最好的 "RAM GB / CPU Core 個數" 這個數值會是多少呢 ???