天天看點

混合易失和非易失主存的日志結構檔案系統NOVA[FAST'16]随筆一

前言

寫這篇博文的初衷是NOVA采用了Eurosys‘14文章system software for persistent memory相同的實驗平台PMEP(Persistent Memory Emulation Platform)。此篇文章主要基于混合易失/非易失記憶體主記憶體上的日志結構檔案系統,采用DRAM模拟的非易失記憶體PM(Persistent Memory),具有DAX(Direct Access)功能,可通過mmap直接将PM裝置映射到應用程式位址空間中。本篇文章是我今年四月份精讀過的一篇好文,是以想着要記錄點什麼,就寫篇博文聊表心意吧。

背景

非易失記憶體技術

當今新型的非易失記憶體技術如旋轉移力矩随機存取記憶體(STT-RAM)、相變存儲器(PCM)、 電阻式随機存儲器(RRAM)以及3D XPoint記憶體技術等,它們能夠提供快速、非易失并且是位元組尋址的記憶體。這些記憶體在記憶體層次中具有不同的優勢和弱勢,例如,STT-RAM的延遲能夠滿足或超過DRAM并且它可能最終作為處理器最後一級高速緩存使用,由于其大的單元尺寸限制了它的容量而不能夠替代DRAM;PCM和ReRAM比DRAM的密度更大,可能成為大的非易失主記憶體,然而由于它們的相對較長的延遲使它們不能夠完全替代DRAM成為主存。因特爾和美光公司主推的3D XPoint記憶體技術據說能夠提供比NAND Flash更高的性能高達1000倍。

非易失記憶體軟體的挑戰

NVMM(Non-Volatile Main Memory)技術給檔案系統設計者帶來了挑戰。最關鍵的關注點在于平衡記憶體性能和軟體開銷,強制更新的順序性以便確定一緻性并且提供原子性更新。

性能

在傳統的存儲系統中,低速儲存設備如磁盤的延遲占了通路延遲的主要部分,是以軟體效率不是關鍵的。然而對于快速的NVMM,軟體開銷很快地成為記憶體延遲的主導,這揮霍(squander)了NVMM能夠提供的性能。 由于NVMM記憶體提供低延遲并駐留在處理器記憶體總線上,軟體可以通過loads和stores來直接通路它們。當今基于NVMM的檔案系統通過使用直接通路(Direct Access,簡稱DAX)或原地執行(eXecute In Place,簡稱XIP)技術來繞過DRAM頁高速緩存(page cache)來直接地通路NVMM,避免了存儲棧中NVMM和DRAM間額外的拷貝。NOVA就是一個DAX檔案系統。

寫重排序(Write Reordering)

當今處理器和它們的高速緩存層次可能對更新操作進行重排序以便提升性能。現有的模型不能夠確定更新是否寫入NVMM,是以當系統斷電的時候會使得資料不一緻。那麼NVMM感覺的軟體通過明确地重新整理高速緩存(cache)并且發送記憶體障礙(memory barriers)以便確定寫順序性。x86體系結構提供clflush指令以便重新整理CPU cacheline,但是clflush是強一緻性的,重新整理成本很大并且clflush僅僅發送資料到記憶體控制器,并不保證資料到達非易失記憶體。因特爾mfence指令確定障礙前指令必須在障礙後的指令前完成。這并沒有限制資料寫回Memory的順序。是以Intel公司提出了新的指令來修補這些問題,這些新指令包括clflushopt(clflust的更高效版本),clwb(明确地寫回一個緩存行而不使之無效),以及PCOMMIT(使資料持久地存儲到非易失記憶體中)。

原子性

POSIX類型的檔案系統語義要求許多操作是原子性的,即要麼全部執行要不都不執行。例如該POSIX rename操作就是原子性的,而不能出現執行和不執行的中間狀态。重命名一個檔案是僅對中繼資料進行操作,但是某些原子更新同時操作檔案系統的中繼資料和資料。儲存設備典型地隻是提供初步的原子性保證,如磁盤提供原子的8位元組(或更小)的扇區寫。

複雜的原子操作

現有的檔案系統使用各種各樣的技術如journaling,shadow paging或log-structured技術來提供原子性保證。這些工作以不同的方式工作并招緻了不同的開銷。

journaling

Journaling又名寫優先日志(write-ahead logging)被廣泛地使用于journaling檔案系統中和資料庫中。一個journaling檔案系統記錄所有的更新到journal(一個固定大小的循環log)中,然後再将更新寫入檔案系統目标位置。在系統斷電時,通過重新執行journal以便恢複系統到一緻性狀态。但是Journaling需要寫兩遍資料:一個到log一個到目标位置。為了提高性能,journaling系統經常采用隻journal中繼資料的模式提升性能。目前工作提出了反向指針(back-pointer)和去耦合持久順序以便減少journaling的開銷。

Shadow paging

Shadow Paging屬寫時拷貝(Copy On Wrie,簡稱COW)機制。Shadow paging檔案系統主要依賴于它們的樹結構以便提供原子性。不是通過原地更新資料的方式,shadow paging通過寫一份受影響的頁的新的拷貝到儲存設備新的空閑空間中。就如我們用不同的PDF閱讀器打開同一個PDF時,讀取時它們共享同一份資料拷貝,隻有當某個閱讀器編輯修改後才會形成自己新的資料拷貝,即閱讀器會讓你在新的檔案夾位置儲存該PDF檔案。但是shadow paging會有一個問題,就是疊代更新的問題。

Log-structureing

日志結構檔案系統(LFS)原始地設計用于利用磁盤順序通路的高性能。LFS首先緩存随機小寫到記憶體,再将它們轉換成大的順序寫到磁盤中,大大提高了磁盤的寫性能。實作日志結構檔案系統複雜,原因是它需要順序地寫磁盤的連續空閑區域。日志清理增加了LFS的開銷并且降低了性能。研究表明,SSDs在順序工作負載中表現最佳。是以日志結構設計也适用于SSD。SFS、F2FS和RAMCloud均采用了日志結構存儲機制。NOVA也采用了日志結構方式。

NVMM檔案系統

混合易失和非易失主存的日志結構檔案系統NOVA[FAST'16]随筆一

如上圖所示,顯示了6種檔案系統在中繼資料、資料和mmap原子性的特性說明情況。BPFS是一個shadow paging檔案系統提供了中繼資料和資料的原子性。BPFS提出了硬體機制以便确儲存儲的持久性和順序性,并采用了short-circuit shadow paging(SCSP)減少了shadow paging的開銷。PMFS是一個輕量級的DAX檔案系統繞過塊層和檔案系統頁高速緩存(page cache)以便提高性能。PMFS使用journaling來保證中繼資料的更新,是以中繼資料原子性得到了保證。Ext4-DAX使用DAX功能擴充Ext4檔案系統來直接通路NVMM,并且使用journaling技術保證中繼資料更新的原子性。SCMFS使用作業系統虛拟記憶體管理子產品并且映射檔案到大量連續的虛拟位址區域,使得檔案通路簡單,但它不提供任何中繼資料和資料的原子性保證。Aerie在使用者空間實作了檔案系統接口和功能以便提供NVMM資料的低延遲通路。而Aerie隻journal 中繼資料而不提供資料或mmap的操作的原子性。NOVA是一個日志結構、POSIX混合易失和非易失記憶體檔案系統,提供上述三種操作的原子性保證。

NOVA概述

NOVA是一個基于混合易失和非易失記憶體的日志結構、POSIX檔案系統,它擴充LFS并充分利用NVMM的優勢。設計NOVA基于以下三個觀察。第一,日志支援原子更新容易在NVMM上實作,但是對于查找操作不高效;第二,日志清理的複雜性主要來自需要提供連續空閑的存儲空間,但是在NVMM中沒有必要,因為NVMM中随機通路是便宜的;第三,對于磁盤而言,使用單個日志使合理的,但是這個限制了并發性。由于NVMMs支援快速高并發随機通路,使用多個日志并不影響性能。

是以NOVA儲存日志和檔案資料到NVMM中,并且通過在DRAM中建構radix樹結構儲存索引以便加速查找操作。NOVA中每個索引結點(inode)均有自己的日志(log),允許跨檔案并發更新并且無需同步化操作。該結構使得檔案通路高并發,并且在故障恢複期間,可以同時重新執行多個日志。NOVA使用logging和輕量級的journaling來執行複雜的原子更新。為了原子地寫資料到一個log,NOVA首先将資料追加到log,然後原子地更新該log tail指針以便送出該更新,這避免了journaling檔案系統的雙倍寫開銷以及shadow paging系統的疊代更新問題。因為NVMM支援快速并發随機通路,是以采用連結清單機制是可行的。是以NOVA使用4KB NVMM 頁的單連結清單實作索引結點log。

NOVA采用非順序日志(non-sequential log)存儲,提供如下三個好處:

  1. 配置設定日志空間容易,原因是不需要配置設定大量的連續區域用于log;
  2. NOVA可以執行細粒度,頁大小粒度的日志清理;
  3. 回收僅包含過時條目的日志頁隻需要幾個指針配置設定。

NOVA中索引節點的日志不包含檔案資料,相反NOVA采用寫時複制技術用于修改頁面(modified pages),結合追加中繼資料的寫到日志(log)中。對于檔案資料,采用寫時複制(COW)原因如下:

  1. 這樣日志可以更短,進而加快恢複過程;
  2. 使得垃圾回收更簡單和高效,因為NOVA從不從日志中拷貝檔案資料以便回收日志頁(log page);
  3. 回收過時頁以及配置設定新的資料頁均是簡單的,因為隻需要從DRAM空閑清單(free lists)中添加和移除頁;
  4. 能夠立刻回收過時的資料頁,即使是在高的寫負載和高NVMM使用情況下。

NOVA實作

設計混合易失和非易失記憶體檔案系統時,Jian Xu和Steven Swanson等人面臨的挑戰如下:

  1. 實作硬體潛在的性能;
  2. 寫重新排序和一緻性的影響;
  3. 提供原子性操作。

NVMM資料結構和空間管理

混合易失和非易失主存的日志結構檔案系統NOVA[FAST'16]随筆一

如上圖1所示是NOVA資料結構布局。NOVA将NVMM分成四個部分:超級塊(superblock)和恢複結點(recovery node),journals以及日志/資料頁(log/data pages)。該超級塊包含檔案系統的全局資訊,恢複結點存儲恢複資訊以便加速NOVA在正常關機情況下的重新挂載(remount),索引節點表(inode tables)包含索引節點,journals提供目錄操作的原子性并且剩餘區域包含NVMM日志和資料頁。為了獲得好的擴充性,NOVA在每個CPU中保持一個索引結點表、journal和NVMM空閑頁清單(free page list)以避免全局鎖和擴充性瓶頸。

後續随筆二

NOVA: A Log-structured File System for Hybrid Volatile/Non-volatile Main Memories[FAST’16],Jian Xu and Steven Swanson.

NOVA: A Log-structured File System for Hybrid Volatile/Non-volatile Main Memories[slides]

NOVA: A Log-structured file system for hybrid volatile/non-volatile main memories – Xu & Swanson 2016

繼續閱讀