- 相關推薦
探析內存網格關鍵技術
摘要:內存網格的出現主要借鑒了傳統的網格計算技術和集群內存共享技術。本文從動態函數截獲,緩存數據組織與管理和異步緩存數據寫入三方面探討了內存網格系統的關鍵技術。
關鍵詞:內存網格;動態函數截獲;異步緩存數據
一 引言
隨著計算機技術的發展,CPU和系統主存的性能得到了極大的提高。然而由于IO設備的發展相對滯后,磁盤性能逐漸成為了影響計算機整體性能的瓶頸。對于具有頻繁、隨機磁盤10的數據密集型應用,如web服務器和數據庫系統,磁盤訪問的巨大延遲將嚴重影響應用程序的性能。為了提高系統10性能,提出了內存網格的概念,為共享和利用互聯網中豐富的內存資源來解決內存密集型應用的性能問題提供了理論支持。本文結合已有的內存網格理論,對其關鍵技術進行了系統研究。
二 動態函數截獲技術
(一)內核模塊
Linux內核是單一平面結構(monolithic),也就是說它是一個獨立的大程序,所有的內核功能構件均可訪問任一個內部數據結構和例程。為了方便使用同時又提供了模塊化的機制,這就是內核模塊。內核模塊是可以按照需要動態載入內核和從內核中卸載的代碼。內核模塊可以不需要重起系統擴展內核的功能。對于Linux內核模塊,可以用insmod或rmmod命令顯式載入或卸載,或者由內核在需要時調用內核守護程序(kerneld)自動載入和卸載。內核模塊運行在Linux內核空間,可以方便地使用內核提供的系統函數和變量。從模塊程序鏈接的方式來看,它并不能自由地使用用戶空間里定義的函數庫,只能使用內核空間中定義的、資源受到限制的函數。內核在內核符號表中維護了一個模塊的鏈表,每個符號表對應一個模塊,模塊加載進內核時正確地對其進行解釋,并將模塊作為內核的一部分來執行:加載進內核的模塊具有所有的內核權限。模塊可以在系統啟動時加載到系統中,也可以在系統運行時加載:在不需要時,可以將模塊動態卸載,這樣就不用每次修改系統的配置時都要重新編譯內核了。一般來說,內核模塊可以應用于設備驅動、文件系統驅動程序、網絡驅動、可執行文件解釋器和系統調用等方面。
(二)函數截獲
內存網格系統中利用了函數截獲(APIHooking)的方法來動態改變系統函數執行流程。所謂動態改變,就是指在不修改程序源代碼和不覆蓋程序在磁盤的存儲映像前提下,對程序行為進行修改。
函數截獲(API Hooking)是獲取指定執行代碼控制權的基本方法[44,45]。它提供了一種在不修改程序源代碼的前提下,動態改變操作系統行為的便捷方法。在眾多現代操作系統中,使用函數截獲方法的間諜軟件(Spying Software)大量利用了系統中存在的窗口程序來部署自己的特殊應用。一般說來,使用函數截獲方法具有如下優點:
1、便于API函數的監控
具備控制API函數調用的能力是非常有用的。它能夠使程序開發者追蹤一些發生在API調用過程中、通常對外部應用“不可見”的系統行為。這種方法主要用于特定環境下對函數參數的驗證和檢查。比如,在某些情況下,監控與內存相關的API調用可以有效的捕獲內存資源泄漏的問題。
2、便于調試與逆向工程
基于函數截獲的調試方法一直在調試技術中占據重要的地位。許多程序開發者使用函數截獲方法來確定程序部件的實現和相互關聯。API截獲(APlinterception是獲取二進制執行文件信息的重要方法。
3、便于窺視系統內部實現
許多程序開發者希望對非開源操作系統有深層次的了解。函數截獲方法是一種有效的探索API內部細節的方法。
4、便于擴展函數的功能
為了能夠改變或擴展模塊功能,通常使用函數截獲的方法對程序的正常執行流進行重新定向。比如,許多第三方軟件產品有時候無法滿足具體的安全要求,因此不得不對其進行一些調整。為了解決這種問題,應用程序開發者可以利用函數截獲方法對原函數添加一些額外的前置和后置處理過程。這種方法對改變一些已經編譯后的代碼行為極為有用。
對于一個需要利用函數截獲的系統來說,通常需要依據函數截獲的目標和使用環境來決定具體采用何種函數截獲方法。首先,我們需要考慮設計目標是只針對單一應用進行截獲還是需要構建一個系統級的截獲方案。比如,如果只需要監控一個特定應用,那么就不需要對一個系統級的函數進行截獲。
一個截獲系統(Hook System)通常由至少兩個部分組成,即一個截獲服務器
CHook Server)和一個截獲驅動器(HookDriver)。截獲驅動器主要完成實際的截獲功能,截獲服務器則負責將截獲驅動器在特定時刻注入(inject到目標進程。截獲服務器同時管理驅動器并且選擇性的接受來自驅動器的信息。
三 緩存數據組織與管理
(一)模型設計
內存網格系統擴展了傳統的系統存儲層次結構,在主存和磁盤之間添加了內存網格層。內存網格層主要由內存服務節點提供的空閑內存空間構成,內存客戶節點通過利用這些空閑內存作為本地磁疵緩存的擴展,從而加速系統磁盤10的性能。但是對于內存服務節點提供的空閑內存空間,如何有效的對其進行組織和管理就成為了一個關鍵問題。
在基于協作緩存的改進模型中,內存網格的內存客戶節點和提供其服務的內存服務節點比例為1:n。因此我們采用了基數樹和LRU鏈相結合的方式來解決查找和定位的問題,基數樹用于解決緩存數據的定位問題而存在于內存客戶節點中,LRU鏈用于對緩存數據的更新和替換存在于內存服務節點中。
在RAM Grid原型系統的最初設計過程中,為了簡化管理過程,我們規定一個內存客戶節點在某一時刻有且盡可能使用一個內存服務節點的服務。為了能夠對內存服務節點中的空閑內存資源進行有效管理,內存網格系統選擇在內存客戶節點中實現了緩存數據組織和管理模塊。緩存數據組織和管理模塊對緩存數據進行本地管理,管理信息包括內存客戶節點所使用的內存服務節點上數據頁幀的狀態信息、存儲位置等。為了能夠達到這些目標,我們改變了模型中的緩存方案,使用了基于LRU和Hash雙鏈的數據組織和管理方法。
LRU鏈和Hash鏈的雙鏈管理結構在操作系統設計中由來已久。在開源操作系統Linux的早期版本中,對于數據結構的管理與組織就大量的使用了這種經典的雙鏈結構。其中,LRU鏈主要對數據結構進行更新和替換:Hash鏈主要用于數據結構的快速查找和定位。通過雙鏈結構的管理和組織,當內存客戶節點通過本地文件系統進行磁盤10操作時,則可以利用遠地內存服務節點的內存來獲取數據,從而減小內存客戶節點磁盤開銷,提升系統性能。
(二)Cache一致性問題
在單處理器(uniprocessor)系統中,由于處理器與10子系統看到的內存視圖不同而產生了Cache一致性問題。這是因為10子系統直接讀寫的是內存區域:處理器
【探析內存網格關鍵技術】相關文章:
探析花椰菜制種過程中的關鍵技術03-18
探析“資本經營”03-19
事件營銷探析03-24
刑罰實現探析03-18
創業教育探析03-11
淺析水利工程管理與關鍵技術03-16
UMB系統物理層關鍵技術03-07
嵌入式系統中的內存壓縮技術03-18
解析基于ARM9的Linux內存映射03-07