什么叫從頭構建先進的存儲軟件?
從頭開始做,就是都要自己做,而不是在開源軟件上的基礎上修改、包裝。不是說開源軟件不好,但這里更加強調要從頭自己做起;第二,需要確保先進性,不是做一個比現有開源軟件差的軟件,而是要做得更好。

中國工程院院士、清華大學計算機系教授鄭緯民發表主題演講:應鼓勵從頭研發先進的存儲系統軟件
現在是時候!其中大概有幾個原因:
第一,現有很多設計是基于傳統硬件的,如機械硬盤,其隨機訪問性能差、延遲高,外存帶寬比內存帶寬要差兩個數量級別。過去很多系統軟件都是基于硬盤做的。當今的主流是NVMe SSD閃存,其隨機讀/寫性能和連續讀/寫是一樣的,外存帶寬與內存帶寬只差一個數量級了,這就給我們帶來機會,系統軟件應該重寫。
第二,原來寫軟件主要有兩種語言:C和Java,兩種語言的表達能力應該說不是太好,內存管理需要要手動進行。如今, C++、Rust,這兩種新語言的表達能力更好,內存管理也做得更好,邊緣優化也很好,這就為從頭寫先進存儲軟件創造了條件。
那么先進存儲軟件從哪里來呢?
相當一部分系統軟件開始時是0到1,發源于少數軟件天才,比如Linux是赫爾辛基大學的學生做的,Spark是美國Berkley分校的博士做的,開始時這些軟件功能簡單一點,慢慢的就由1變成100、1000。中國當前的問題是從0到1的例子太少,更多人做的工作是從100到1000,這也不是不好,但是中國更需要0到1。
中國能不能做0到1呢?特別針對存儲,沒有可能做0到1的事情?
在此,我舉2兩個例子來說明。
一是高性能分布式文件系統,它屬于存儲系統軟件的范疇,被應用在深圳鵬城國家實驗室的超級計算項目中,榮獲IO500性能排行榜第一名。IO500測什么?測寫入數據、再讀出,創建、刪除、寫入文件、查找,非常復雜,例如小文件只有3901個字節,就是這么怪的數據讓你測性能。因此IO500的冠軍,意味著存儲系統設計非常優秀。
英特爾的DAOS系統以及劍橋大學的Lustre文件系統都參加過該測試,美國象樹嶺國家實驗室也參加過,長沙的天河、廣州超算中心、阿貢實驗室、Oracle等都參加過比賽。
初期我們也想基于國外原型系統做,后來發現開源軟件問題很大,后來我們從頭開始構建,用Rust語言,基于更通用、更穩定的庫,其性能很好,其中就涉及到RDMA、NVMe SSD等新技術,并全面采用旁路技術,降低軟件棧開銷,最終用Rust語言寫出了一個高性能分布式文件系統,并把IO500沖到了7043的分數,相比第二名就有2000分不到,最后測試的情況,我們達到36850分。
最后,我們得了6個冠軍,因為10個節點一比,全系統一比,比帶寬、比延遲,我們都拿了6個冠軍。
第二個例子,基于NVMe SSD來做數據庫系統,此前一代數據庫是基于硬盤的,數據存在硬盤上,用內存作為緩存,MySQL,Oracle都是這樣思路,但是其中只有6.8%的指令是業務需要的,也就是讀、寫數據庫只有6.8%,剩下的都在做內存緩存管理。相比,內存數據庫數據全都放在內存,但是內存不是持久性設備,斷電數據就會丟失,因此為了保證持久性,要把日志、檢查點數據放在硬盤中,造成了延遲增加,從10微秒增加到100毫秒。
有沒有可能做一個NVMe SSD數據庫,也就是基于閃存的數據庫?答案是可以的,但不是簡單地把內存、硬盤替換成閃存就可以的,要做一系列優化,有很多東西要做,我們做完以后覺得還是可以的。
基于以往的實踐,不難得出三點以下體會:
1.從頭構建先進的存儲系統軟件沒有想象的那么難,因為SSD、RDMA、Rust給了我們重新做系統軟件的機會;
2.外國大學生能做到,中國大學生也能做到。外國年輕人能做到的,中國年輕人也能做到;
3.關鍵是你要開始做,不要等著。
我們需要涌現一批沒事就想寫個系統的年輕人,要對寫軟件有興趣,有了這個興趣,你就行,就可以行。
我覺得我們國家的存儲系統,應該說經過大家的努力,會越來越好。
(以上基于2021年全球閃存峰會演講整理,未經過本人審閱)