淺談大數據背景下的計算機體系結構存儲層次結構研究

大數據時代已經到來,面對各行各業日益增長的海量信息數據,我們應該如何去收集數據、存儲數據(storing)、保留篩選數據(preserving)、分析數據、以及根據數據分析的結果採取相應行動的一系列過程,在大數據背景下這些問題都面臨着巨大的挑戰。


       今天,我想從計算機體系結構中的存儲層次結構(memory hierarchy)的角度出發,討論一下在如今的大數據背景下,存儲層次結構應該需要進行哪些創新,才能適應日益增長的大數據應用。


      存儲層次結構從處理器上的私有(private cache)和共享緩存(shared cache)、主存(memory)、外部存儲(storage)等這三級結構。

(1) 處理器緩存相關的創新

        處理器緩存的具體實現是由硬件決定的,其上的緩存組織形式以及緩存塊的替換算法也都是硬件廠商決定的。但是,就研究而論,可以對緩存的組織形式和緩存塊的替換算法等在simics和gem5等模擬器上實現。處理器上緩存的性能是計算機系統中最能直接影響應用程序性能的地方。一般緩存的設計是按照系統中適合各種應用程序的通用場景設計的,而現在的大數據環境下,應用數據的組織形式和使用方式都有所不同(比如海量圖片的處理、地圖位置信息的處理等等),因此,具有針對性地使用處理器緩存,以達到更好的性能和QoS保證是一個比較不錯的嘗試。


       目前在研究的針對NUMA架構的服務器上,對共享緩存的使用進行優化,調度系統中的任務,使各個NUMA節點的共享緩存能夠更加合理的使用,提高系統的吞吐率。通過調度的方法解決共享緩存資源競爭的問題,已經是一個研究比較多的點了。從目前看,這種方式可以提高性能,但是有比較大的不確定性。並不是所有場景都能通過調度解決性能問題。在這個調度方法提出來之前,採用動態的緩存分塊技術解決共享緩存資源利用問題的方法是一種研究比較成熟的技術。調度和分塊這兩種技術能否進行結合使用,取長補短,調度方式更加靈活,相應系統的程序行爲變化比較及時,而分塊的方法更能夠保證程序性能的穩定性。因此,兩種技術相結合,既能提高性能,同時也保證程序的QoS。


      傳統操作系統的應用進程對處理器緩存的使用特點和在虛擬化環境下的緩存使用特點應該是不一樣的(有待實驗驗證)。 虛擬化帶來更多的系統開銷,虛擬機之間的切換開銷要遠大於普通進程之間的切換開銷,同時,在虛擬機環境下,TLB的使用也和傳統OS對TLB的使用也有所不同。特別是虛擬機裏運行特殊的應用時,比如移動應用APP的服務端程序跑在虛擬機中,對處理器緩存和TLB的使用特點需要進一步研究,提出能夠更好適應這些大數據背景下的新型應用場景。


      和緩存相關的還有就是移動端的智能設備,現在智能手機的硬件處理能力越來越強。已經出現8核處理器(4個大核+4個小核),這種異構多核處理器的架構,對系統軟件的設計提出了更高的要求,如何實現異構處理器平臺上的緩存有效利用、調度管理等問題也已經擺在我們面前。


      以上幾點是自己感興趣和在做的內容,關於緩存的內容還有很多。

(2)主存相關的創新

       目前的主存介質主要還是以DRAM爲主。 主存是計算機系統中很重要,也是很複雜的一塊內容。單純的一個Linux內核中的內存管理模塊子系統就已經足夠複雜。如何能夠高效地利用主存,減少運行的應用程序訪問外存的次數,是一直需要不斷提高的技術點。我只把自己感興趣的幾點內容寫一寫,相信以後還會有補充。


       我以前的研究主要集中在主存這部分,試圖建立一個分佈式共享內存(Distributed Shared Memory)的系統。但是,我目前感覺分佈式的共享內存系統已經不適應現在的大數據的應用場景了,以前的DSM系統是爲了解決單臺機器無法提供足夠內存容量(訪存空間)和性能,把多臺機器的物理地址編址成統一的內存地址,可以讓跑在DSM系統上的程序可以透明地訪問內存不在本地機器上的數據。但是,這種方式產生了巨大的開銷,內存數據一致性的協議也是非常地複雜。我覺得,現在的分佈式大型應用,單個線程對性能的要求都不會超過一臺服務器所能夠提供的範圍。而線程與線程之間可以通過消息通信的機制進行數據的同步和共享,這種方式更加高效,更具備可擴展性。 其實,某種意義上,NUMA架構就是軟件DSM系統的硬件實現。


       爲了更加充分地利用內存資源,現在的memcached項目是業界普遍採用的方式,以提高數據中心對實時性要求較高的應用訪問數據的響應速度。Memcached使用key-value的形式存儲數據在內存中,通過哈希表和緩存替換算法維護存儲在主存中的數據。我覺得,在大數據應用場景下,in-memory的處理特性是一個大趨勢,這方面應該有非常廣闊的研究前景。但是,需要比較好的系統結構的基礎以及對並行算法有比較深入的研究。這是分佈式的問題,單臺機器上性能提升是一個永恆的話題,但是分佈式的問題更具挑戰性,意義也是非常大的。分佈式系統中存在的問題更多,性能提升空間更大。


        和主存相關的還有就是主存和外存的接口處,以及處理器和主存的接口處。我覺得這兩個接口處是存在問題比較多的地方,現在的多核處理器在訪問內存數據的使用還是需要排隊訪問內存的,這就導致的多核處理器訪問內存的性能瓶頸,如何提升並行內存訪問的性能是一個巨大的難題,可以借鑑GPU的模式,怎麼提高並行性。就算有那麼一點點的提高,我覺得都是一個比較大的貢獻了。 第二個接口處,就是主存和外存的接口,現在外存的介質豐富起來了,不僅有機械磁盤,還有固態硬盤,手機上的閃存等。這些介質的工作原理是非常不一樣的,而現在主存和外存的接口是統一的,這樣一來,難免影響新型的存儲介質的性能發揮。這方面的研究也是一個比較重要的點,畢竟目前計算機系統中最大的性能瓶頸在於外部IO訪存的速度過慢。


       當然,主存中還有很多問題需要解決,比如虛擬化環境下,目前的頁表維護工作我總覺得是非常地冗長和繁雜的,效率也不夠高,這是一項巨大的工程,如果能在這裏面找到新的問題,提出創新的解決方案,是一件令人激動的事情。 還有,虛擬機的內存共享問題,如何識別虛擬機之間(同一臺物理機上的虛擬機之間以及不同物理機上的虛擬機之間)的數據共享情況,通過調度,進一步提高內存的利用率,也是一件非常值得做的事情。

(3)外部存儲相關的創新

      我個人覺得,外部存儲是大數據的基石。沒有外部存儲技術的快速發展,也沒有今天大數據概念的提出。現在外部存儲的容量越來越大,但是,仍然不能夠滿足存儲現在人們利用各種設備生產的數據。因此,如何提高數據存儲的效率,去除冗餘的數據,保證數據存儲的可靠性等方面都是亟待解決的問題。


      關於外部存儲,我覺得非常重要的一個方向是大規模分佈式文件系統的設計。這種大規模分佈式文件系統(hdfs、ceph文件系統等)都還不是很成熟,也肯定存在諸多問題。性能問題,擴展性問題,穩定性問題等等。這些都是亟待解決的,而且對於大規模的數據,其文件類型也是千差萬別的,怎麼樣去設計文件系統去適應各種不同類型的文件(文字、圖片、視頻、地圖信息等等)。起初,我是對分佈式文件系統比較感興趣的,但是,現在精力不夠,不知道哪一天又會重新去研究它。


      外部存儲需要創新的地方是如何高效可靠地利用SSD存儲介質,提高外部存儲的訪問性能,保證壽命、降低能耗等等。由於SSD的工作原理和傳統的機械硬盤相差較大,目前的文件系統其實不能夠很好地發揮出SSD硬盤的特性。怎麼去設計一種新的系統結構,包括和內存的結合,Linux內核的文件緩存部分和文件系統以及設備驅動這些方面都存在需要改進的地方,需要提出創新解決問題的方法。


     先寫這麼多吧,感覺離自己期望寫出來的東西還有點遠,慢慢進步吧!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章