牛德姣 賀慶建 蔡 濤 王 杰 詹永照 梁 軍
(江蘇大學計算機科學與通信工程學院 江蘇鎮江 212013)(djniu@ujs.edu.cn)
計算機系統中各部件的發展具有很大的不均衡,當前存儲部件的讀寫速度遠低于計算部件的處理能力,這導致了嚴重的存儲墻問題[1].由于存在機械部件,傳統的磁盤很難有效提高讀寫速度.基于Flash的固態存儲設備具有較高的I/O性能,但存在寫壽命短和僅支持以塊為單位的讀寫操作等問題.當前出現了一系列NVM存儲器件,如PCM[2],STT-RAM[3]和RRAM[4]等,具有支持以字節為單位的讀寫、較長的寫壽命、低功耗和接近DRAM的讀寫速度等優勢,成為解決存儲墻問題的重要手段;同時NVM存儲器件的寫壽命和讀寫速度也還在不斷提高.此外3D XPoint等技術的出現,使得用NVM改造現有基于Flash的固態存儲設備、構建新型的高速固態存儲系統成為當前研究的熱點.
但現有I/O系統軟件棧是面向低速外存系統所設計,難以適應高速固態存儲系統讀寫性能較高的特性,相關研究表明在新型固態存儲系統中I/O系統軟件的開銷占總開銷的63%以上[5],因此如何提高I/O系統軟件的效率是固態存儲系統中需要解決的重要問題.PCIe固態存儲設備是當前構建高速固態存儲系統的重要基礎,但其具有較大的局限性;為了獲得較高的傳輸效率PCIe接口以支持塊訪問方式為主,雖然可以改變每次傳輸的大小,但效率和靈活性還較低.當前操作系統還是使用塊接口訪問PCIe固態存儲設備,無法利用內部NVM存儲器件支持字節粒度讀寫的特點;在執行寫操作時,以數據塊為單位的方式存在寫放大的問題,嚴重影響了固態存儲系統的讀寫性能和使用壽命;在執行讀操作時,以數據塊為單位讀出的數據能用于基于局部性原理構建的讀緩存,從而提高訪問存儲設備時的讀性能,同時讀操作對固態存儲系統的壽命也沒有影響.因此有必要針對分析讀寫操作的不同特性,研究管理粒度和方式不同的讀寫操作接口,用于構建高效的固態存儲系統.
我們設計具有非對稱接口的固態存儲系統,以提高I/O性能和延長其使用壽命.本文的主要貢獻有4個方面:
1) 針對讀寫操作的不同特性,分離文件系統所提交的讀寫訪問請求,有效利用固態存儲系統內部支持字節讀寫的特性.
2) 設計了多粒度的固態存儲系統映射算法,修改通用塊層的結構,為解決寫放大問題提供支撐.
3) 設計了動態粒度寫算法,避免寫放大問題,提高固態存儲系統的寫性能和延長其使用壽命.
4) 實現了一個具有非對稱接口固態存儲系統的原型(APMSS),使用Fio和Filebench進行了測試,驗證了APMSS具有更高的寫性能.
當前的研究主要集中在使用NVM提高存儲系統的性能和針對固態存儲系統的新型文件系統方面.
BPFS[6]和PMFS[7]是針對字節尋址的NVM存儲設備的新型文件系統,提高I/O性能,降低讀寫延遲.BPFS使用短周期的影子分頁法實現8 b的原子寫操作和以及更細粒度的更新操作,并實現了硬件上寫操作的原子性和順序性.PMFS分離了元數據和數據的一致性保護方法,使用細粒度日志保護元數據的一致性;同時使用CoW策略實現數據寫操作,保護文件系統的可靠性和一致性.文獻[8]設計了SCMFS,使用操作系統的MMU管理NVM存儲設備中的數據塊,同時使用連續虛擬內存空間管理單位文件簡化讀寫操作;并使用clflush/mfence機制保障執行文件訪問操作的順序,但沒有給出如何保障文件系統的一致性.文獻[9]設計了Aerie,通過直接讓用戶態程序訪問NVM存儲設備中的數據,避免現有I/O系統軟件棧需要進行內核和用戶態切換的時間開銷,同時也提供了POSIX接口以支持現有應用;同時使用Mnemosyne[10]中的tornbit RAWL策略,保護文件系統的一致性.PMFS分離了元數據和數據的一致性保護方法,使用細粒度日志保護元數據的一致性;同時使用CoW策略實現數據寫操作,保護文件系統的可靠性和一致性.文獻[11]針對現有以數據塊為單位的寫操作機制中,存在寫少量數據需先完成冗余讀操作的問題,修改虛擬文件系統設計了非數據塊粒度的寫機制,應用于磁盤能提高7~45.5倍的寫性能,應用于基于Flash的SSD能提高2.1~4.2倍的寫性能.NOVA是針對DRAM和NVM混合情況的日志文件系統[12],通過為每個inode節點維護一個日志提高并發性和用原子更新實現日志的追加等,在保護文件系統的一致性和操作原子性的同時,能相比現有具有一致性保護的文件系統能提高3.1~13.5倍的性能.FCFS是針對NVM的新型文件系統[13],設計了多層次的混合粒度日志,針對元數據和數據分別使用redo和undo策略,針對應用的選擇性并發檢查點機制減少了需保存的數據量,使得上層應用的性能提高了近1倍.HMVFS是針對DRAM和NVM混合情況設計的多版本文件系統[14],通過輕量級的快照技術保護文件系統的一致性,使用內存中的Stratified File System Tree (SFST)保護多個快照之間的一致性,相比BTRFS和NILFS2能有效減少快照所需的開銷.HINFS是面向NVM設計的高性能文件系統[15],給出了針對NVM主存的寫緩存機制、以及DRAM中索引與緩存行中位圖相結合的讀一致性機制,并設計了基于緩存貢獻模型的NVM主存寫機制.文獻[16]針對事務內存設計了模糊持久性策略,通過基于日志的執行和易失性的檢查點機制,減少了實現事務機制的開銷,能提高56.3%~143.7%的文件系統I/O性能.SIMFS[17]是一種能利用虛擬內存管理機制的內存文件系統,每個被訪問的文件都擁有一個獨立的連續虛擬地址空間,數據地址空間的連續性可以支持高速的順序訪問,而且獨立空間的劃分方式可以避免文件訪問中的地址沖突問題,同時SIMFS還使用層級結構的文件頁表(file page table)技術來組織文件數據,從而保證了SIMFS可以使內存帶寬接近飽和.文獻[18]在NOVA的基礎上設計了NOVA-Fortis,提高NVM文件系統容忍存儲器件錯誤和軟件系統bug的能力,相比現有沒有容錯功能的DAX文件系統能提高1.5倍的讀寫性能,相比基于塊的文件系統能提高3倍的讀寫性能.DevFS通過將文件系統嵌入到NVM存儲設備中,能提高NVM存儲設備2倍的吞吐率[19].
文獻[20]分析了使用不同控制方式訪問PCM存儲設備時的效率,發現使用輪詢和同步讀寫策略、相比使用中斷和異步讀寫策略能有效減少訪問PCM存儲設備時的I/O軟件棧開銷.文獻[21]驗證了在讀PCM存儲設備中的數據時,使用輪詢能減少接口數據在用戶態與內核態之間切換的開銷,提高讀性能.文獻[22]和文獻[23]設計了基于硬件的元數據和數據訪問路徑分離的方式,在用戶態直接訪問NVM存儲設備中的數據,減少元數據的修改次數,提高訪問NVM存儲設備的I/O性能.BPFS[6]拋棄塊設備接口,在用戶態使用load和store指令直接訪問DIMM接口的NVM存儲設備,構建了一個全新的存儲系統I/O軟件棧.Mnemosyne是針對DIMM接口NVM存儲設備設計的輕量級訪問接口[10],實現了在用戶態空間中管理NVM存儲空間和保護文件系統一致性等問題.NVTM是一個面向NVM的事務訪問接口[24],將非易失存儲器直接映射到應用程序的地址空間,允許易失和非易失數據結構在程序中的無縫交互,從而在讀寫操作中避免操作系統的介入,提高數據訪問性能.NV-heaps是針對NVM存儲設備的一個輕量級的高性能對象存儲系統[25],減少存儲系統軟件棧的開銷,相比BerkeleyDB和Stasis能提高32倍和244倍的執行速度.文獻[26]針對使用NVM存儲設備構建SCM時,塊訪問接口無法附加優化存儲系統性能信息的問題,設計了基于對象的SCM;文獻[27]針對SCM,設計了一種新型的控制器和相應的函數庫,通過操作之間的解耦合,減少存儲系統軟件棧的開銷,并支持并發的原子操作;文獻[28]在分析不同事務之間關聯性的基礎上,設計了DCT減少事務提交順序之間的影響,并提高事務的執行效率;文獻[29]在ISA的基礎上,從程序執行路徑中移除日志操作,使用動態標簽減少移動日志數據的開銷,借助硬件減少日志管理的開銷,從而高效的實現訪問NVM時操作的原子性;文獻[30]設計了Stampede開發套件,能提高應用訪問硬事務內存(HTM)和軟事務內存(STM)時的性能,同時簡化了STM的設計,使得Blue Gene/Q 上64線程和Intel Westmere上32線程的性能分別提高了17.7倍和13.2倍.Path hashing能避免對NVM的額外寫操作,提高執行速度,減少所使用的NVM存儲空間[31];文獻[32]針對PCM設計了基于頁的高效管理方式,適應上層應用的訪問方式,首先使用雙向鏈表管理PCM中的頁,再使用DRAM構建了PCM頁的緩存并設計了基于進入時間的淘汰算法,最后綜合頁遷移和交換信息優化了PCM中頁的分配;文獻[33]混合使用SSD和磁盤設計了I-CASH,利用SSD提供高速隨機讀性能,利用處理器中多個計算核心的強大計算能力和磁盤構建SSD中數據的日志,減少對SSD的隨機寫操作,在延長SSD使用壽命的同時,提高隨機寫的性能.
本文設計了具有非對稱接口的固態存儲系統,將讀寫訪問請求進行分離,并針對讀寫訪問請求的不同特性設計了相應的管理算法和多粒度的固態存儲系統映射算法,從而能降低固態存儲系統寫放大問題,有效利用固態存儲系統內部支持字節讀寫的特性,提高固態存儲系統的寫性能和延長其使用壽命.
數據塊是傳統磁盤的數據組織和管理單位,現有的存儲系統I/O軟件棧在訪問存儲設備時也是以數據塊為基本單位.這使得在訪問塊接口固態存儲系統時無法利用NVM存儲器件支持字節讀寫的特性,也沒有利用PCIe接口能動態調整數據傳輸粒度的優勢.在執行寫操作時,存在嚴重寫放大問題,同時還會嚴重影響固態存儲系統的使用壽命,降低了塊接口固態存儲系統的I/O性能.而讀操作不會影響固態存儲系統的壽命,較大粒度的讀操作也有利于實現數據的預取,提高讀操作的性能;同時較大的讀粒度也能減少讀操作的數量,降低存儲系統軟件棧的開銷.
我們給出具有非對稱接口固態存儲系統的結構,如圖1所示.包括位于驅動層中的動態粒度寫模塊和面向緩存的讀模塊,以及位于通用塊層中的多粒度映射模塊等主要部分,同時去掉了寫緩存,將存儲設備和文件系統之間的緩存僅僅作為讀緩存.多粒度映射模塊用于在文件系統寫固態存儲系統前獲得實際寫數據的地址和大小等信息,從而動態改變PCIe接口的傳輸量;訪問請求分析器實現對文件系統訪問請求的分析,將讀和寫訪問請求分解到對應模塊執行;動態粒度寫模塊依據實際寫數據的大小,在固態存儲系統內部以字節為最小粒度執行寫操作,避免寫放大問題;面向緩存讀模塊負責以數據塊為單位讀取NVM存儲器件中保存的數據,并反饋給文件系統.

Fig.1 Structure of new solid storage system with asymmetric interface圖1 具有非對稱接口固態存儲系統的結構
固態存儲系統的寫操作會消耗存儲器件的使用壽命,因此如何減少寫入固體存儲系統的數據量是一個重要問題.
在現有的存儲系統寫機制中,文件系統首先使用塊粒度組織需要寫入固態存儲系統的數據,再通過以塊為單位的映射表查找寫入存儲系統的地址,最后以塊為單位向存儲系統傳輸并寫入數據.當僅需要向固態存儲系統寫入少量數據時,存在較嚴重的寫放大問題,在影響固體存儲系統使用壽命的同時,還會因為無效寫操作影響寫性能.
我們從改變寫算法和映射算法兩方面入手,設計固態存儲系統的最小化直接寫機制.
對文件系統的寫訪問請求,我們以其實際寫數據量為基礎,動態調整寫入固態存儲系統的數據量,避免寫放大的問題.
定義write_pos∈N表示寫入數據的起始地址,當write_pos=-1時表示不啟用動態粒度寫算法.
定義write_len∈N表示寫入數據的長度.
如圖2所示,當寫入數據量小于系統數據塊大小時,首先在文件系統層中獲取寫入數據塊中的write_pos和write_len,根據write_len設置PCIe傳輸的數據量,僅將寫入數據、write_pos和write_len傳輸給固態存儲系統,最后根據write_pos和write_len將數據包寫入NVM存儲器件的相應位置.
如圖3所示,當寫入數據量大于系統數據塊大小時,同樣首先在文件系統層中獲取寫入數據塊的地址和大小,接著按照最大為系統數據塊大小將寫入數據分成若干個數據包,并以實際大小構建最后一個數據包;若數據包的大小等于數據塊,則設置write_pos=-1,采用現有塊為單位傳輸方式,并由固態存儲系統將數據包作為一個數據塊寫入設備;若數據包小于數據塊的大小,則從該數據包中獲取write_pos和write_len的信息,設置PCIe接口的傳輸數據量、并發送數據包、write_pos和write_len,最后固態存儲系統根據write_pos和write_len將數據包寫入相應位置.

Fig.2 The write process with actually written data less than size of data block圖2 寫入數據量小于系統數據塊大小時的寫流程

Fig.3 The write process with actually written data larger than the size of data block圖3 寫入數據量大于系統數據塊大小時的寫流程
文件系統首先將寫入固態存儲系統的數據首先保存在內存中,通過內存與存儲系統之間的映射表,確定寫入存儲系統的地址和長度后再寫入存儲系統.現有的存儲系統映射表均是以數據塊為單位進行組織和管理,這使得內外存之間的數據交換只用以數據塊為單位.
我們設計多粒度的固態存儲系統映射表,在每個映射項內增加dirty_pos∈N和dirty_len∈N,保存內外存之間多粒度的映射信息.其中dirty_pos表示在該數據塊中需要更新到存儲系統數據區的起始地址,dirty_len表示該數據塊中需要更新到存儲系統數據區的長度.當dirty_pos=-1時,表示該數據塊不采用多粒度映射算法.
使用S∈N和L∈N分別表示要寫入數據起始邏輯地址與長度,針對每次寫操作使用3步驟修改固態存儲系統映射表,實現多粒度的內外存映射算法.
步驟1.依據S查找固態存儲系統映射表中所對應的映射項,如S與該映射項的起始地址相同且L的值與數據塊大小相同,則將該映射項的dirty_pos=-1,否則將S對應的物理地址保存到dirty_pos中.
步驟2.比較L的值是否超出了該映射項對應邏輯塊的長度,如未超出,則使用L設置dirty_len的值,并將L的值清零;否則依據數據塊大小和dirty_pos計算出dirty_len的值,并更新S和L.
步驟3.如果L=0則結束整個操作,否則回到步驟1繼續做.
圖4給出了一個涉及3個映射項的寫操作中計算每個映射項dirty_pos和dirty_len的情況.

Fig.4 Calculating dirty_pos and dirty_len in mapping table between memory and PCIe NVM Device圖4 固態存儲系統映射表中計算dirty_pos和dirty_len
通過多粒度固態存儲系統映射算法,在每個固態存儲系統映射項中標識實際需要寫入數據的起始地址和長度,使得動態粒度固態存儲系統寫算法能獲得實際需要寫入的數據塊信息,避免了文件系統與固態存儲系統之間只能以數據塊為單位交換數據的局限,為解決固態存儲系統的寫放大問題提供了支撐,從而提高固態存儲系統的使用壽命和寫性能.
讀操作不會影響固態存儲系統的壽命,同時較大的讀操作粒度能利用局部性原理實現數據的預取,通過構建讀緩存,提高讀操作的性能;此外I/O操作中的系統軟件開銷已經成為影響固態存儲系統讀寫性能的重要因素,同時NVM存儲器件的讀操作速度高于寫操作,因此在固態存儲系統的讀算法中減少讀次數,能有效降低存儲系統軟件棧的開銷.
我們以數據塊為單位執行固態存儲系統的讀操作,如圖5所示;首先由文件系統獲取讀操作所在的數據塊信息,并向固態存儲系統發出讀請求,固態存儲系統讀出數據后以塊為單位傳輸給文件系統.

Fig.5 The process of read strategy based on block圖5 基于塊讀機制的流程
以數據塊作為讀操作的單位,能與現有文件系統和緩存中數據的管理粒度保持一致,避免數據管理粒度轉換等額外I/O棧軟件開銷,提高讀操作的效率;同時文件系統與固態存儲系統之間,每次的傳輸單位均一致,避免了頻繁修改PCIe接口的參數,能減少了傳輸中的額外軟件開銷,提高讀操作的性能.
我們首先實現具有非對稱接口固態存儲系統的原型,再使用通用的測試工具進行測試,并加載不同的文件系統進行分析與比較.
我們在塊接口固態存儲系統PMBD[34]的基礎上實現APMSS的原型.在模擬NVM存儲器件時,使用PMBD的缺省配置,在DRAM的基礎上增加85 ns的讀延遲和500 ns的寫延遲模擬NVM介質;同時修改Linux內核,在內核地址的尾部預留10 GB內核空間作為PMBD的存儲地址空間.
此外我們修改Linux內核中通用設備層管理內外存映射結構buffer_head,增加dirty_pos和dirty_len兩個指針用于保存需要實際需要寫回存儲系統的數據位置和長度信息,并修改內外存映射的源代碼實現多粒度的固態存儲系統映射算法;再修改Linux內核中與設備驅動交互的bio結構,增加write_pos和write_len保存從buffer_head結構獲得的dirty_pos和dirty_len信息;最后修改PMBD的源代碼,將實際寫回數據的位置和長度信息傳遞到給固態存儲設備,增加動態粒度寫算法、基于數據塊的讀算法和讀寫請求區分器,從而在執行寫操作時利用NVM存儲器件字節尋址特性,僅寫入實際修改的數據;從而構建具有非對稱接口固態存儲系統的原型系統APMSS.
使用存儲系統通用測試工具Fio和Filebench測試APMSS原型的寫性能,測試環境的配置如表1所示.在測試時,所有的Ext4均使用DAX方式.

Table 1 The Configuration of Testing Environment表1 測試環境的配置
首先使用Ext4格式化APMSS,再應用Fio中Linux異步I/O引擎libaio,調整文件的大小分別為8 KB,32 KB,128 KB和512 KB,測試APMSS順序讀寫3萬個文件時的I/O性能,訪問塊大小設置為4 KB;并在PMBD上Ext4和Ext2執行相同測試,進行對比和分析.測試結果如圖6和圖7所示.

Fig.6 Sequential write performance with different size files圖6 順序寫性能的測試

Fig.7 Sequential read performance with different size files圖7 順序讀性能的測試
圖6是順序寫性能的測試結果,從圖6中可以看出:
1) 采用APMSS能有效提高Ext4的寫性能.當文件大小為128 KB時,相比PMBD寫性能提高了14%;同時還改變了Ext4寫性能低于Ext2的情況,相比Ext2 on PMBD寫性能提高了9.6%.這說明APMSS能針對固態存儲系統的特性,使用動態粒度寫算法通過僅僅寫入實際修改的數據,避免寫放大問題,提高寫性能.
2) 當單個文件大小增加后,寫相同數據量所需訪問文件的次數不斷下降,減少了讀寫文件元數據所需的時間開銷,使得寫速度不斷提高;在單個文件從8 KB增加到512 KB后,APMSS的寫性能提高了9倍多,而PMBD上的Ext4和Ext2僅增加了8.2倍和7.4倍,這表明APMSS相比現有塊接口固態存儲系統具有寫性能的優勢,同時能利用APMSS最小化寫機制和內部支持字節寫的特性減少讀寫文件元數據所需的時間開銷.
3) 在改變所寫文件大小時,APMSS上的Ext4的寫性能始終高于PMBD上的Ext4,同時所提高的寫性能絕對值隨著文件大小的增加而不斷提高,這和2)中類似,是由于減少了管理文件元數據的時間開銷,這也進一步表明APMSS最小化寫機制的有效性.在所寫文件的大小從8 KB增加到512 KB時,寫性能提高的速度呈現先增加后下降的趨勢,在文件大小為128 KB時達到最大值,這是由于文件元數據讀寫速度不斷提高并逐步接近文件系統處理文件元數據速度,消弱了文件寫性能的提高幅度,這也表明APMSS能減輕存儲系統所導致的計算機系統性能瓶頸.
圖7給出了順序讀的測試結果,從圖7中可以看出APMSS和PMBD上的Ext4具有相同的讀性能,這主要由于APMSS能利用非對稱接口區分讀寫操作,使用以數據塊為粒度的方法處理讀操作,避免在提高讀寫操作靈活性的同時對讀性能產生影響,驗證了APMSS具有良好的適應能力;同時可以發現對讀寫訪問請求進行區分、采用不同的管理機制所可能增加的額外管理開銷非常小,沒有發現對APMSS的讀性能照成影響.
使用3.2節中相同的測試工具和設置,測試APMSS,PMBD上Ext4和Ext2處理訪問請求的速度,測試結果如表2和表3所示.

Table 2 The IOPS of Sequential Write表2 順序寫時的訪問請求處理速度(IOPS)

Table 3 The IOPS of Sequential Read表3 順序讀時的訪問請求處理速度(IOPS)
從表2和表3的測試結果中可以看出:
1) 讀寫訪問請求處理速度的測試結果與I/O性能的測試結果類似.
2) 在執行寫操作時,APMSS上Ext4處理寫訪問請求的速度高于PMBD上Ext4和Ext2,特別是針對PMBD上Ext4具有較大的優勢,隨著文件大小的增加,APMSS上Ext4相比PMBD上Ext4所提高的IOPS越來越顯著,這驗證了APMSS最小化直接寫機制能有效避免寫放大的問題.
3) 在執行讀操作時,APMSS和PMBD上Ext4處理訪問請求的速度相同,這驗證了APMSS具有良好的適應能力,能區分讀寫操作,使用基于數據塊的方法完成讀訪問請求,有利于發揮固態存儲系統中讀緩存的作用;同時也表明區分讀寫訪問請求分別使用不同的管理策略可能增加的額外管理開銷非常小,對APMSS的執行讀操作時的IOPS沒有影響;因此這些結果表明,APMSS在提高寫訪問請求處理速度的同時保持讀訪問請求的處理效率.
同樣使用Ext4格式化APMSS,應用Fio中Linux異步I/O引擎libaio,改變文件系統中訪問塊的大小分別為4 KB,8 KB,16 KB和32 KB,測試APMSS順序讀寫3萬個512 KB文件時的I/O性能;并在PMBD上Ext4和Ext2執行相同測試,進行對比和分析.測試結果如圖8和圖9所示.

Fig.8 Sequential write performance with different block sizes圖8 設置不同大小訪問塊時的順序寫性能
從圖8中可以發現:
1) 隨著訪問塊的增加,APMSS相比PMBD提高寫性能的效果越來越明顯.
2) 當訪問塊大小為4 KB時,APMSS上Ext4相比PMBD上Ext4和Ext2能提高2%~4%的寫性能.
3) 當訪問塊大小為32 KB時,APMSS上Ext4的寫性能相比PMBD上Ext4提高了22%、相比PMBD上Ext2提高了20%.
4) 綜合2)和3)可以發現,當訪問塊增大后,單個訪問塊內實際需要寫入固態存儲系統數據所占的比重也隨之下降,使得PMBD上的寫放大問題越來越嚴重,對寫性能的影響也就越明顯;但同時APMSS中最小化直接寫機制的效果也就越顯著,使得APMSS在訪問塊較大時寫性能的優勢更加顯著.
5) 隨著訪問塊從4 KB增加到32 KB,寫3萬個512 KB文件所需寫訪問請求的數量逐漸下降,減少了I/O軟件棧的開銷,使得APMSS的寫性能提高了約1倍;而同時PMBD上的Ext4和Ext2僅提高了70%;這進一步說明APMSS相比現有的塊接口固態存儲系統具有寫性能的優勢.
此外使用相同的配置,改變文件系統中訪問塊的大小,測試順序讀3萬個512 KB文件的性能,結果如圖9所示:

Fig.9 Sequential read performance with different block sizes圖9 設置不同大小訪問塊時的順序讀性能
從圖9中的結果可知,APMSS和PMBD上的Ext4具有相同的讀性能,這驗證了APMSS在提高寫性能的同時,不會因為需要區分讀寫操作而影響其讀性能.
同樣使用Ext4格式化APMSS,應用Filebench來模擬應用服務器的訪問情況,選擇Copyfile,Webserver和Fileserver三種類型負載測試APMSS的I/O性能,設置文件大小為32 KB、文件數量為5萬個、訪問塊大小為4 KB,與PMBD上的Ext4進行比較,測試結果如圖10所示.

Fig.10 The I/O performance with different real workload圖10 不同真實負載下的I/O性能
Copyfile負載是模擬用戶復制文件目錄樹的行為,主要測試系統持續讀寫性能.在應用Copyfile負載時,從測試結果可以發現APMSS上的Ext4能提高6.37%的I/O性能.這主要因為APMSS優化了固態存儲系統的寫操作,按照實際數據量大小以字節為單位寫入固態存儲系統,避免了不必要的寫操作,提高了其上Ext4文件系統的寫性能.
Webserver負載是模擬用戶訪問Web服務器的負載,主要是文件的讀操作.在應用Webserver負載時,APMSS與PMBD上的Ext4的I/O性能基本相同.這主要由于APMSS能利用非對稱接口區分讀寫操作,在使用最小化直接寫機制的同時,仍然使用基于數據塊的方式完成讀訪問請求,從而保持了較高的讀性能,驗證了APMSS具有良好的適應性.
Fileserver負載是模擬文件服務器中文件的共享、讀寫操作等情況,在應用Fileserver負載時,APMSS上Ext4的I/O性能相比PMBD上的Ext4提高了28.4%.這主要是由于Fileserver負載中的每個訪問請求均包含一系列文件的open,write,append,read,close等操作,使得APMSS能發揮最小化直接寫機制在處理數據量較小的文件元數據讀寫時的優勢,有效解決寫放大問題,提高了應用的性能.
使用NVM存儲器件改造現有PCIe固態存儲設備是構建新型高速固態存儲系統的重要手段.固態存儲系統現有塊訪問方式有很大的局限,存在寫放大和無法利用NVM存儲器件支持字節讀寫特性等問題,但同時也有利于獲得較高的態存儲設備讀性能.我們針對固態存儲系統設計了最小化直接寫機制和基于塊的讀機制,區分讀、寫訪問操作;在處理寫訪問操作時,僅將修改的數據寫入固態存儲系統,避免寫放大問題,提高寫性能;同時仍然以塊為單位完成讀訪問操作,利用讀緩存獲得較高的讀性能.最后我們在開源的PMBD的基礎上,實現了具有非對稱接口新型固態存儲設系統的原型APMSS,使用存儲系統的通用測試工具Fio和Filebench進行測試,并于現有基于NVM的塊接口存儲系統PMBD上的不同文件系統進行比較,結果表明APMSS上的Ext4相比PMBD上的Ext2和Ext4能提高9.6%~29.8%的寫性能,從而驗證了所設計的算法能有效提高固態存儲系統的I/O性能.
當前我們還未利用固態存儲系統內部的并行性優化讀寫操作的執行效率,下一步我們將針對固態存儲系統的內部特性,進一步優化讀寫操作的性能.