天天看點

SoupFS 論文閱讀

IPADS 17年的工作:Soft Updates Made Simple and Fast on Non-volatile Memory 閱讀筆記

SoupFS notes

題目:Soft Updates Made Simple and Fast on Non-volatile Memory

keyWords: soft updates, dual views

soft updates 避免了同步的metadate重新整理,但是這樣不保證cache的一緻性。

dual views 在不同的視圖中共享相同的資料,但是使用不同的指針,保證cache一緻性以及可用性。

Soft Updates

Soft Updates meets disk

作用:使用對metadata更新的延遲寫,在meatdata的更新中,跟蹤每個pointer在記憶體中的依賴,并且在寫回disk的時候把這些依賴關系維護起來。

缺點:複雜。

本文認為,複雜度主要來自:

  1. 依賴關系更新的粒度(pointer maybe byte)與磁盤更新的粒度 (block) 不比對。
  2. 延遲寫增加了依賴關系的複雜程度。

soft updates meets nvm

nvm 特性(低延遲,位元組尋址)的優點:

  1. 消除false sharing(soft updates的概念)
  2. 避免循環依賴以及複雜的roll forward/back 操作
  3. 在目錄組織裡面使用hash表簡化檔案系統操作的依賴
  4. remove page cache and disk scheduler(分層結構簡化了,是以依賴關系也簡化了。)
  5. in-place writes 來簡化依賴關系

總的來說,就是nvm的位元組尋址特性以及低延遲,來簡化dependency tracking。

雖然但是,因為page cache被去掉了,是以cache的更新是直接寫到nvm中的。因為之前的cpu cache更新會更新到page cache裡,之後從page cache再同步到disk中,但是現在的情況是去掉了page cache,而且cpu cache是硬體管理的,檔案系統無權過問,是以,對cpu cache的一緻性我們無法保證。

傳統的處理方法是使用logging或者shadow paging,而nvm檔案系統則應更傾向于及時重新整理關鍵的metadata,防止cache line以錯誤的順序換出造成資料錯誤,這就需要一些高性能的cpu指令支援(clflush,clflush+sfence),增加了一些關鍵路徑的延遲。

為了防止cache line的錯誤換出(without page cache and cache flush operations),提出了dual views的機制。一個latest view,一個consistent view。

latest view中即使發生cache line的換出,也不影響consistent view,consistent view中的資料是持久的。latest 到 consistent的持久化通過持久化程序persister來做(using clflushopt+sfence),這樣的好處是持久化不在關鍵路徑上,syscall的延遲不會受到影響。具體實作方式後文詳述。

總結

使用nvm來實作soft updates時,關鍵在于簡化dependency tracking,page cache的去除有效的提升了性能,但是也引入了cache一緻性的問題。

Analysis: soft updates in nvm

filesystem based nvm need to redesign

一些nvm的redesign要點:

  1. 更小的原子寫機關(one cache line size vs. disk block)
  2. 硬體控制的更新順序:主要是CPU cache是硬體控制的,非預期的換出行為可能會影響sfence、mfence等指令控制的順序。是以使用clflushopt指令與sfence、mfence指令進行配合,因為clflush是同步重新整理的,clflushopt是異步重新整理的。此時我們發現syscall的關鍵路徑上需要來flush,增加了延遲。
  3. software efficiency:cache line重新整理的成本會很高,是以需要盡可能避免其成為瓶頸。

cost of consistency

一緻性的問題之前是使用journaling處理的,這樣會帶來大量的clflush,增加開銷。

soft updates

soft updates 雖然提供了crash consistency,但是在傳統的disk上相當複雜:

  1. block-oriented directory 使得依賴關系變得複雜(比如很多個dentry在一個block中,這就需要允許循環依賴的存在,就必須要通過roll-back或者roll-forward來解決)。
  2. 延遲寫,與同步寫入相比,異步磁盤寫入(延遲寫)将吞吐量提高了兩倍,但soft updates必須跟蹤延遲操作的狀态,來保持完整性和安全性。
  3. roll-back/roll-forward 增加複雜度。

dependency tracking and dual views

(待續)

相關資料以及後續閱讀

soft updates相關論文