本文發表于FAST 2022,探討日志結構文件系統層面的事務支持。本文主要對F2FS進行了支持事務的修改,實現了支持ACID事務特性的文件系統層面支持。本文通過實驗測試了SQLite和ROCKSDB在支持事務的日志結構文件系統上的運行效率,結果顯示本文實現的事務支持可以簡化應用編程復雜度,顯著提高應用性能。
01背景及動機
目前的應用程序在運行涉及多個文件修改的事務時對于系統的沖突一致性有很高的要求。但是由于在文件系統層面的事務支持的缺失,現在的應用必須在上層使用復雜的協議來保證事務在涉及多個文件的更新操作時的一致性,從而引入了更多的寫請求和同步命令,對于應用的運行性能會造成很大影響。
當前的事務支持非常有限,部分解決方案只能滿足事務ACID(原子性、一致性、孤立性、持久性)的部分特性,一些方法以犧牲應用性能為代價來支持事務的全部特性,還有一些方案依賴硬件上的配合來實現事務的支持,因此本文想要實現一種不對性能產生影響,也不需要底層硬件配合的操作系統層面的事務支持。
02exF2FS的設計及實現
本文定義了事務性日志結構文件系統應該滿足的三條限制并在F2FS中進行了逐個實現:
1. Membership-Oriented Transaction
a)功能解釋:文件系統支持每個事務可以涉及多個文件的修改,而不局限于在一個事務中只能進行一個事務的修改。
b)實現方法:在內核中新定義一個事務文件組的對象,對一個事務涉及的所有文件和臟頁進行管理,具體架構如下圖所示
新定義了一個內核實體:事務文件組,包含一個事務涉及的所有需要修改的文件、需要寫回的臟頁(數據頁+結點頁),用于優化頁面寫回和垃圾回收的塊重定位記錄的鏈表和用于事務持久化的主提交塊。
exF2FS通過事務文件組這個對象,應用可以指定需要包含在一個事務中的文件,從而支持可以涉及多個文件的修改的事務。
2. Stealing enabled Transaction
a)功能解釋:允許未提交事務的臟頁的寫回,可以用比較小的內存占用實現涉及數據量比較大的事務。
b)實現方法:
i.延遲被寫回的頁面的非法化,防止垃圾回收將舊位置的數據刪除;
ii.將涉及未提交事務的節點頁保留在內存中,進行標記防止檢查點在事務提交之前將其持久化。
3. Shadow Garbage Collection
a)功能解釋:垃圾回收模塊可以透明地遷移選中的回收塊,對進行中的事務不會造成任何影響。
b)實現方法:保留一塊專門的頁緩存區域用于與事務相關的頁面的垃圾回收,同時針對選中的被回收塊類型的不同采用不同的回收策略。
03實驗評估
1. 設備IO請求次數的減少
從實驗結果可以看出,原始的F2FS支持的SQLite事務在進行執行三條插入操作的事務時會引入32次寫請求和15次的同步請求,整個事務的執行時間需要耗時55ms;而對于優化后的exF2FS,其產生的寫請求只有三次,且事務的執行時間縮短到了1.6ms,在執行時間和請求次數的減少上體現出了很明顯的優化效果。
2. 吞吐量的提升
以執行插入操作為例,exF2FS的事務執行的吞吐量可以達到原始F2FS在持久化日志模式(圖中F2FS PERSISTENT)下的24倍。
3. 每個事務產生的寫量的減少
在全部的六種事務支持方法中,exF2FS產生了最少的總寫量,與原始F2FS在持久化日志模式的事務支持相比,exF2FS的多文件事務的寫量可以減少5/6.
04總結
這項工作成功地解決了日志結構文件系統中事務支持的三個主要問題:多文件支持、內存占用的節省和透明垃圾回收。使用本文提出的事務日志結構文件系統,我們可以大大簡化應用程序編程,并可以在包括 SQLite、RocksDB 和應用程序安裝在內的許多流行應用程序中顯著提高應用程序性能。
審核編輯:湯梓紅
-
文件系統
+關注
關注
0文章
287瀏覽量
19937 -
應用程序
+關注
關注
38文章
3292瀏覽量
57844 -
日志
+關注
關注
0文章
138瀏覽量
10666 -
SQlite
+關注
關注
0文章
78瀏覽量
15983
原文標題:聊聊日志結構文件系統層面的事務支持
文章出處:【微信號:SSDFans,微信公眾號:SSDFans】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論