系統優化的故事:為什麼我們做別人不(屑)做的研發?/洪士灝
編按:本文由台大洪士灝老師撰寫,講述多年前進行一項企業專案的過程;雖然其中有些技術方面的敘述,但文中談到了一些實務問題的研究過程、以及台灣產學界看待許多前瞻研究專案的角度,間接點出了實務研究往往碰壁或遭到阻礙的問題,值得與大家一同分享與思考。
前天在與某廠商開會時,遇到10年前一起做過產學合作的熟面孔;為了保護他的隱私,這裡稱他為X先生好了。X先生說,他還清楚記得,當年我們幫他的老東家──廣達的儲存伺服器研發部門──所開發的技術,這點讓我感到頗為驚訝。
事隔十年,保密協定也早過期了、論文也發表過了,所以應該可以來說說這個故事。
那一年在廣達
2006–2007年間,我們與廣達做產學合作;那是我2005年回國後的第一個產學計畫。
我帶著實驗室草創後的第一批研究生,研究廣達剛研發出來的中階儲存伺服器。這個中階儲存伺服器,有兩個大腦 (雙控制器)來提供容錯功能,而每個控制器上都有一個處理機,執行著廣達輾轉向國外某公司買來的複雜軟體。
為了要快,雙控制器把從硬碟載入的資料放在一塊特殊的共享記憶體中;然而跟競爭對手比起來,整個系統還是不夠快。
X先生前天對我說,他覺得我們很厲害,能夠搞定這個困擾他們工程師許久、而且非常複雜難懂的系統軟體,最後甚至把這個儲存伺服器的極速提高了將近十倍,對於產品的競爭力有很大的貢獻。
其實這不是我們厲害,我們做效能分析和優化都是有方法論(methodology)和工具(tools)做為基礎的;沒有這些,只能做些簡單的東西,不能做複雜的工程。
國內很多研發單位只重視短期研發,根本不懂這些(我講的十年前的狀況,廣達研究院現在應該好些了吧?)。我聽過有人說:
什麼方法論、工具的?反正就叫工程師拼命加班做,限時完成產品不就好了?
所以我跟這些人談前瞻系統研發,等於秀才遇到兵、說也說不清;只有等他們遇到解不了的複雜問題,才會知道專業的價值。
現在搞雲端、大數據、物聯網、或是異質計算,這類複雜問題比比皆是;所以很多人毫無頭緒自己該做甚麼,可能也沒能力做甚麼。
以下,就讓我用這個實際案例,來證實我們的堅持。
創造分析工具
首先,為了分析這台儲存伺服器的效能,我們特別打造了效能分析工具。黃書政同學當時做出了一個軟體,讓GCC編譯器在產生機器碼的時候,能在程式的進入點和離開處插入追蹤器,以便產生追蹤資料,用以觀測程式的執行流程。
這個工具幫助我們精確地分析儲存伺服器上軟體的流程,黃同學也以此作為碩士論文《一個針對嵌入式軟體的追蹤和效能分析技術》[footnote]Developing new tracing and performance analysis techniques for embedded applications/黃書政(Shu-Jheng Huang), 2007[/footnote]。
當年追蹤分析系統最強的工具之一,是SUN的「Solaris kernel」團隊所開發的「DTrace」;這個技術後來也被IBM拿去做Linux上的SystemTap。在黃書政同學開發新工具之時,林以迪同學研究如何利用DTrace來自動化分析應用軟體的效能;後來他的分析方法對廣達的這個計畫頗有幫助,他也以此為題寫了碩士論文《利用DTrace在Solaris系統上以自動化方式建立應用軟體的效能模型與分析》[footnote]Automating server application performance modeling process on Solaris system via D-trace and trace-driven analysis/林以迪(Yi-Di Lin), 2007[/footnote]。
要知道,一般的效能分析多半是針對「處理器密集作業」(CPU-intensive)的應用來探討CPU使用狀況,然而儲存伺服器的重點並不只在CPU上,還包括磁碟和網路這類的輸出入(I/O)動作;這些是一般工具和普通工程師較難對付的部分。
所以陳人豪製作了一個量測和模擬的框架,讓我們能評估I/O部分的問題,這也是他的碩士論文《系統層級的效能量測與評估框架》[footnote]System-level performance profiling and simulation framework for I/O-intensive applications) /陳人豪(Jen-Hao Chen), 2007[/footnote]的由來。
不要忘了, 一個複雜的多工系統不只是一次只做一個工作,還有多個核心來做多項工作;所以張筱薇同學(實驗室唯一的女生!)選擇做這個最硬的研究工作:利用SystemC做出一個能快速分析多執行緒應用程式效能的模擬環境,令我感到非常難能可貴:《設計與實作一個快速分析多執行緒應用程式效能之多核心系統模擬環境》[footnote]A rapid simulation environment for application performance estimation on parameterized multi-core/multi-threading architecture models/張筱薇(Hsiao-Wei Chang), 2007[/footnote]。
對效能優化的貢獻
搞清楚效能問題出在哪裡之後,接下來就是設法優化(optimize)了。怎麼做呢?
我們實驗室研究效能優化,著重的是那些「編譯器做不到」的事情,而不是那些編譯器做得到的事情;這是跟那些做編譯器研究的實驗室最大的不同。
我們認為,天底下有太多編譯器做不到的最佳化工作,但卻可以由厲害的人來動手搞定。
舉例來說,編譯器往往不知道該怎麼優化程式,所以提供一大堆選項讓開發者來選。當時的GCC有42個可能影響效能的選項,請問要怎麼選?至少有2的42次方種組合,不可能暴力搜尋。
因此,陳奇孟同學在十年前就採用了現在最紅的「機器學習」來幫助編譯器自動找到最佳的選項集合:《以機器學習快速的搜尋最佳編譯器選項集合》[footnote]Finding the best compiler optimization option set rapidly via machine learning) /陳奇孟(Chi-Meng Chen), 2007[/footnote]。
然而,一般的搜尋方法只適用於普通的應用程式;為了將這個儲存伺服器的核心最佳化,每次編譯過後都必須重開機測試效能,非常耗費時間。所以林煌森同學針對這個議題設計了一套自動化搜尋機制:《自動搜尋編譯器選項最佳設定 : 應用於儲存伺服器核心模組效能之提升》[footnote]Automatic selection of compiler options for performance optimization on the kernel modules of a storage server/林煌森(Huang-Sen Lin), 2007[/footnote]。
適當選用編譯器的選項,的確可以顯著提升效能;但真正讓這套儲存伺服器效能起飛的,是對於軟體架構的改進。然而,如果沒有蒐集足夠的效能資料、以及對於系統的完整分析,根本不可能碰觸到軟體架構的改進;所以最佳化的成果,還是得歸功於整個團隊的合作。
陳嘉翔同學在這套儲存伺服器中,加入了高效率的快取索引表,大幅改善了原本極為沒效率的搜尋機制。誰知道這套廣達花錢買來的軟體,會寫得這麼沒效率呢?請參閱陳同學的碩士論文:《磁碟陣列系統之最佳化研究 : 快取索引表之設計與實作》[footnote]Performance optimization on a RAID system: design and implementation of a fast indexing table for disk caching/陳嘉翔(Jia-Siang Chen), 2007[/footnote]。
其中吳建成同學算是集大成者。他不僅加入了預測使用者未來的需求做「預先提取」(prefetch)的機制,同時也負責整合和評估最終的結果,最後並寫出了他的碩士論文《評估快取與預先提取在儲存伺服器上的效能》[footnote]Performance evaluation of caching and prefetch strategies on a storage server/吳建成(Chien-Cheng Wu), 2007[/footnote]。
最終成果
總括來說,這些研究讓儲存伺服器的極速提高了將近十倍,而廣達只贊助了我們一百多萬台幣的研究經費。
這不能怪廣達小氣,對當時沒有國科會經費、又沒有名氣的我來說,這筆錢讓我能夠購買設備和供養學生;不過這點經費大概是只能僱一位菜鳥工程師做一年研發的成本,如果比起當年廣達贊助MIT的研究經費、以及提供給台大的捐款,我想廣達給我們的經費應該是大大值回票價了。
但或許廣達並不是這麼看,而這才是當時身為菜鳥助理教授的我,最感到不值的部分。那個儲存伺服器研發部門,被該公司長官要求要自負盈虧,所以為了要在短期內謀求利潤,只好開始刪減「不必要」的研發開支;大概也因為如此,一年的研究期間結束之後就沒有下文了。
所以我說國內業界短視近利、不懂軟體研發,這是我親身經歷的第一個實例。
X先生應該是站在我們這邊的,但他當時也是小咖,即使他覺得應該持續贊助我們,也仍然改變不了大長官的旨意。
X先生目前在某大公司擔任處長,前天開會中發言強調軟體開發的重要性、支持提早做軟體的開發,我聽了非常窩心,希望業界有更多懂得系統和軟體的人才。
學術論文發表不易
另外,在學術方面,我指導這批第一屆的研究生做實務研究,在2007年產出了八份碩士論文,忙得不亦樂乎,隨後將部分論文改寫投稿,在2008才發表兩篇國際會議論文(一[footnote]Shih-Hao Hung, Chia-Heng Tu, and Chien-Cheng Wu, Optimizing the Embedded Caching and Prefetching Software on a Network-Attached Storage System, in Proc. 2008 IEEE/IFIP International Conference on Embedded and Ubiquitous Computing (EUC) , pp.152–161, Shanghai, China, December 17–20, 2008.[/footnote]、二[footnote]Shih-Hao Hung, Shu-Jheng Huang, and Chia-Heng Tu, New Tracing and Performance Analysis Techniques for Embedded Applications, in Proc. the 14th IEEE International Conference on Embedded and Real-Time Computing Systems and Applications (RTCSA) , pp.143–152, Kaohsiung, Taiwan, August 25–27, 2008.[/footnote]),2009年一篇[footnote]Shih-Hao Hung, Chia-Heng Tu, Huang-Sen Lin and Chi-Meng Chen, An Automatic Compiler Optimizations Selection Framework for Embedded Applications, in Proc. the 6th International Conference on Embedded Software and Systems (ICESS) , pp.381–387, HangZhou, Zhejiang, China, May 2009.[/footnote],投資報酬率極低;發表實務研究的論文難度高,是其他領域的人所難以夠理解的。
首先,在這類系統研究方面,要教導學生基本知識和技能、指導研究、解決實作問題、驗證研究結果,原本就可能要比其他領域花更多心力;其次,要寫一篇優質的實務研究論文,必須能言善道、精準犀利,但大多數學生推導數學公式可以、寫程式可以,卻不大會用英文談論設計方法、分析利害得失、探討關鍵議題、展現系統優勢。
如果要在國際會議或期刊上發表論文,我們必須在論文寫作上花很多時間;另外,寫論文時還要顧及與廠商的保密協議,必須遮遮掩掩的,當然更不利於發表。
所以,國內學術界在計較SCI論文數量的同時,往往把很多教授和學生逼上找尋「容易發表論文」的途徑;像這類我認為很有價值的產學合作,在那個SCI掛帥的年代,因為做起來事倍功半,所以被很多年輕教授視為畏途。
結語
業界短視近利、加上學術界SCI掛帥,我對這個系統優化產學研究案的積極投入,算是非常吃力不討好;唯二能夠安慰自己的,第一是教出一群能實作的研究生,第二則是這個研究案讓我更清楚,我們能做出業界需要的前瞻研究,只是時機未到。
至於個人的學術成就,懂的人就懂,對於那些只會算論文數量的人,我也不冀望他們的理解。
但上述的這些情況,這些年確實嚴重阻礙了台灣的產學發展,造成前瞻研發不務實、論文氾濫的現象,甚至影響教育品質和人民生計。
然而,產業仍不乏能人,學界還是有志士,只要堅持走對的方向,我們還是有可能走出困境的。