清華課題 Octopus 源碼分析(三)
前言
由於項目工作的需要,我們團隊閱讀了清華在文件系統方面的一個比較新穎的工作:Octopus。Octopus是一個基於持久內存 NVM 和遠程直接內存訪問 RDMA 技術的分佈式內存文件系統。清華的陸游遊老師現已將代碼開源,可 點擊此處 閱讀。
這一工作中的是 ATC-17 (CCF A類),可 點擊此處 閱讀論文。
我們團隊希望通過學習清華的這個優秀的同行工作,來進一步開展自己對於分佈式持久內存文件系統的研究。關於論文的分析,雖然有做PPT給同伴們介紹過,但具體的博客分析可能會晚些才放上來。這一系列的內容主要是分析Octopus的源碼設計(少許會結合論文內容來講,希望有興趣的同學可以自己先讀一讀),總結Octopus的框架、結構、設計組件及代碼創新點等。
系列分析總共包括 個部分。第一部分是 論文摘要,相當於Octopus系統的一個簡介;第二部分是 設計框架,在這一部分我們會宏觀地介紹Octopus的組成體系及各部分的功能及相互間的聯繫;第三部分是 代碼分析,也是本博客的重中之重。在這一部分我們首先介紹頭文件體系(在include文件夾中),瞭解Octopus的存儲結構,表結構,主要數據結構,內存池劃分等等。接下來我們介紹方法實現代碼(在src文件夾中),我們會通過比對頭文件內的函數名稱來看每一個方法是採用何種方式實現,好處是什麼,取捨考慮是什麼。進一步地,我們會通過代碼文件間的依賴關係,函數依賴關係去深入探討Octopus的創新性、侷限性並留出進一步討論的空間。
論文摘要
(內容請見系列上一篇博客)
設計框架
(內容請見系列上一篇博客)
源碼分析
include 頭文件
(內容請見系列上一篇博客)
src 源文件
Octopus 源碼的源文件夾 src
目錄 下有 client
、net
、fs
、test
、tools
五個子目錄。我們不會每部分都介紹,在此先簡要概括每個目錄所涉及的主要功能。
client
- 接口某塊,包含客戶端連接、申請服務所涉及到的相關函數;fs
- 系統模塊,主要源代碼部分,包含存儲結構、文件系統接口、服務器建立與事務處理所涉及到的相關函數;net
- 通信模塊,主要包含共享持久內存、RDMA通信與服務器客戶端交互響應功能的實現;test
- 輔助模塊,用來幫助理解客戶端與服務器的交互過程,我們會在後文中利用到這一模塊中的調用過程;tools
- 輔助模塊,僅包含 debug 函數的實現。
我們將秉承從主體到次要的原則依次介紹各個模塊中的代碼部分。其中,fs
無疑是我們關心的重要部分,這一模塊強調了文件系統在每個機器上部署的存儲結構和文件系統接口;其次是 net
模塊,它是 RDMA 通信所需要理解的關鍵。通過學習這兩部分的代碼,我們將能夠對文件系統的整體性有一個更清晰的把握,對 RDMA 通信機制也有更深入的理解。
爲了閱讀體驗與寫作的連貫性,我打算將以下四部分的分析寫成三篇博客,還望讀者海涵。
fs 模塊
(內容請見系列下一章博客)
net 模塊
(內容請見系列下一章博客)
client 模塊
(內容請見系列下一章博客)
tools 模塊
(內容請見系列下一章博客)
文件依賴關係分析
(內容請見系列下一章博客)
函數依賴關係分析
(內容請見系列下一章博客)
典型工作流程
(內容請見系列下一章博客)