• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      持久化內(nèi)存文件系統(tǒng)的磨損攻擊與防御機(jī)制*

      2020-09-23 07:33:10楊朝樹諸葛晴鳳沙行勉陳咸彰
      軟件學(xué)報(bào) 2020年6期
      關(guān)鍵詞:日志內(nèi)存磨損

      楊朝樹 , 諸葛晴鳳 , 沙行勉, , 陳咸彰,3 , 吳 林 , 吳 挺

      1(重慶大學(xué) 計(jì)算機(jī)學(xué)院,重慶 400044)2(華東師范大學(xué) 計(jì)算機(jī)科學(xué)與軟件工程學(xué)院,上海 200062)3(重慶大學(xué) 通信工程學(xué)院,重慶 400044)

      目前,處理器和存儲(chǔ)系統(tǒng)之間的數(shù)據(jù)I/O 是極為嚴(yán)重的性能瓶頸,導(dǎo)致計(jì)算機(jī)系統(tǒng)無法應(yīng)對(duì)上層應(yīng)用的強(qiáng)時(shí)效性和高可靠等存儲(chǔ)服務(wù)需求.新型非易失性存儲(chǔ)器(non-volatile memory,簡(jiǎn)稱NVM),如相變存儲(chǔ)器(phase change memory,簡(jiǎn)稱PCM)[1-4]和3D Xpoint[5]等,具有非易失性、低延遲、存儲(chǔ)密度高、抗震性好、低功耗和可按字節(jié)尋址等優(yōu)點(diǎn).表1 中PCM 的存儲(chǔ)密度是DRAM 的2 倍~4 倍,讀寫延遲比NAND Flash 低3 個(gè)和2 個(gè)數(shù)量級(jí),比HDD 分別低5 個(gè)和3 個(gè)數(shù)量級(jí).鑒于NVM 的優(yōu)良特性,取得了學(xué)術(shù)界和工業(yè)界的廣泛關(guān)注,被視為潛力巨大的新一代存儲(chǔ)設(shè)備.NVM 給現(xiàn)有的存儲(chǔ)系統(tǒng)的發(fā)展帶來了新的機(jī)遇,NVM 既可以作為內(nèi)存,也可以作為外存[3,6,7].近年出現(xiàn)諸多利用 NVM 作為內(nèi)存的新型持久化內(nèi)存文件系統(tǒng),例如 BPFS[8],PMFS[9],NOVA[10],SIMFS[11],SCMFS[12]和HiNFS[13]等.這類持久化內(nèi)存文件系統(tǒng)充分發(fā)揮NVM 的低延遲、可按字節(jié)尋址等優(yōu)點(diǎn),優(yōu)化文件系統(tǒng)的I/O 棧,使得文件訪問吞吐率達(dá)到GB/s 級(jí).

      Table 1 Comparison among DRAM,PCM,NAND Flash,and HDD[14]表1 比較DRAM,PCM,NAND Flash 和HDD[14]

      雖然NVM 擁有諸多優(yōu)點(diǎn),但是卻普遍具有一個(gè)重要的缺陷,即存儲(chǔ)單元的寫耐受度低[1-3,15-23].PCM 是代表性的NVM 存儲(chǔ)器,利用相變材料的晶態(tài)(低電阻,表示“1”)和非晶態(tài)(高電阻,表示“0”)所表現(xiàn)出來的導(dǎo)電性差異來存儲(chǔ)數(shù)據(jù).數(shù)據(jù)在0 與1 之間的改變需要向存儲(chǔ)單元加大電流,使其在晶態(tài)與非晶態(tài)之間轉(zhuǎn)變,導(dǎo)致存儲(chǔ)單元的磨損.所以PCM 存儲(chǔ)單元的寫耐受度有限,最大寫次數(shù)約為108[24-27],即PCM 相變材料在晶體和非晶體的轉(zhuǎn)變次數(shù)達(dá)到108時(shí),該存儲(chǔ)單元將變得不穩(wěn)定,被視為已損壞(即磨損穿).因此,病毒主要針對(duì)NVM 寫耐受度低的缺點(diǎn),通過持續(xù)修改NVM 某個(gè)存儲(chǔ)單元,最終損壞該存儲(chǔ)單元,導(dǎo)致數(shù)據(jù)出錯(cuò),進(jìn)而破壞整個(gè)存儲(chǔ)系統(tǒng)的可靠性.現(xiàn)有防御措施的主要思想是以空間換壽命,通過磨損均衡技術(shù)把針對(duì)少量存儲(chǔ)單元的大量寫操作分散到其他存儲(chǔ)空間,使得每個(gè)存儲(chǔ)單元的磨損度相對(duì)平均,從而避免被過度磨損.

      現(xiàn)階段學(xué)術(shù)界在兩個(gè)層面探索磨損均衡技術(shù):在硬件層面,典型的方法有 Start-Gap[28]和安全刷新算法(security refresh)[29],核心思想是通過在控制器動(dòng)態(tài)改變邏輯地址到物理地址的映射來實(shí)現(xiàn)磨損均衡,但是這些磨損均衡算法抗惡意攻擊的能力不強(qiáng),RTA(remapping timing attack)[30]等病毒程序可以迅速探測(cè)到映射的變化規(guī)律,進(jìn)而繼續(xù)對(duì)固定的物理存儲(chǔ)單元造成損傷;另一種是軟件層面,主要集中在操作系統(tǒng),通過動(dòng)態(tài)改變進(jìn)程的邏輯地址到物理地址的映射來實(shí)現(xiàn)磨損均衡.作為管理NVM 存儲(chǔ)設(shè)備的基本設(shè)施,目前的持久化內(nèi)存文件系統(tǒng)卻沒有防御針對(duì)NVM 的磨損攻擊.例如:SanGuo[31]提出一種考慮磨損度的空閑頁分配技術(shù),卻沒有系統(tǒng)性地保護(hù)既有文件數(shù)據(jù)和元數(shù)據(jù)的存儲(chǔ)單元;文獻(xiàn)[24]提出面向PCM 存儲(chǔ)系統(tǒng)的磨損均衡機(jī)制,但是不能充分抵御針對(duì)文件索引結(jié)構(gòu)等元數(shù)據(jù)和文件數(shù)據(jù)存儲(chǔ)區(qū)的磨損攻擊.病毒程序利用簡(jiǎn)單的文件操作,即可磨損穿現(xiàn)有持久化內(nèi)存文件系統(tǒng)的文件數(shù)據(jù)或元數(shù)據(jù)存儲(chǔ)區(qū),導(dǎo)致文件系統(tǒng)的數(shù)據(jù)錯(cuò)誤,嚴(yán)重破壞存儲(chǔ)系統(tǒng)的可靠性.

      為此,本文首次探索多種借助持久化內(nèi)存文件系統(tǒng)的文件操作對(duì)NVM 造成惡意磨損的攻擊方式.通過分析各種攻擊方式攻擊的數(shù)據(jù)結(jié)構(gòu),本文提出持久化內(nèi)存文件系統(tǒng)磨損防御技術(shù)(persistent in-memory file system wear defense technique,簡(jiǎn)稱PFWD)來保護(hù)NVM 的存儲(chǔ)單元.PFWD 技術(shù)包括4 個(gè)部分,分別是索引節(jié)點(diǎn)元數(shù)據(jù)虛擬化技術(shù)、超級(jí)塊遷移技術(shù)、文件數(shù)據(jù)頁磨損均衡技術(shù)和文件索引結(jié)構(gòu)遷移技術(shù).PFWD 的核心思想:對(duì)索引節(jié)點(diǎn)、超級(jí)塊、文件數(shù)據(jù)、文件索引結(jié)構(gòu)和日志的更新操作均勻分布到整個(gè)NVM 存儲(chǔ)空間.RTA 無法攻破本文提出的防御機(jī)制,因?yàn)镽TA 的有效攻擊需要滿足兩個(gè)必要條件:一是要探測(cè)到物理空間重映射后的地址;二是獲取寫該地址的權(quán)限.在本文提出的基于文件系統(tǒng)的PFWD 防御機(jī)制中,RTA 不具備這兩個(gè)條件,因?yàn)镻FWD 把達(dá)到磨損遷移條件的物理空間直接回收到空閑鏈表并防止立即重分配,其地址映射信息對(duì)上層應(yīng)用封閉,所以RTA 無法查知該物理空間的地址,也不能獲取其訪問權(quán)限.因此,本文將探討通過文件系統(tǒng)對(duì)NVM 存儲(chǔ)空間的磨損攻擊方式,并提出對(duì)應(yīng)的PFWD 防御技術(shù),實(shí)現(xiàn)NVM 存儲(chǔ)空間的磨損均衡.本文的主要貢獻(xiàn)如下.

      (1) 探索多種通過持久化內(nèi)存文件系統(tǒng)對(duì)NVM 造成磨損攻擊的病毒,分析病毒惡意磨損攻擊的嚴(yán)重性,并按攻擊的數(shù)據(jù)結(jié)構(gòu)分類病毒程序;

      (2) 提出索引節(jié)點(diǎn)元數(shù)據(jù)虛擬化技術(shù)防御病毒程序?qū)λ饕?jié)點(diǎn)存儲(chǔ)區(qū)的磨損攻擊.該技術(shù)可在系統(tǒng)運(yùn)行時(shí),把更新頻次高的索引節(jié)點(diǎn)動(dòng)態(tài)遷移到磨損度低的存儲(chǔ)區(qū),使得索引節(jié)點(diǎn)的大量更新操作分散到多個(gè)物理存儲(chǔ)區(qū),實(shí)現(xiàn)索引節(jié)點(diǎn)存儲(chǔ)區(qū)的磨損均衡,避免少數(shù)索引節(jié)點(diǎn)的存儲(chǔ)單元被磨損穿;

      (3) 提出超級(jí)塊遷移技術(shù),通過把超級(jí)塊遷移到磨損度低的存儲(chǔ)區(qū),使得對(duì)超級(jí)塊的大量更新操作分散到多個(gè)物理存儲(chǔ)區(qū),避免超級(jí)塊的存儲(chǔ)單元被磨損穿;

      (4) 提出文件數(shù)據(jù)頁磨損均衡技術(shù),結(jié)合持久化內(nèi)存文件系統(tǒng)必備的數(shù)據(jù)一致性機(jī)制,防御對(duì)文件數(shù)據(jù)和日志存儲(chǔ)單元的磨損攻擊.對(duì)文件進(jìn)行修改,總是獲取磨損度較低的空閑頁作為日志和文件數(shù)據(jù)的存儲(chǔ)區(qū),避免少數(shù)文件數(shù)據(jù)和日志的存儲(chǔ)單元被磨損穿;

      (5) 提出文件索引結(jié)構(gòu)遷移技術(shù),根據(jù)文件索引結(jié)構(gòu)物理空間的磨損程度,把更新頻次高的索引項(xiàng)遷移到磨損度低的物理頁,防止少數(shù)文件索引結(jié)構(gòu)的索引項(xiàng)的存儲(chǔ)單元被磨損穿;

      (6) 實(shí)驗(yàn)表明:在病毒程序的惡意磨損攻擊下,本文提出的PFWD 技術(shù)能將NVM 可容忍的總寫次數(shù)提高10 240 倍,而且該倍數(shù)隨著NVM 存儲(chǔ)空間的增大而增大.

      本文第1 節(jié)是本文的研究動(dòng)機(jī).第2 節(jié)探索通過文件操作攻擊NVM 的磨損攻擊.第3 節(jié)介紹本文提出的磨損攻擊防御機(jī)制.第4 節(jié)用實(shí)驗(yàn)驗(yàn)證提出的防御機(jī)制的有效性.第5 節(jié)總結(jié)全文.

      1 研究動(dòng)機(jī)

      持久化內(nèi)存文件系統(tǒng)包括兩類數(shù)據(jù),即元數(shù)據(jù)和文件數(shù)據(jù).元數(shù)據(jù)可分為超級(jí)塊、索引節(jié)點(diǎn)和文件索引結(jié)構(gòu),對(duì)大多數(shù)文件系統(tǒng)而言,還包括用于支持?jǐn)?shù)據(jù)一致性的日志.現(xiàn)有持久化內(nèi)存文件系統(tǒng)的設(shè)計(jì)沒有對(duì)文件數(shù)據(jù)和元數(shù)據(jù)實(shí)現(xiàn)磨損保護(hù),病毒程序可以輕易通過文件操作造成NVM 存儲(chǔ)設(shè)備的損壞.以下分析現(xiàn)有持久化內(nèi)存文件系統(tǒng)在磨損保護(hù)方面的設(shè)計(jì)缺陷:

      (1) 超級(jí)塊.保存文件系統(tǒng)的全局信息,如NVM 的空閑頁數(shù)和空閑索引節(jié)點(diǎn)數(shù)等,所以NVM 空間的分配和釋放、索引節(jié)點(diǎn)的申請(qǐng)和釋放都會(huì)修改超級(jí)塊,見表2,大量文件操作都需要更新超級(jí)塊,所以超級(jí)塊的更新頻次極高,但現(xiàn)有的持久化內(nèi)存文件系統(tǒng)都把超級(jí)塊保存在NVM 固定位置,不能移動(dòng),導(dǎo)致超級(jí)塊存儲(chǔ)區(qū)的磨損極為嚴(yán)重.

      Table 2 Common file operations表2 常用的文件操作

      (2) 索引節(jié)點(diǎn).保存文件的基本信息,如文件大小、文件數(shù)據(jù)的最后訪問時(shí)間(atime)、文件數(shù)據(jù)的最后修改時(shí)間(mtime)、索引節(jié)點(diǎn)的最后修改時(shí)間(ctime)、存儲(chǔ)文件數(shù)據(jù)的物理頁數(shù)、鏈接數(shù)等.文件的創(chuàng)建、打開、關(guān)閉、硬鏈接、軟鏈接等操作都會(huì)更新索引節(jié)點(diǎn).雖然現(xiàn)有的持久化內(nèi)存文件系統(tǒng)采用緩存機(jī)制[32]來減少更新NVM 中真實(shí)索引節(jié)點(diǎn)的寫次數(shù),但存儲(chǔ)文件數(shù)據(jù)的物理頁數(shù)、鏈接數(shù)、文件大小等重要信息都必須立即寫回NVM,以保證數(shù)據(jù)的一致性.現(xiàn)有的持久化內(nèi)存文件系統(tǒng)使用數(shù)組或者樹型結(jié)構(gòu)組織文件系統(tǒng)的索引節(jié)點(diǎn).NOVA[10],SIMFS[11]和SCMFS[12]采用數(shù)組結(jié)構(gòu)管理索引節(jié)點(diǎn),即在NVM 劃分一段連續(xù)的物理空間存儲(chǔ)所有的索引節(jié)點(diǎn); BPFS[8],PMFS[9]和HiNFS[13]采用樹形結(jié)構(gòu)管理索引節(jié)點(diǎn),即所有索引節(jié)點(diǎn)的物理存儲(chǔ)空間按段管理,因此,索引節(jié)點(diǎn)分散存放在NVM 的物理空間.無論采用那種數(shù)據(jù)結(jié)構(gòu)保存索引節(jié)點(diǎn),每個(gè)文件的索引節(jié)點(diǎn)在它的生命周期內(nèi)都存放在NVM 的固定位置,不能移動(dòng).如表2 所示,大量常用文件操作都需要更新索引節(jié)點(diǎn),所以索引節(jié)點(diǎn)存儲(chǔ)區(qū)的磨損極為嚴(yán)重.

      (3) 文件索引結(jié)構(gòu).更新文件索引結(jié)構(gòu)和數(shù)據(jù)一致性的實(shí)現(xiàn)機(jī)制有關(guān),文件系統(tǒng)的一致性主要分為元數(shù)據(jù)一致性和數(shù)據(jù)一致性.元數(shù)據(jù)一致性僅保證文件元數(shù)據(jù)能恢復(fù)到一致性狀態(tài);數(shù)據(jù)一致性同時(shí)保證文件元數(shù)據(jù)和文件數(shù)據(jù)恢復(fù)到一致性狀態(tài),因此數(shù)據(jù)一致性保證一致性的強(qiáng)度比文件元數(shù)據(jù)一致性高.文件系統(tǒng)主要采用預(yù)寫日志(write-ahead logging,簡(jiǎn)稱WAL)[33-35]和寫時(shí)復(fù)制(copy-on-write,簡(jiǎn)稱COW)[8,11]機(jī)制來實(shí)現(xiàn)數(shù)據(jù)一致性.采用預(yù)寫日志機(jī)制實(shí)現(xiàn)數(shù)據(jù)一致性,文件覆蓋寫是直接修改文件數(shù)據(jù)的原存儲(chǔ)位置,因此不涉及修改文件索引結(jié)構(gòu);采用寫時(shí)復(fù)制機(jī)制實(shí)現(xiàn)數(shù)據(jù)一致性,文件覆蓋寫是把數(shù)據(jù)寫到新的存儲(chǔ)位置,然后修改文件索引結(jié)構(gòu).預(yù)寫日志和寫時(shí)復(fù)制機(jī)制,文件執(zhí)行數(shù)據(jù)追加(append write)操作,都在文件索引結(jié)構(gòu)添加索引項(xiàng)(備注:如果文件最后的數(shù)據(jù)頁不能保存本次追加的數(shù)據(jù)).現(xiàn)有的持久化內(nèi)存文件系統(tǒng),例如 SIMFS[11]采用偽文件寫(pseudo-file write,簡(jiǎn)稱PFW),BPFS[8]采用短路影子分頁(short-circuit shadow paging,簡(jiǎn)稱SCSP),兩種都屬于寫時(shí)復(fù)制機(jī)制.NOVA[10]文件數(shù)據(jù)一致性采用寫時(shí)復(fù)制機(jī)制;Shortcut-JFS[16]采用自適應(yīng)日志(adaptive logging,簡(jiǎn)稱AL),即預(yù)寫日志結(jié)合寫時(shí)復(fù)制機(jī)制.AL 的核心思想是:如果單個(gè)數(shù)據(jù)頁上更新的數(shù)據(jù)量小于頁大小的一半,則采用預(yù)寫日志機(jī)制實(shí)現(xiàn)數(shù)據(jù)一致性;如果單個(gè)數(shù)據(jù)頁上更新的數(shù)據(jù)量大于或等于頁大小的一半,則采用寫時(shí)復(fù)制機(jī)制實(shí)現(xiàn)數(shù)據(jù)一致性.現(xiàn)有的持久化內(nèi)存文件系統(tǒng),如果采用寫時(shí)復(fù)制實(shí)現(xiàn)數(shù)據(jù)一致性,文件執(zhí)行覆蓋寫操作,需修改文件索引結(jié)構(gòu),每個(gè)文件的索引結(jié)構(gòu)在它的生命周期內(nèi)都存放在NVM 的固定位置,不能移動(dòng),如果持續(xù)修改文件某個(gè)區(qū)間的數(shù)據(jù),需頻繁修改文件索引結(jié)構(gòu),導(dǎo)致文件索引結(jié)構(gòu)的存儲(chǔ)區(qū)持續(xù)被磨損.

      (4) 文件數(shù)據(jù).更新文件數(shù)據(jù)和數(shù)據(jù)一致性實(shí)現(xiàn)機(jī)制有關(guān),如果持久化內(nèi)存文件系統(tǒng)采用預(yù)寫日志機(jī)制[33-35]實(shí)現(xiàn)數(shù)據(jù)一致性,文件覆蓋寫是直接就地更新文件數(shù)據(jù)的原存儲(chǔ)位置.現(xiàn)有的持久化內(nèi)存文件系統(tǒng),例如Shortcut-JFS[16],如果單個(gè)數(shù)據(jù)頁上更新的數(shù)據(jù)量小于頁大小的一半,則采用預(yù)寫日志機(jī)制實(shí)現(xiàn)數(shù)據(jù)一致性,持續(xù)修改文件的數(shù)據(jù)量小于頁大小一半時(shí),則被修改文件數(shù)據(jù)的存儲(chǔ)單元持續(xù)被磨損;PMFS[9]由于未實(shí)現(xiàn)數(shù)據(jù)一致性,僅支持元數(shù)據(jù)一致性,文件覆蓋寫是直接就地更新文件數(shù)據(jù)的原存儲(chǔ)位置,持續(xù)修改文件的固定區(qū)間的數(shù)據(jù),則被修改數(shù)據(jù)的存儲(chǔ)單元持續(xù)被磨損.

      (5) 日志.持久化內(nèi)存文件系統(tǒng)采用日志實(shí)現(xiàn)數(shù)據(jù)一致性.日志的存儲(chǔ)區(qū)可以是NVM 的一段連續(xù)的區(qū)域,例如PMFS[9]的日志保存在一段連續(xù)的存儲(chǔ)空間(PMFS-Log)中,持續(xù)地執(zhí)行基本的文件操作,就能寫穿PMFSLog 的存儲(chǔ)單元;日志的存儲(chǔ)區(qū)域也可以分散在整個(gè)NVM 存儲(chǔ)空間,例如,NOVA[10]為每個(gè)索引節(jié)點(diǎn)管理一個(gè)私有日志(日志結(jié)構(gòu)體),以下簡(jiǎn)稱索引節(jié)點(diǎn)私有日志,默認(rèn)大小是4KB,通過在索引節(jié)點(diǎn)私有日志中記錄索引節(jié)點(diǎn)修改信息實(shí)現(xiàn)元數(shù)據(jù)一致性,同時(shí),通過垃圾回收機(jī)制回收已提交的日志的存儲(chǔ)空間.針對(duì)通過修改多個(gè)索引節(jié)點(diǎn)的操作,例如rename,unlink 等,NOVA 為每個(gè)CPU 分配一個(gè)日志(journal)區(qū)間來保存索引節(jié)點(diǎn)的修改信息,以保證元數(shù)據(jù)一致性,日志存儲(chǔ)空間默認(rèn)大小是4KB,簡(jiǎn)稱索引節(jié)點(diǎn)公有日志.NOVA 的私有日志和公有日志保存在固定的存儲(chǔ)區(qū)間,因此,持續(xù)執(zhí)行簡(jiǎn)單的文件操作,就能把NOVA 的日志存儲(chǔ)區(qū)間磨損穿.無論采用何種方式組織日志,現(xiàn)有的持久化內(nèi)存文件系統(tǒng)都沒有考慮日志存儲(chǔ)區(qū)間的磨損均衡,如表2 所示,大多數(shù)文件操作都需要寫日志來確保文件的一致性,因此,日志的修改頻次極高,所以日志存儲(chǔ)區(qū)的磨損極為嚴(yán)重.

      文件更新操作都會(huì)涉及到修改元數(shù)據(jù)或者文件數(shù)據(jù),表2 展示了常用的文件操作對(duì)元數(shù)據(jù)和文件數(shù)據(jù)的更新情況.例如文件更新操作(write)需要修改索引節(jié)點(diǎn)的文件數(shù)據(jù)的最后修改時(shí)間,如果文件更新操作涉及到申請(qǐng)新的物理頁,則需要修改超級(jí)塊的空閑頁數(shù)和修改文件索引結(jié)構(gòu)的索引項(xiàng).為了保證本次修改的數(shù)據(jù)一致性,需要寫日志.所以文件更新操作需要修改超級(jí)塊、索引節(jié)點(diǎn)、文件索引結(jié)構(gòu)、文件數(shù)據(jù)和日志.

      由以上可知:每個(gè)文件的元數(shù)據(jù)在它的生命周期都存放在NVM 的固定位置,都不會(huì)被移動(dòng),文件數(shù)據(jù)是否移動(dòng)和持久化內(nèi)存文件系統(tǒng)實(shí)現(xiàn)數(shù)據(jù)一致性機(jī)制有關(guān),所以攻擊者實(shí)現(xiàn)病毒程序,通過文件操作持續(xù)修改文件的元數(shù)據(jù)或者數(shù)據(jù),使得元數(shù)據(jù)或文件數(shù)據(jù)的存儲(chǔ)區(qū)迅速被磨損穿.例如,PCM 存儲(chǔ)單元的最大寫次數(shù)約為108[24-27],PMFS 的寫延遲為300ns~500ns[9].持續(xù)修改NVM 的某個(gè)存儲(chǔ)單元,則可以通過下面公式估算PCM 的使用壽命:

      PCM 存儲(chǔ)單元最大寫次數(shù)取108,PMFS 的寫延遲取500ns,則PCM 的使用壽命為50s,不到1 分鐘就能把PCM 磨損穿,所以現(xiàn)有持久化內(nèi)存文件系統(tǒng)的設(shè)計(jì),攻擊者利用文件操作輕易就能把NVM 存儲(chǔ)設(shè)備損壞.

      為此,本文將基于現(xiàn)有持久化內(nèi)存文件系統(tǒng)的以上設(shè)計(jì)缺陷,探索通過文件操作攻擊底層NVM 存儲(chǔ)設(shè)備的方法,并提出相應(yīng)的保護(hù)機(jī)制.

      2 針對(duì)NVM 的磨損攻擊

      本節(jié)探索通過文件操作對(duì)NVM 造成惡意磨損的攻擊方式.如第1 節(jié)所述,文件系統(tǒng)的大量操作會(huì)對(duì)NVM造成磨損.本文發(fā)現(xiàn),對(duì)于現(xiàn)有無磨損攻擊防御機(jī)制的持久化內(nèi)存文件系統(tǒng),病毒程序不需復(fù)雜的設(shè)計(jì),僅需執(zhí)行簡(jiǎn)單的文件操作即可造成NVM 磨損穿.為此,本文提出5 種利用不同的基本文件操作對(duì)NVM 造成惡意磨損的攻擊方式,利用這5 種基本攻擊方式,可以任意組合成具有更大破壞力的病毒.為展示不同攻擊方式的破壞性,通過列舉每種攻擊方式修改的數(shù)據(jù)結(jié)構(gòu),計(jì)算每種數(shù)據(jù)結(jié)構(gòu)的寫次數(shù),然后分析數(shù)據(jù)結(jié)構(gòu)和物理存儲(chǔ)對(duì)應(yīng)關(guān)系,最后分析NVM 物理頁的磨損度.

      · 攻擊方式1:利用創(chuàng)建文件和刪除文件操作執(zhí)行磨損攻擊.

      創(chuàng)建文件需要完成4 個(gè)操作:(1) 申請(qǐng)索引節(jié)點(diǎn);(2) 申請(qǐng)物理頁,創(chuàng)建文件索引結(jié)構(gòu);(3) 在父目錄插入一條目錄項(xiàng);(4) 修改超級(jí)塊的空閑頁數(shù)和空閑索引節(jié)點(diǎn)數(shù).相應(yīng)地,刪除文件也需要完成4 個(gè)操作:(1) 釋放文件索引結(jié)構(gòu)的物理頁;(2) 在父目錄刪除文件的目錄項(xiàng);(3) 釋放索引節(jié)點(diǎn);(4) 修改超級(jí)塊的空閑頁數(shù)和空閑索引節(jié)點(diǎn)數(shù).此外,創(chuàng)建和刪除文件還需要寫日志確保文件的一致性.所以如表3 所示,創(chuàng)建文件和刪除文件操作會(huì)造成超級(jí)塊、索引節(jié)點(diǎn)、文件索引結(jié)構(gòu)、目錄文件數(shù)據(jù)和日志的更新.

      Table 3 Data structures of persistent in-memory file systems under wear attacks表3 持久化內(nèi)存文件系統(tǒng)被磨損攻擊的數(shù)據(jù)結(jié)構(gòu)

      因此,攻擊方式1 就是在持久化內(nèi)存文件系統(tǒng)的單個(gè)目錄下反復(fù)創(chuàng)建文件、刪除文件,例子如病毒程序1所示:通過一個(gè)簡(jiǎn)單的for 循環(huán),在一個(gè)給定的目錄下執(zhí)行108次創(chuàng)建文件和刪除文件操作,對(duì)文件系統(tǒng)的元數(shù)據(jù)和文件數(shù)據(jù)的存儲(chǔ)區(qū)造成大量寫操作.數(shù)據(jù)結(jié)構(gòu)的寫次數(shù)見表4,所有數(shù)據(jù)結(jié)構(gòu)的寫次數(shù)大于或等于108.索引節(jié)點(diǎn)、文件索引結(jié)構(gòu)和日志是否修改固定的存儲(chǔ)單元,這與持久化內(nèi)存文件系統(tǒng)的索引節(jié)點(diǎn)、物理頁、日志管理有關(guān).但是超級(jí)塊和目錄文件數(shù)據(jù)的存儲(chǔ)單元,這兩個(gè)數(shù)據(jù)結(jié)構(gòu)在病毒程序1 的操作中從不改變存儲(chǔ)位置,而且每次創(chuàng)建和刪除文件都會(huì)更新,所以病毒程序會(huì)在對(duì)應(yīng)的存儲(chǔ)單元執(zhí)行2×108次寫操作,迅速導(dǎo)致其磨損穿.

      病毒程序1.攻擊方式1 的示例代碼.

      Table 4 Revision counts of data structures of persistent in-memory file systems under wear attacks表4 持久化內(nèi)存文件系統(tǒng)中被磨損攻擊數(shù)據(jù)結(jié)構(gòu)的寫次數(shù)

      · 攻擊方式2:利用創(chuàng)建硬鏈接和刪除硬鏈接操作執(zhí)行磨損攻擊.

      創(chuàng)建硬鏈接需要完成兩個(gè)操作:1) 在目標(biāo)文件的父目錄增加一條目錄項(xiàng);2) 源文件索引節(jié)點(diǎn)的鏈接數(shù)加一.相應(yīng)地,刪除硬鏈接也需要完成兩個(gè)操作:1) 在目標(biāo)文件父目錄刪除一條目錄項(xiàng);2) 源文件索引節(jié)點(diǎn)的鏈接數(shù)減一.此外,創(chuàng)建和刪除硬鏈接還需寫日志確保文件的一致性.如表3 所示,創(chuàng)建硬鏈接和刪除硬鏈接會(huì)造成索引節(jié)點(diǎn)、目錄文件數(shù)據(jù)和日志的更新.

      因此,攻擊方式2 就是在持久化內(nèi)存文件系統(tǒng)對(duì)某個(gè)文件反復(fù)創(chuàng)建硬鏈接、刪除硬鏈接,例子如病毒程序2所示:通過一個(gè)簡(jiǎn)單的for 循環(huán),對(duì)一個(gè)給定的文件執(zhí)行108次創(chuàng)建硬鏈接和刪除硬鏈接操作,對(duì)文件系統(tǒng)的元數(shù)據(jù)和文件數(shù)據(jù)的存儲(chǔ)區(qū)造成大量寫操作.數(shù)據(jù)結(jié)構(gòu)的寫次數(shù)見表4,索引節(jié)點(diǎn)、文件數(shù)據(jù)和日志的寫次數(shù)大于108.日志是否修改固定的存儲(chǔ)單元與日志管理有關(guān),目錄文件數(shù)據(jù)和索引節(jié)點(diǎn)的存儲(chǔ)單元,這兩個(gè)數(shù)據(jù)結(jié)構(gòu)在病毒程序2 的操作中從不改變存儲(chǔ)位置,而且每次創(chuàng)建和刪除硬鏈接都會(huì)更新,所以病毒程序會(huì)在對(duì)應(yīng)的存儲(chǔ)單元執(zhí)行2×108次寫操作,迅速導(dǎo)致其磨損穿.

      病毒程序2.攻擊方式2 的示例代碼.

      · 攻擊方式3:利用創(chuàng)建軟鏈接和刪除軟鏈接操作執(zhí)行磨損攻擊.

      創(chuàng)建軟鏈接需要完成4 個(gè)操作:1) 申請(qǐng)目標(biāo)文件的索引節(jié)點(diǎn);2) 在目標(biāo)文件父目錄增加目錄項(xiàng);3) 申請(qǐng)物理頁保存源文件的位置信息;4) 修改超級(jí)塊的空閑頁數(shù)和空閑索引節(jié)點(diǎn)數(shù).相應(yīng)地,刪除軟鏈接也需要完成4 個(gè)操作:1) 釋放保存源文件位置信息的物理頁;2) 在目標(biāo)文件父目錄刪除目標(biāo)文件的目錄項(xiàng);3) 釋放目標(biāo)文件的索引節(jié)點(diǎn);4) 修改超級(jí)塊的空閑頁數(shù)和空閑索引節(jié)點(diǎn)數(shù).此外,創(chuàng)建和刪除軟鏈接還需寫日志確保文件的一致性.如表3 所示,創(chuàng)建軟鏈接和刪除軟鏈接會(huì)造成超級(jí)塊、索引節(jié)點(diǎn)、目錄文件數(shù)據(jù)和日志的更新.

      因此,攻擊方式3 就是在持久化內(nèi)存文件系統(tǒng)對(duì)某個(gè)文件反復(fù)創(chuàng)建軟鏈接、刪除軟鏈接,例子如病毒程序3所示:通過簡(jiǎn)單的for 循環(huán),對(duì)給定的文件執(zhí)行108次創(chuàng)建軟鏈接和刪除軟鏈接操作,對(duì)文件系統(tǒng)的元數(shù)據(jù)和文件數(shù)據(jù)存儲(chǔ)區(qū)造成大量寫操作.數(shù)據(jù)結(jié)構(gòu)的寫次數(shù)見表4,超級(jí)塊、索引節(jié)點(diǎn)、目錄文件數(shù)據(jù)和日志的寫次數(shù)大于或等于108.索引節(jié)點(diǎn)、日志是否修改固定的存儲(chǔ)單元與索引節(jié)點(diǎn)和日志管理有關(guān),超級(jí)塊和目錄文件數(shù)據(jù)的存儲(chǔ)單元,這兩個(gè)數(shù)據(jù)結(jié)構(gòu)在病毒程序3 的操作中從不改變存儲(chǔ)位置,而且每次創(chuàng)建和刪除軟鏈接都會(huì)更新,所以病毒程序會(huì)在對(duì)應(yīng)的存儲(chǔ)單元執(zhí)行2×108次寫操作,迅速導(dǎo)致其磨損穿.

      病毒程序3.攻擊方式3 的示例代碼.

      · 攻擊方式4:利用文件覆蓋寫操作執(zhí)行磨損攻擊.

      文件的覆蓋寫操作和文件系統(tǒng)實(shí)現(xiàn)數(shù)據(jù)一致性機(jī)制有關(guān),如果采用預(yù)寫日志機(jī)制[33-35]實(shí)現(xiàn)數(shù)據(jù)一致性,則文件覆蓋寫需要完成3 步操作:1) 把更新內(nèi)容寫入日志;2) 把更新內(nèi)容寫入文件;3) 修改索引節(jié)點(diǎn).如果采用寫時(shí)復(fù)制機(jī)制[8,11]實(shí)現(xiàn)數(shù)據(jù)一致性,則文件覆蓋寫需要完成5 步操作:1) 把更新內(nèi)容寫入新申請(qǐng)的物理頁; 2) 修改文件索引結(jié)構(gòu);3) 修改索引節(jié)點(diǎn);4) 釋放被替換的文件數(shù)據(jù)頁;5) 修改超級(jí)塊的空閑頁數(shù).此外,文件覆蓋寫還需寫日志確保文件的一致性.如表3 所示,文件覆蓋寫操作會(huì)造成超級(jí)塊、索引節(jié)點(diǎn)、文件索引結(jié)構(gòu)、文件數(shù)據(jù)和日志的更新.

      因此,攻擊方式4 就是在持久化內(nèi)存文件系統(tǒng)對(duì)某個(gè)文件反復(fù)執(zhí)行覆蓋寫操作,例子如病毒程序4 所示:通過一個(gè)簡(jiǎn)單的for 循環(huán),對(duì)一個(gè)給定的文件執(zhí)行108次覆蓋寫操作,對(duì)文件元數(shù)據(jù)和文件數(shù)據(jù)存儲(chǔ)區(qū)造成大量寫操作.數(shù)據(jù)結(jié)構(gòu)的寫次數(shù)見表4,索引節(jié)點(diǎn)、文件索引結(jié)構(gòu)、文件數(shù)據(jù)和日志的寫次數(shù)等于108.每種數(shù)據(jù)結(jié)構(gòu)的寫次數(shù)和文件系統(tǒng)實(shí)現(xiàn)數(shù)據(jù)一致性機(jī)制息息相關(guān),采用預(yù)寫日志機(jī)制,文件執(zhí)行覆蓋寫操作,對(duì)文件的數(shù)據(jù)的修改是直接修改原存儲(chǔ)位置,沒有涉及修改文件索引結(jié)構(gòu).因此,文件索引結(jié)構(gòu)的寫次數(shù)為0,文件數(shù)據(jù)的寫次數(shù)為108,病毒程序4 持續(xù)修改文件數(shù)據(jù)的固定區(qū)間108次,則文件數(shù)據(jù)頁被磨損穿;采用寫時(shí)復(fù)制機(jī)制,數(shù)據(jù)寫到新的位置,即需要申請(qǐng)物理頁和修改文件索引結(jié)構(gòu),則超級(jí)塊、文件索引結(jié)構(gòu)的寫次數(shù)為108.這兩個(gè)數(shù)據(jù)結(jié)構(gòu)在病毒程序4 的操作中從不改變存儲(chǔ)位置,而且每次都會(huì)更新,所以病毒程序會(huì)在對(duì)應(yīng)的存儲(chǔ)單元執(zhí)行108寫操作,迅速導(dǎo)致其磨損穿.無論是采用預(yù)寫日志還是寫時(shí)復(fù)制機(jī)制實(shí)現(xiàn)數(shù)據(jù)一致性,都需要修改索引節(jié)點(diǎn)和寫日志,如表4 所示,索引節(jié)點(diǎn)和日志的寫次數(shù)都為108,日志是否修改固定的存儲(chǔ)單元與日志管理有關(guān).索引節(jié)點(diǎn)在病毒4 的操作中從不改變存儲(chǔ)位置,所以病毒程序會(huì)在對(duì)應(yīng)的存儲(chǔ)單元執(zhí)行108寫操作,迅速導(dǎo)致其磨損穿.

      病毒程序4.攻擊方式4 的示例代碼.

      · 攻擊方式5:利用文件重命名操作執(zhí)行磨損攻擊.

      文件重命名需要完成3 個(gè)操作:1) 在目標(biāo)文件的父目錄增加一條目錄項(xiàng);2) 在源文件父目錄刪除該文件的目錄項(xiàng);3) 修改索引節(jié)點(diǎn).此外,文件重命名操作還需寫日志確保文件的一致性.如表3 所示,文件重命名操作會(huì)造成索引節(jié)點(diǎn)、目錄文件數(shù)據(jù)、日志的更新.

      因此,攻擊方式5 就是在持久化內(nèi)存文件系統(tǒng)對(duì)某個(gè)文件反復(fù)執(zhí)行重命名操作,例子如病毒程序5 所示:通過一個(gè)簡(jiǎn)單的for 循環(huán),對(duì)一個(gè)給定的文件執(zhí)行108次文件重命名操作,對(duì)文件系統(tǒng)的元數(shù)據(jù)和目錄文件數(shù)據(jù)存儲(chǔ)區(qū)造成大量寫操作.數(shù)據(jù)結(jié)構(gòu)的寫次數(shù)見表4,索引節(jié)點(diǎn)、文件數(shù)據(jù)和日志的寫次數(shù)為108,日志是否修改固定的存儲(chǔ)單元與日志管理有關(guān).每執(zhí)行一次文件重命名操作,需要修改源文件和目標(biāo)文件的索引節(jié)點(diǎn)和目錄文件數(shù)據(jù).文件數(shù)據(jù)和索引節(jié)點(diǎn)這兩個(gè)數(shù)據(jù)結(jié)構(gòu)在病毒程序5 的操作中從不改變存儲(chǔ)位置,而且每次對(duì)文件執(zhí)行重命名操作都會(huì)更新,所以病毒程序會(huì)在對(duì)應(yīng)的存儲(chǔ)單元執(zhí)行108寫操作,迅速導(dǎo)致其磨損穿.

      病毒程序5.攻擊方式5 的示例代碼.

      本節(jié)探索的5 種磨損攻擊方式涉及到持久化內(nèi)存文件系統(tǒng)所有的元數(shù)據(jù)和文件數(shù)據(jù),即超級(jí)塊、索引節(jié)點(diǎn)、文件索引結(jié)構(gòu)、文件數(shù)據(jù)和日志,每種數(shù)據(jù)都可以通過簡(jiǎn)單的文件操作進(jìn)行更新.實(shí)驗(yàn)證明:在PMFS[9],以上5 種攻擊方式發(fā)動(dòng)對(duì)NVM 的磨損攻擊,在很短的時(shí)間內(nèi)就能把NVM 磨損穿.而現(xiàn)有的持久化內(nèi)存文件系統(tǒng),無論是PMFS[9],還是BPFS[8],NOVA[10],SIMFS[11]和HiNFS[13]等,都沒有考慮NVM 磨損防御,即都可以通過簡(jiǎn)單的文件操作在很短的時(shí)間內(nèi)就能把底層的NVM 磨損穿,嚴(yán)重威脅到文件系統(tǒng)的數(shù)據(jù)穩(wěn)定性.

      3 磨損防御機(jī)制PFWD

      3.1 概述

      從上一節(jié)可知,病毒程序可以通過利用不同的文件操作組合出多種針對(duì)NVM 的磨損攻擊方式,它們攻擊的數(shù)據(jù)涉及到持久化內(nèi)存文件系統(tǒng)的所有數(shù)據(jù),即超級(jí)塊、索引節(jié)點(diǎn)、文件索引結(jié)構(gòu)、文件數(shù)據(jù)和日志.為此,本文認(rèn)為,應(yīng)從保護(hù)被攻擊數(shù)據(jù)的角度防御病毒的惡意磨損攻擊.本節(jié)據(jù)此提出持久化內(nèi)存文件系統(tǒng)磨損防御機(jī)制(persistent in-memory file system wear defense mechanism,簡(jiǎn)稱PFWD)防御病毒對(duì)NVM 的磨損攻擊.

      具體而言,PFWD 包括4 項(xiàng)技術(shù):超級(jí)塊遷移技術(shù)、索引節(jié)點(diǎn)元數(shù)據(jù)虛擬化技術(shù)、文件數(shù)據(jù)頁磨損均衡技術(shù)和文件索引結(jié)構(gòu)遷移技術(shù),見表5.其中,文件數(shù)據(jù)頁磨損均衡技術(shù)用于防御針對(duì)日志和文件數(shù)據(jù)的攻擊.

      Table 5 PFWD defense the data under wear attack表5 針對(duì)被攻擊數(shù)據(jù)的磨損防御機(jī)制PFWD

      在持久化內(nèi)存文件系統(tǒng)實(shí)現(xiàn)PFWD,NVM 的物理空間布局如圖1 所示:(1) 超級(jí)塊指針,指向超級(jí)塊的存儲(chǔ)區(qū).超級(jí)塊的存儲(chǔ)區(qū)可動(dòng)態(tài)調(diào)整,當(dāng)超級(jí)塊存儲(chǔ)區(qū)的磨損嚴(yán)重時(shí),超級(jí)塊可遷移到磨損較低的物理區(qū)間;(2) 物理頁寫次數(shù)表,記錄NVM 每個(gè)物理頁的寫次數(shù),每次更新物理頁的數(shù)據(jù),都要在物理頁寫次數(shù)表增加相應(yīng)的寫次數(shù),因?yàn)镻FWD 機(jī)制能保證NVM 物理空間的磨損均衡,所以物理頁寫次數(shù)表的存儲(chǔ)區(qū)間也是磨損均衡的;(3) 索引節(jié)點(diǎn)映射表,記錄虛擬索引節(jié)點(diǎn)的寫次數(shù)和偏移量,實(shí)現(xiàn)索引節(jié)點(diǎn)的遷移;(4) 超級(jí)塊、索引節(jié)點(diǎn)、文件索引結(jié)構(gòu)、文件數(shù)據(jù)、日志,分散在NVM 整個(gè)物理空間,通過超級(jí)塊遷移技術(shù)、索引節(jié)點(diǎn)元數(shù)據(jù)虛擬化技術(shù)、文件索引結(jié)構(gòu)遷移技術(shù)、文件數(shù)據(jù)頁磨損均衡技術(shù)實(shí)現(xiàn)以上5 種數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)區(qū)的磨損均衡.

      Fig.1 Layout of physical address space of NVM when PFWD is implemented in persistent in-memory file system圖1 持久化內(nèi)存文件系統(tǒng)實(shí)現(xiàn)PFWD 時(shí),NVM 的物理地址空間布局

      持久化內(nèi)存文件系統(tǒng)實(shí)現(xiàn)PFWD,物理頁寫次數(shù)表和索引節(jié)點(diǎn)映射表的空間開銷極小.例如,NVM 的存儲(chǔ)空間大小為10GB,物理頁大小為4KB,每8 字節(jié)記錄一個(gè)物理頁的寫次數(shù),則物理頁寫次數(shù)表占用的存儲(chǔ)空間是,僅占總存儲(chǔ)空間的0.2%.通常,所有文件索引節(jié)點(diǎn)總的存儲(chǔ)空間大小設(shè)計(jì)為持久化內(nèi)存文件系統(tǒng)存儲(chǔ)空間的1%,索引節(jié)點(diǎn)的大小為128KB[9-11],4KB 大小的物理頁能存儲(chǔ)32 個(gè)索引節(jié)點(diǎn).索引節(jié)點(diǎn)映射表中每個(gè)索引節(jié)點(diǎn)的寫次數(shù)和偏移量共占8 字節(jié),即分別用4 字節(jié)記錄寫次數(shù)和偏移量,則索引節(jié)點(diǎn)映射表所占存儲(chǔ)空間的大小是,僅占總存儲(chǔ)空間的0.06%.所以,物理頁寫次數(shù)表和索引節(jié)點(diǎn)映射表的存儲(chǔ)空間開銷可以忽略不計(jì).此外,為提高檢索效率,物理頁寫次數(shù)表和索引節(jié)點(diǎn)映射表都使用數(shù)組結(jié)構(gòu),并且兩種數(shù)據(jù)結(jié)構(gòu)采用修改DRAM 副本的方式更新其寫次數(shù),只有在適當(dāng)?shù)臅r(shí)機(jī)回寫NVM,以減少兩個(gè)數(shù)據(jù)結(jié)構(gòu)物理存儲(chǔ)區(qū)的寫次數(shù).因此,物理頁寫次數(shù)表和索引節(jié)點(diǎn)映射表所在存儲(chǔ)區(qū)的磨損極低.

      3.2 索引節(jié)點(diǎn)元數(shù)據(jù)虛擬化技術(shù)

      索引節(jié)點(diǎn)是文件系統(tǒng)的重要組成部分,每個(gè)索引節(jié)點(diǎn)擁有唯一的編號(hào)(ino),文件系統(tǒng)通過ino 來檢索索引節(jié)點(diǎn).本文把保存單個(gè)索引節(jié)點(diǎn)的NVM 物理空間稱為“索引節(jié)點(diǎn)槽(inode slot)”,文件系統(tǒng)所有的索引節(jié)點(diǎn)槽組成“索引節(jié)點(diǎn)存儲(chǔ)區(qū)”.既有的持久化內(nèi)存文件系統(tǒng),ino 和Inode slot 具有固定的映射關(guān)系,即索引節(jié)點(diǎn)存放在NVM 的固定位置.例如:NOVA[10],SIMFS[11]和SCMFS[12]采用數(shù)組結(jié)構(gòu)保存所有的索引節(jié)點(diǎn),即在NVM 劃分一段連續(xù)的物理空間存儲(chǔ)所有的索引節(jié)點(diǎn);BPFS[8],PMFS[9]和HiNFS[13]雖然通過樹形結(jié)構(gòu)把索引節(jié)點(diǎn)分散存放在NVM 的物理空間,但是一經(jīng)使用就不再改變其存儲(chǔ)位置.所以,文件系統(tǒng)對(duì)索引節(jié)點(diǎn)的所有寫操作都作用于固定的存儲(chǔ)單元.這種固定映射關(guān)系的索引節(jié)點(diǎn)存儲(chǔ)區(qū)是無法抵御惡意磨損攻擊,病毒程序通過簡(jiǎn)單的文件操作就能把索引節(jié)點(diǎn)存儲(chǔ)單元磨損穿.為此,本文提出一種高效的索引節(jié)點(diǎn)元數(shù)據(jù)虛擬化技術(shù),使得文件的索引節(jié)點(diǎn)在其整個(gè)生命周期內(nèi)能動(dòng)態(tài)遷移.該技術(shù)的核心思想:如果保存某個(gè)索引節(jié)點(diǎn)的Inode slot 的磨損次數(shù)達(dá)到遷移閾值,則把該索引節(jié)點(diǎn)遷移到磨損較低的Inode slot,通過動(dòng)態(tài)調(diào)整索引節(jié)點(diǎn)的物理位置,使得對(duì)單個(gè)索引節(jié)點(diǎn)集中的寫操作分散到整個(gè)索引節(jié)點(diǎn)存儲(chǔ)區(qū),實(shí)現(xiàn)索引節(jié)點(diǎn)存儲(chǔ)區(qū)的磨損均衡.

      為實(shí)現(xiàn)索引節(jié)點(diǎn)遷移,首先要能改變ino 到Inode slot 的映射關(guān)系,即改變索引節(jié)點(diǎn)的存儲(chǔ)位置.為此,索引節(jié)點(diǎn)元數(shù)據(jù)虛擬化技術(shù)提出在文件系統(tǒng)初始化時(shí),在內(nèi)核預(yù)留一段連續(xù)的虛擬地址空間作為“索引節(jié)點(diǎn)虛擬地址空間”,同時(shí)申請(qǐng)多個(gè)NVM 物理頁作為“索引節(jié)點(diǎn)存儲(chǔ)區(qū)”.索引節(jié)點(diǎn)虛擬地址空間被分割為多個(gè)大小相等的虛擬索引節(jié)點(diǎn)(virtual inode,簡(jiǎn)稱vInode),索引節(jié)點(diǎn)存儲(chǔ)區(qū)則被劃分為多個(gè)大小相等的Inode slot.索引節(jié)點(diǎn)虛擬地址空間的大小等于索引節(jié)點(diǎn)存儲(chǔ)區(qū)的物理空間大小,單個(gè)vInode 所占的虛擬地址空間大小也等于單個(gè)Inode slot 的物理空間大小,即vInode 的總數(shù)等于Inode slot 的總數(shù).如圖2 所示,vInode 通過頁表(page table)和Inode slot 一一對(duì)應(yīng),該映射關(guān)系所采用的格式與進(jìn)程頁表的格式相同,利用 CPU 既有的硬件 MMU(memory management unit)完成虛擬地址到物理地址的轉(zhuǎn)換.為了實(shí)現(xiàn)索引節(jié)點(diǎn)的遷移,索引節(jié)點(diǎn)元數(shù)據(jù)虛擬化技術(shù)提出在NVM 新增數(shù)據(jù)結(jié)構(gòu)“索引節(jié)點(diǎn)映射表”,索引節(jié)點(diǎn)映射表用來記錄vInode 的偏移量(offset).偏移量的總數(shù)等于文件系統(tǒng)索引節(jié)點(diǎn)的總數(shù),即等于vInode 和Inode slot 的總數(shù).偏移量的計(jì)算,具體而言,vInode 的起始地址減去索引節(jié)點(diǎn)虛擬地址空間的起始地址是一個(gè)固定的差值.該差值是vInode 大小的整數(shù)倍,用該差值對(duì)vInode 的大小求余,結(jié)果記為vInode 偏移量(以下簡(jiǎn)稱偏移量).因此,索引節(jié)點(diǎn)的檢索流程,例如查詢索引節(jié)點(diǎn)3,則從索引節(jié)點(diǎn)映射表中得到偏移量,用偏移量乘以vInode 的大小,再加上索引節(jié)點(diǎn)虛擬地址空間的基址,得到vInode 的虛擬地址首地址,利用MMU 完成虛擬地址到物理地址的轉(zhuǎn)換,最終得到索引節(jié)點(diǎn)3 的實(shí)際數(shù)據(jù).通過索引節(jié)點(diǎn)元數(shù)據(jù)虛擬化技術(shù),實(shí)現(xiàn)ino 和Inode slot 動(dòng)態(tài)解綁,使得修改索引節(jié)點(diǎn)映射表的偏移量就可以改變ino 和Inode slot的映射關(guān)系,即可實(shí)現(xiàn)索引節(jié)點(diǎn)的遷移.

      Fig.2 Inode virtualization圖2 索引節(jié)點(diǎn)元數(shù)據(jù)虛擬化

      為了將索引節(jié)點(diǎn)遷移到寫次數(shù)較少的Inode slot,則每次更新索引節(jié)點(diǎn),則需要記錄Inode slot 的寫次數(shù).由于vInode 和Inode slot 是一一映射關(guān)系,因此,Inode slot 的寫次數(shù)也是vInode 的寫次數(shù),如圖2 所示:為每個(gè)vInode 設(shè)置一個(gè)寫計(jì)數(shù)器(write count)器(以下簡(jiǎn)稱寫計(jì)數(shù)器),用于記錄vInode 的寫次數(shù),寫計(jì)數(shù)器保存在索引節(jié)點(diǎn)映射表里.ino、偏移量和寫計(jì)數(shù)器在索引節(jié)點(diǎn)映射表是一一對(duì)應(yīng)關(guān)系,具體對(duì)應(yīng)關(guān)系如圖2 所示.

      索引節(jié)點(diǎn)元數(shù)據(jù)虛擬化技術(shù)使得索引節(jié)點(diǎn)的更新操作均勻分布到索引節(jié)點(diǎn)存儲(chǔ)區(qū),即:每次更新索引節(jié)點(diǎn),需要增加該索引節(jié)點(diǎn)對(duì)應(yīng)的vInode 的寫計(jì)數(shù)器.如果vInode 的寫次數(shù)達(dá)到設(shè)定的遷移閾值Wp,則查找vInode寫計(jì)數(shù)器,把該索引節(jié)點(diǎn)數(shù)據(jù)拷貝到一個(gè)空閑的索引節(jié)點(diǎn)的Inode slot;然后把該索引節(jié)點(diǎn)對(duì)應(yīng)的vInode 的計(jì)數(shù)器清零;最后,在索引節(jié)點(diǎn)映射表修改偏移量,實(shí)現(xiàn)索引節(jié)點(diǎn)的動(dòng)態(tài)遷移.上述遷移方法可能產(chǎn)生一種極端情況,即索引節(jié)點(diǎn)在兩個(gè)Inode slot 來回遷移.例如:索引節(jié)點(diǎn)A對(duì)應(yīng)vInodeA,vInodeA對(duì)應(yīng)Inode slotA,索引節(jié)點(diǎn)B對(duì)應(yīng)vInodeB,vInodeB對(duì)應(yīng)Inode slotB且索引節(jié)點(diǎn)B處于空閑狀態(tài),當(dāng)vInodeA的寫次數(shù)達(dá)到遷移閾值,則索引節(jié)點(diǎn)A遷移到索引節(jié)點(diǎn)B的物理存儲(chǔ)空間Inode slotB,使得索引節(jié)點(diǎn)A對(duì)應(yīng)vInodeB,索引節(jié)點(diǎn)B對(duì)應(yīng)vInodeA;同時(shí),重置vInodeA的寫次數(shù)為0 和索引節(jié)點(diǎn)B處于空閑狀態(tài),繼續(xù)寫索引節(jié)點(diǎn)A,當(dāng)寫次數(shù)再次達(dá)到遷移閾值,索引節(jié)點(diǎn)A的數(shù)據(jù)再次遷移到索引節(jié)點(diǎn)B的物理存儲(chǔ)空間Inode slotA.因此,持續(xù)修改索引節(jié)點(diǎn)A,導(dǎo)致索引節(jié)點(diǎn)A在Inode slotA和Inode slotB來回遷移,迅速把這兩個(gè)存儲(chǔ)區(qū)間磨損穿.為解決上述問題并提高索引節(jié)點(diǎn)的管理效率,本文提出使用鏈表實(shí)現(xiàn)隊(duì)列(queue)來管理空閑索引節(jié)點(diǎn),以下簡(jiǎn)稱索引節(jié)點(diǎn)空閑鏈表.索引節(jié)點(diǎn)的申請(qǐng)和釋放規(guī)則:總是從索引節(jié)點(diǎn)空閑鏈表的尾部獲取索引節(jié)點(diǎn),而把釋放的索引節(jié)點(diǎn)插入到索引節(jié)點(diǎn)空閑鏈表頭部,從而避免短期內(nèi)重復(fù)使用最近寫過的索引節(jié)點(diǎn).鑒于索引節(jié)點(diǎn)更新頻次高,導(dǎo)致索引節(jié)點(diǎn)存儲(chǔ)區(qū)的磨損較為嚴(yán)重,為達(dá)到NVM 整個(gè)存儲(chǔ)空間的磨損均衡,本文提出索引節(jié)點(diǎn)以頁大小為粒度的遷移方法,即:每次更新索引節(jié)點(diǎn),在物理頁寫次數(shù)表增加其Inode slot 所在物理頁的寫次數(shù),如果該物理頁的寫次數(shù)達(dá)到遷移閾值Wq(Wq>>Wp),則把該頁所有的索引節(jié)點(diǎn)遷移到寫次數(shù)較少的空閑頁.

      索引節(jié)點(diǎn)的遷移流程如圖3 所示.圖3(a)為遷移前的索引節(jié)點(diǎn)映射表,此時(shí),索引節(jié)點(diǎn)1 對(duì)應(yīng)的vInode 的寫次數(shù)為199,索引節(jié)點(diǎn)3 對(duì)應(yīng)的vInode 的寫次數(shù)為0 且處于空閑狀態(tài);同時(shí),該索引節(jié)點(diǎn)位于索引節(jié)點(diǎn)空閑鏈表的表尾.如果索引節(jié)點(diǎn)遷移的閾值此時(shí)為200.更新索引節(jié)點(diǎn)1,則做索引節(jié)點(diǎn)遷移.首先,把索引節(jié)點(diǎn)1 的數(shù)據(jù)拷貝到索引節(jié)點(diǎn)3 的Inode slot;然后增加索引節(jié)點(diǎn)3 對(duì)應(yīng)的vInode 的寫計(jì)數(shù)器,索引節(jié)點(diǎn)1 對(duì)應(yīng)的vInode 的寫計(jì)數(shù)器清零;最后修改索引節(jié)點(diǎn)映射表中索引節(jié)點(diǎn)1 的偏移量為3 和索引節(jié)點(diǎn)3 的偏移量為1,即完成索引節(jié)點(diǎn)的遷移.如圖3(a):ino 為1 和3 的偏移量分別為1 和3,偏移量為1 和3 的vInode 的寫次數(shù)分別為199 和0.遷移完成后的索引節(jié)點(diǎn)映射表如圖3(b)所示,此時(shí),ino 為1 和3 的偏移量分別為3 和1,偏移量為1 和3 的vInode 的寫次數(shù)分別為0 和1.

      Fig.3 Example of inode migration圖3 索引節(jié)點(diǎn)遷移示例

      索引節(jié)點(diǎn)元數(shù)據(jù)虛擬化技術(shù)使用頁表來實(shí)現(xiàn)vInode 到Inode slot 的映射,直接利用CPU 的MMU 完成虛擬地址到物理地址的轉(zhuǎn)換,最大程度保證索引節(jié)點(diǎn)檢索的性能.索引節(jié)點(diǎn)的遷移對(duì)用戶透明,只需把索引節(jié)點(diǎn)數(shù)據(jù)遷移到空閑且磨損少的Inode slot、修改索引節(jié)點(diǎn)映射表的偏移量和修改vInode 的計(jì)數(shù)器值,就能實(shí)現(xiàn)索引節(jié)點(diǎn)遷移,對(duì)其他正在使用的文件沒有影響.通過索引節(jié)點(diǎn)元數(shù)據(jù)虛擬化技術(shù),實(shí)現(xiàn)索引節(jié)點(diǎn)的動(dòng)態(tài)遷移,使得對(duì)索引節(jié)點(diǎn)的寫操作可以分散到不同的Inode slot,實(shí)現(xiàn)索引節(jié)點(diǎn)存儲(chǔ)區(qū)的磨損均衡,能有效地防御病毒對(duì)索引節(jié)點(diǎn)存儲(chǔ)單元的磨損攻擊.

      3.3 超級(jí)塊遷移技術(shù)

      既有持久化內(nèi)存文件系統(tǒng)的設(shè)計(jì),例如BPFS[8],PMFS[9],NOVA[10],SIMFS[11]和HiNFS[13]等,超級(jí)塊保存在NVM 的固定位置,不能移動(dòng),大多數(shù)文件操作都需要修改超級(jí)塊.例如,物理頁和索引節(jié)點(diǎn)的分配和釋放都要修改超級(jí)塊的空閑頁數(shù)和空閑索引節(jié)點(diǎn),所以超級(jí)塊存儲(chǔ)區(qū)的磨損極為嚴(yán)重.而所有的持久化內(nèi)存文件系統(tǒng)都沒有對(duì)超級(jí)塊存儲(chǔ)區(qū)做磨損保護(hù),病毒程序通過簡(jiǎn)單的文件操作就能把超級(jí)塊存儲(chǔ)單元磨損穿.所以,現(xiàn)有的持久化內(nèi)存文件系統(tǒng)的設(shè)計(jì)是無法防御病毒發(fā)動(dòng)對(duì)超級(jí)塊存儲(chǔ)單元的磨損攻擊.

      為了有效防御病毒程序發(fā)動(dòng)對(duì)超級(jí)塊存儲(chǔ)單元的磨損攻擊,本文提出超級(jí)塊遷移技術(shù).如圖4 所示:設(shè)置一個(gè)超級(jí)塊指針,即把NVM 物理空間的前8 個(gè)字節(jié)作為超級(jí)塊指針,用來保存超級(jí)塊存儲(chǔ)區(qū)的首地址,超級(jí)塊可以遷移,當(dāng)超級(jí)塊存儲(chǔ)區(qū)的寫次數(shù)達(dá)到遷移閾值Wq,則把超級(jí)塊遷移到磨損低的物理頁.

      Fig.4 Example of superblock migration圖4 超級(jí)塊遷移示例

      如圖4 所示:超級(jí)塊保存在物理頁A,當(dāng)更新超級(jí)塊時(shí),判斷物理頁A的寫次數(shù)是否達(dá)到閾值Wq.如果沒有達(dá)到閾值,則修改超級(jí)塊并且增加物理頁A的寫次數(shù);否則,把超級(jí)塊遷移到磨損低且空閑的物理頁B,修改超級(jí)塊并且增加物理頁B的寫次數(shù),然后修改超級(jí)塊指針指向物理頁B,最后釋放物理頁A,即完成超級(jí)塊遷移.

      超級(jí)塊遷移技術(shù)實(shí)現(xiàn)超級(jí)塊動(dòng)態(tài)遷移,使得集中對(duì)超級(jí)塊存儲(chǔ)區(qū)的寫操作分散到整個(gè)NVM 存儲(chǔ)空間,能有效地防御針對(duì)超級(jí)塊存儲(chǔ)單元的磨損攻擊.

      3.4 文件數(shù)據(jù)頁磨損均衡技術(shù)

      實(shí)現(xiàn)數(shù)據(jù)一致性是文件系統(tǒng)的基本功能,預(yù)寫日志[33-35]和寫時(shí)復(fù)制[8,11]是實(shí)現(xiàn)數(shù)據(jù)一致性的兩種不同機(jī)制.文件的更新和實(shí)現(xiàn)數(shù)據(jù)一致性的機(jī)制息息相關(guān),現(xiàn)有的持久化內(nèi)存文件系統(tǒng)采用寫時(shí)復(fù)制或者寫時(shí)復(fù)制結(jié)合預(yù)寫日志機(jī)制實(shí)現(xiàn)數(shù)據(jù)一致性.BPFS[8],NOVA[10],SIMFS[11]采用寫時(shí)復(fù)制機(jī)制實(shí)現(xiàn)文件數(shù)據(jù)一致性.對(duì)于文件覆蓋寫,寫時(shí)復(fù)制機(jī)制是把數(shù)據(jù)寫到新的存儲(chǔ)位置,然后修改文件索引結(jié)構(gòu),持續(xù)地修改文件數(shù)據(jù),難以在短時(shí)間內(nèi)把文件數(shù)據(jù)頁磨損穿.但是,頻繁地更新文件索引結(jié)構(gòu),導(dǎo)致文件索引結(jié)構(gòu)存儲(chǔ)區(qū)間迅速被磨損穿(見第3.5 節(jié)).Shortcut-JFS[16]采用自適應(yīng)日志(adaptive logging,簡(jiǎn)稱AL),即預(yù)寫日志結(jié)合寫時(shí)復(fù)制機(jī)制實(shí)現(xiàn)數(shù)據(jù)一致性.持久化內(nèi)存文件系統(tǒng)采用預(yù)寫日志機(jī)制實(shí)現(xiàn)數(shù)據(jù)一致性或沒有實(shí)現(xiàn)數(shù)據(jù)一致性,文件覆蓋寫是直接修改文件數(shù)據(jù)的原存儲(chǔ)位置.因此,持續(xù)修改文件的數(shù)據(jù),則迅速寫穿文件數(shù)據(jù)存儲(chǔ)空間.持久化內(nèi)存文件系統(tǒng)無論是支持文件元數(shù)據(jù)一致性,還是支持?jǐn)?shù)據(jù)一致性(備注:文件元數(shù)據(jù)一致性僅需保證文件元數(shù)據(jù)一致性狀態(tài),數(shù)據(jù)一致性需要保證文件元數(shù)據(jù)和文件數(shù)據(jù)一致性狀態(tài)),都需要備份文件元數(shù)據(jù)信息.PMFS[9]僅支持元數(shù)據(jù)一致性,通過在NVM 劃分一段連續(xù)的存儲(chǔ)區(qū)間(PMFS-log)來保存文件元數(shù)據(jù)信息,重復(fù)執(zhí)行簡(jiǎn)單的文件操作,很快就能把PMFS-log 存儲(chǔ)空間寫穿.NOVA[10]的每個(gè)索引節(jié)點(diǎn)都有一個(gè)私有日志,稱為索引節(jié)點(diǎn)私有日志,同時(shí)為每個(gè)CPU 劃分一個(gè)日志區(qū)間,簡(jiǎn)稱索引節(jié)點(diǎn)公有日志.NOVA 的索引節(jié)點(diǎn)私有日志和公有日志的存儲(chǔ)區(qū)間是固定的,只有當(dāng)存儲(chǔ)空間容量不夠,才會(huì)申請(qǐng)其他物理頁來擴(kuò)充容量.因此,持續(xù)對(duì)文件做簡(jiǎn)單的文件操作,在段時(shí)間內(nèi)就能把索引節(jié)點(diǎn)的私有日志或者公有日志的存儲(chǔ)單元磨損穿.

      為了有效地防御病毒程序發(fā)動(dòng)對(duì)文件數(shù)據(jù)頁和日志存儲(chǔ)單元的磨損攻擊,本文提出了文件數(shù)據(jù)頁磨損均衡技術(shù).如圖5 所示,日志由日志元數(shù)據(jù)和日志文件數(shù)據(jù)組成.日志元數(shù)據(jù)主要包括文件元數(shù)據(jù)、日志狀態(tài)、修改起始位置、文件修改大小和日志文件指針等,其中:文件元數(shù)據(jù)記錄被修改索引節(jié)點(diǎn)的基本信息;日志狀態(tài)包括初始化(initial)、提交(commit)、CheckPoint;日志文件指針指向日志文件.每個(gè)打開的文件都為其分配一個(gè)私有日志.如果文件操作不涉及文件數(shù)據(jù)的修改,則不使用日志文件;如果文件操作涉及到文件數(shù)據(jù)的修改,則使用日志文件.

      Fig.5 Wear-leveling technique of file data page圖5 文件數(shù)據(jù)頁磨損均衡技術(shù)

      文件數(shù)據(jù)頁磨損均衡技術(shù)采用寫時(shí)復(fù)制機(jī)制實(shí)現(xiàn)數(shù)據(jù)一致性,即:把更新數(shù)據(jù)寫入日志文件,通過交換文件數(shù)據(jù)頁和日志文件數(shù)據(jù)頁來實(shí)現(xiàn)文件的覆蓋寫.首先把索引節(jié)點(diǎn)被修改信息、文件被替換數(shù)據(jù)頁的指針、修改的起始位置、修改大小等數(shù)據(jù)寫入日志元數(shù)據(jù);然后把更新數(shù)據(jù)寫入日志文件;最后修改索引節(jié)點(diǎn)及交換日志文件數(shù)據(jù)頁和文件被修改數(shù)據(jù)頁,即修改日志文件索引結(jié)構(gòu)和文件索引結(jié)構(gòu).對(duì)文件執(zhí)行數(shù)據(jù)追加(append write)操作,不使用日志文件,首先從空間管理模塊申請(qǐng)磨損低的物理頁,寫入追加數(shù)據(jù),在物理頁寫次數(shù)表增加物理頁的寫次數(shù);然后把本次修改的元數(shù)據(jù)信息寫入日志元數(shù)據(jù);最后修改文件索引節(jié)點(diǎn),把新增物理頁的指針寫入文件索引結(jié)構(gòu).當(dāng)開始修改文件索引節(jié)點(diǎn)和文件數(shù)據(jù)時(shí),設(shè)置日志狀態(tài)為提交狀態(tài);當(dāng)所有的修改數(shù)據(jù)都持久化到NVM,設(shè)置日志為CheckPoint 狀態(tài),即修改完成.文件執(zhí)行覆蓋寫操作,首先判斷日志文件數(shù)據(jù)頁的寫次數(shù)是否達(dá)到遷移閾值:如果達(dá)到遷移閾值,則申請(qǐng)磨損低的物理頁替換該日志文件數(shù)據(jù)頁,然后把數(shù)據(jù)寫入新申請(qǐng)的物理頁,在物理頁寫次數(shù)表增加寫次數(shù);否則,把數(shù)據(jù)寫入日志文件,增加物理頁的寫次數(shù).日志元數(shù)據(jù)的遷移方法同上.每次寫日志元數(shù)據(jù),需在物理頁寫次數(shù)表增加寫次數(shù),然后判斷其寫次數(shù)是否達(dá)到遷移閾值:如果達(dá)到遷移閾值,則把日志元數(shù)據(jù)遷移到磨損低的存儲(chǔ)空間.當(dāng)日志元數(shù)據(jù)遷移完成后,修改文件索引節(jié)點(diǎn)指向日志元數(shù)據(jù)新的存儲(chǔ)區(qū)間,釋放原存儲(chǔ)區(qū)間.

      本文提出的文件數(shù)據(jù)頁磨損均衡技術(shù),實(shí)現(xiàn)日志數(shù)據(jù)的動(dòng)態(tài)遷移,對(duì)文件執(zhí)行覆蓋寫操作,都是使用日志文件數(shù)據(jù)頁替換文件被修改數(shù)據(jù)頁.每次數(shù)據(jù)寫入日志文件數(shù)據(jù)頁,都判斷其寫次數(shù)是否達(dá)到遷移閾值,達(dá)到則做數(shù)據(jù)遷移.對(duì)文件執(zhí)行數(shù)據(jù)追加操作,都是從空間管理模塊申請(qǐng)磨損低的物理頁來保存追加數(shù)據(jù),通過文件數(shù)據(jù)頁磨損均衡技術(shù),使得對(duì)日志和文件數(shù)據(jù)的更新操作分散到整個(gè)NVM 存儲(chǔ)空間,實(shí)現(xiàn)文件數(shù)據(jù)及日志存儲(chǔ)區(qū)的磨損均衡,能有效地防御針對(duì)文件數(shù)據(jù)和日志的存儲(chǔ)單元的磨損攻擊.

      3.5 文件索引結(jié)構(gòu)遷移技術(shù)

      文件索引結(jié)構(gòu)的修改也和文件系統(tǒng)實(shí)現(xiàn)數(shù)據(jù)一致性機(jī)制有關(guān),本文第3.4 節(jié)已經(jīng)介紹了,現(xiàn)有持久化內(nèi)存文件系統(tǒng)都采用了寫時(shí)復(fù)制[8,10]機(jī)制或者寫時(shí)復(fù)制結(jié)合預(yù)寫日志[29-31]機(jī)制來實(shí)現(xiàn)數(shù)據(jù)一致性.本文提出的文件數(shù)據(jù)頁磨損均衡技術(shù)也是采用寫時(shí)復(fù)制機(jī)制實(shí)現(xiàn)數(shù)據(jù)一致性.現(xiàn)有持久化內(nèi)存文件系統(tǒng),文件被創(chuàng)建后,文件索引結(jié)構(gòu)就不會(huì)被遷移,即:現(xiàn)有的持久化內(nèi)存文件系統(tǒng)都沒有對(duì)文件索引結(jié)構(gòu)存儲(chǔ)區(qū)做磨損保護(hù),病毒程序通過簡(jiǎn)單的文件操作就能把文件索引結(jié)構(gòu)的存儲(chǔ)單元磨損穿.所以,現(xiàn)有的持久化內(nèi)存文件系統(tǒng)的設(shè)計(jì)是無法防御病毒發(fā)動(dòng)對(duì)文件索引結(jié)構(gòu)存儲(chǔ)單元的磨損攻擊.

      為了有效地防御病毒程序發(fā)動(dòng)對(duì)文件索引結(jié)構(gòu)存儲(chǔ)單元的磨損攻擊,本文提出了文件索引結(jié)構(gòu)遷移技術(shù),如圖6 所示,每次更新文件索引結(jié)構(gòu)的索引項(xiàng),都判斷該索引項(xiàng)所在物理頁的寫次數(shù)是否達(dá)到遷移閾值Wq:如果沒有達(dá)到遷移閾值,則直接修改索引項(xiàng);如果達(dá)到遷移閾值,則拷貝該索引項(xiàng)所在物理頁的所有索引項(xiàng)到空閑且磨損低的物理頁,修改索引項(xiàng).然后修改上一級(jí)索引項(xiàng),再判斷上一級(jí)索引項(xiàng)所在的物理頁的寫次數(shù)是否達(dá)到遷移閾值Wq:如果沒有達(dá)到遷移閾值,則本次文件索引結(jié)構(gòu)遷移完成;如果達(dá)到遷移閾值,則對(duì)上一級(jí)文件索引結(jié)構(gòu)做遷移.按此迭代操作.

      Fig.6 File index structure migration圖6 文件索引結(jié)構(gòu)遷移

      本文提出的文件索引結(jié)構(gòu)遷移技術(shù)同樣適用于本文第3.4 節(jié)的日志文件索引結(jié)構(gòu).通過對(duì)文件索引結(jié)構(gòu)做遷移操作,使得文件索引結(jié)構(gòu)更新操作分散到整個(gè)NVM 存儲(chǔ)空間,能有效地防御針對(duì)文件索引結(jié)構(gòu)的存儲(chǔ)單元的磨損攻擊.

      4 實(shí)驗(yàn)結(jié)果與分析

      本節(jié)驗(yàn)證提出的PFWD 技術(shù)對(duì)惡意磨損攻擊的防御效果及性能開銷.

      4.1 實(shí)驗(yàn)配置

      為進(jìn)行驗(yàn)證,本文基于PFWD 技術(shù)實(shí)現(xiàn)一個(gè)帶磨損保護(hù)的持久化內(nèi)存文件系統(tǒng)(wear protected persistent in-memory file system,簡(jiǎn)稱WPFS).對(duì)比的對(duì)象是近年來具有代表性的新型持久化內(nèi)存文件系統(tǒng)PMFS[9].為了記錄文件系統(tǒng)物理頁的寫次數(shù),實(shí)驗(yàn)在PMFS[9]的源代碼中加入物理頁的磨損計(jì)數(shù)器,計(jì)數(shù)器自身的寫操作不記錄在文件系統(tǒng)頁面的寫次數(shù)中.本文采用第2 節(jié)提出的5 種磨損攻擊病毒程序分別攻擊WPFS 和PMFS[9],分析WPFS 和PMFS 的NVM 存儲(chǔ)空間的磨損情況;對(duì)比WPFS 和WPFS-NoPFWD(WPFS 未實(shí)現(xiàn)PFWD)的讀寫性能,分析持久化內(nèi)存文件系統(tǒng)增加PFWD 的開銷.實(shí)驗(yàn)結(jié)果證明,PFWD 能有效地防御病毒程序發(fā)動(dòng)的磨損攻擊.

      本文的實(shí)驗(yàn)平臺(tái)配置有3.20GHz Intel i5-4460 處理器,8GB 的DRAM 內(nèi)存,操作系統(tǒng)為Ubuntu 15.04,Linux內(nèi)核是4.4.30.本實(shí)驗(yàn)中使用4GB 的DRAM 內(nèi)存模擬NVM.為更好地展示W(wǎng)PFS 防御磨損攻擊的效果,在磨損效果實(shí)驗(yàn)中,WPFS 僅使用40MB 的NVM 存儲(chǔ)空間,即物理頁的大小為4KB,總共10240 個(gè)物理頁.在性能開銷實(shí)驗(yàn)中,WPFS 和WPFS-NoPFWD 的NVM 存儲(chǔ)空間為4GB 大小.

      4.2 NVM磨損分析

      本節(jié)對(duì)比分析WPFS 和PMFS[9]兩種文件系統(tǒng)在本文提出的5 種磨損攻擊下的NVM 磨損情況.實(shí)驗(yàn)結(jié)果如圖7~圖12 所示.

      Fig.7 NVM wear under attack 1圖7 攻擊方式1 的攻擊下NVM 的磨損情況

      Fig.8 NVM wear under attack 2圖8 攻擊方式2 的攻擊下NVM 的磨損情況

      Fig.9 NVM wear under attack 3圖9 攻擊方式3 的攻擊下NVM 的磨損情況

      Fig.10 NVM wear under attack 4圖10 攻擊方式4 的攻擊下NVM 的磨損情況

      Fig.11 NVM wear under attack 5圖11 攻擊方式5 的攻擊下NVM 的磨損情況

      Fig.12 NVM wear under all attacks mode proposed in this paper圖12 本文探索出的5 種攻擊方式的攻擊下NVM 的磨損情況

      PMFS 在本文提出的5 種攻擊方式的磨損攻擊下,耗時(shí)最長(zhǎng)的是病毒程序1,即通過一個(gè)簡(jiǎn)單的for 循環(huán),在一個(gè)給定的目錄下執(zhí)行108次創(chuàng)建文件和刪除文件操作,在13 分鐘內(nèi)就能把底層NVM 存儲(chǔ)設(shè)備磨損穿,NVM總的寫次數(shù)為1.5×109,但是使用PFWD 技術(shù)的WPFS 文件系統(tǒng)卻能保護(hù)NVM 承受21 943 倍于PMFS 的文件操作/寫操作.表6 分析WPFS 和PMFS 所有物理頁的最大寫次數(shù)、標(biāo)準(zhǔn)偏差和變異系數(shù).實(shí)驗(yàn)結(jié)果表明:PFWD技術(shù)通過把大量集中對(duì)少數(shù)存儲(chǔ)區(qū)的寫操作分散到整個(gè)NVM 存儲(chǔ)空間,實(shí)現(xiàn)了NVM 存儲(chǔ)空間的磨損均衡,能有效防御病毒程序通過簡(jiǎn)單的文件操作就能把底層的NVM 存儲(chǔ)設(shè)備磨損穿.

      Table 6 Analysis for the wear of NVM under the five proposed wear attacks表6 分析NVM 在提出的5 種磨損攻擊下的磨損情況

      由圖7 可知:病毒程序1 在PMFS 中運(yùn)行不到13 分鐘,就對(duì)NVM 的3 個(gè)頁面造成超過108次寫操作.假設(shè)底層NVM 存儲(chǔ)設(shè)備的寫耐受度為108[24-27],這3 個(gè)NVM 存儲(chǔ)單元即已被磨損穿.與此同時(shí),其他90%以上的NVM 頁面的寫次數(shù)仍然為0.表6 中,在PMFS 和WPFS 上分別運(yùn)行病毒程序1 后,其底層NVM 物理頁的最大寫次數(shù)分別為6.0×108和6.8×104,PMFS/WPFS 的倍數(shù)高達(dá)8 824;其次,兩者的標(biāo)準(zhǔn)偏差分別為1 732.5 和7 394 591.8,PMFS/WPFS 的倍數(shù)高達(dá)4 268;變異系數(shù)分別為0.026 6 和50.647 9,PMFS/WPFS 的倍數(shù)高達(dá)1 904.病毒程序1 在目錄下反復(fù)執(zhí)行創(chuàng)建文件和刪除文件,達(dá)到把超級(jí)塊、索引節(jié)點(diǎn)、目錄文件數(shù)據(jù)、文件索引結(jié)構(gòu)和日志的存儲(chǔ)區(qū)迅速磨損穿.由于PMFS 沒有對(duì)以上數(shù)據(jù)的存儲(chǔ)區(qū)做磨損保護(hù),尤其是日志區(qū)域,更是整個(gè)文件系統(tǒng)反復(fù)使用一塊固定的日志PMFS-Log[9],所以無法抵御病毒程序的惡意磨損攻擊.而WPFS 考慮到以上數(shù)據(jù)存儲(chǔ)區(qū)的磨損保護(hù),把大量集中對(duì)少數(shù)存儲(chǔ)區(qū)的寫操作分散到整個(gè)存儲(chǔ)空間,實(shí)現(xiàn)了NVM 的磨損均衡,能夠有效防御病毒程序1 的惡意磨損攻擊.

      由圖8 可知,病毒程序2 在PMFS 中運(yùn)行不到9 分鐘,就對(duì)NVM 的兩個(gè)頁面造成超過108次寫操作.假設(shè)底層NVM 存儲(chǔ)設(shè)備的寫耐受度為108[24-27],這兩個(gè)NVM 磨損單元即已被磨損穿.與此同時(shí),其他90%以上的NVM頁面的寫次數(shù)仍然為0.表6 中,病毒程序2 分別在PMFS 和WPFS 運(yùn)行,NVM 物理頁的最大寫次數(shù)分別為4.0×108和6.8×104,PMFS/WPFS 的倍數(shù)高達(dá)5 882;其次,兩者的標(biāo)準(zhǔn)偏差分別為1 732.5 和5 590 350.8,PMFS/WPFS 的倍數(shù)高達(dá)3 227;變異系數(shù)分別為0.026 6 和57.241 8,PMFS/WPFS 的倍數(shù)高達(dá)2 152.病毒程序2對(duì)文件反復(fù)執(zhí)行創(chuàng)建硬鏈接和刪除硬鏈接,達(dá)到迅速把索引節(jié)點(diǎn)、目錄文件數(shù)據(jù)和日志的存儲(chǔ)區(qū)磨損穿.由于PMFS 沒有對(duì)以上數(shù)據(jù)的存儲(chǔ)區(qū)做磨損保護(hù),所以無法抵御病毒程序的惡意磨損攻擊.而WPFS 考慮到以上數(shù)據(jù)存儲(chǔ)區(qū)的磨損保護(hù),把大量集中對(duì)少數(shù)存儲(chǔ)區(qū)的寫操作分散到整個(gè)存儲(chǔ)空間,實(shí)現(xiàn)了NVM 的磨損均衡,能夠有效防御病毒程序2 的惡意磨損攻擊.

      由圖9 可知:病毒程序3 在PMFS 中運(yùn)行不到12 分鐘,就對(duì)NVM 的4 個(gè)頁面造成超過108次寫操作.假設(shè)底層NVM 存儲(chǔ)設(shè)備的寫耐受度為108[24-27],這4 個(gè)NVM 磨損單元即已被磨損穿.與此同時(shí),其他90%以上的NVM 頁面的寫次數(shù)仍然為0.如表6 所示:病毒程序3 分別在PMFS 和WPFS 運(yùn)行,NVM 物理頁的最大寫次數(shù)分別為6.0×108和7.4×104,PMFS/WPFS 的倍數(shù)高達(dá)8 108;其次,兩者的標(biāo)準(zhǔn)偏差分別為1 732.5 和7 460 140.0,PMFS/WPFS 的倍數(shù)高達(dá)4 306;變異系數(shù)分別為0.024 3 和47.821 4,PMFS/WPFS 的倍數(shù)高達(dá)1 968.病毒程序3對(duì)文件反復(fù)執(zhí)行創(chuàng)建軟鏈接和刪除軟鏈接,達(dá)到迅速把超級(jí)塊、索引節(jié)點(diǎn)、目錄文件數(shù)據(jù)和日志的存儲(chǔ)區(qū)磨損穿.由于PMFS 沒有對(duì)以上數(shù)據(jù)存儲(chǔ)區(qū)做磨損保護(hù),所以無法抵御病毒程序的惡意磨損攻擊.而WPFS 考慮到以上數(shù)據(jù)存儲(chǔ)區(qū)的磨損保護(hù),把大量集中對(duì)少數(shù)存儲(chǔ)區(qū)的寫操作分散到整個(gè)存儲(chǔ)空間,實(shí)現(xiàn)了NVM 的磨損均衡,能夠有效防御病毒程序3 的惡意磨損攻擊.

      由圖10 可知:病毒程序4 在PMFS 中運(yùn)行不到2 分鐘,就對(duì)NVM 的一個(gè)頁面造成超過108次寫操作.假設(shè)底層NVM 存儲(chǔ)設(shè)備的寫耐受度為108[24-27],這一個(gè)NVM 磨損單元即已被磨損穿.與此同時(shí),其他99.99%以上的NVM 頁面的寫次數(shù)仍然為0.如表6 所示:病毒程序4 分別在PMFS 和WPFS 運(yùn)行,NVM 物理頁的最大寫次數(shù)分別為1.0×108和6.8×104,PMFS/WPFS 的倍數(shù)高達(dá)1 471;其次,兩者的標(biāo)準(zhǔn)偏差分別為1 732.5 和988 211.8,PMFS/WPFS 的倍數(shù)高達(dá)570;變異系數(shù)分別為0.026 6 和101.192 9,PMFS/WPFS 的倍數(shù)高達(dá)3 804.病毒程序4反復(fù)對(duì)文件數(shù)據(jù)的某個(gè)區(qū)間執(zhí)行覆蓋寫操作,達(dá)到迅速把超級(jí)塊、文件數(shù)據(jù)、文件索引結(jié)構(gòu)的存儲(chǔ)區(qū)磨損穿.由于PMFS 沒有對(duì)以上數(shù)據(jù)的存儲(chǔ)區(qū)做磨損保護(hù),所以無法抵御病毒程序的惡意磨損攻擊.而WPFS 考慮到以上數(shù)據(jù)存儲(chǔ)區(qū)的磨損保護(hù),把大量集中對(duì)少數(shù)存儲(chǔ)區(qū)的寫操作分散到整個(gè)存儲(chǔ)空間,實(shí)現(xiàn)了NVM 的磨損均衡,能夠有效防御病毒程序4 的惡意磨損攻擊.

      由圖11 可知:病毒程序5 在PMFS 中運(yùn)行不到2 分鐘,就對(duì)NVM 的4 個(gè)頁面造成超過108次寫操作.假設(shè)底層NVM 存儲(chǔ)設(shè)備的寫耐受度為108[24-27],這4 個(gè)NVM 磨損單元即已被磨損穿.與此同時(shí),其他90%以上的NVM 頁面的寫次數(shù)仍然為0.如表6 所示:病毒程序5 分別在PMFS 和WPFS 運(yùn)行,NVM 物理頁的最大寫次數(shù)分別為7.0×108和8.6×104,PMFS/WPFS 的倍數(shù)高達(dá)8 140;其次,兩者的標(biāo)準(zhǔn)偏差分別為1 732.5 和9 054 293.1,PMFS/WPFS 的倍數(shù)高達(dá)5 226;變異系數(shù)分別為0.020 8 和51.191 4,PMFS/WPFS 的倍數(shù)高達(dá)2 461.病毒程序5對(duì)文件反復(fù)執(zhí)行重命名操作,達(dá)到迅速把索引節(jié)點(diǎn)、目錄文件數(shù)據(jù)和日志的存儲(chǔ)區(qū)磨損穿.由于PMFS 沒有對(duì)以上存儲(chǔ)區(qū)做磨損保護(hù),所以無法抵御病毒程序的惡意磨損攻擊.而WPFS 考慮到以上數(shù)據(jù)存儲(chǔ)區(qū)的磨損保護(hù),把大量集中對(duì)少數(shù)存儲(chǔ)區(qū)的寫操作分散到整個(gè)存儲(chǔ)空間,實(shí)現(xiàn)了NVM 的磨損均衡,能夠有效防御病毒程序5 的惡意磨損攻擊.

      由圖12 可知:在本文探索出的5 種病毒程序共同發(fā)動(dòng)對(duì)NVM 的磨損攻擊,在PMFS 運(yùn)行,就對(duì)NVM 的5個(gè)頁面造成超過108次寫操作.假設(shè)底層NVM 存儲(chǔ)設(shè)備的寫耐受度為108[24-27],這5 個(gè)NVM 磨損單元即已被磨損穿;還造成NVM 的18 個(gè)頁面超過8.6×106,接近NVM 存儲(chǔ)設(shè)備的寫耐受度.與此同時(shí),其他90%以上的NVM 頁面的寫次數(shù)仍然為0.但是在WPFS 運(yùn)行,NVM 物理頁的最大寫次數(shù)為364 095.由于PMFS[9]沒有對(duì)文件系統(tǒng)元數(shù)據(jù)和文件數(shù)據(jù)的存儲(chǔ)區(qū)做磨損保護(hù),所以無法抵御病毒程序的惡意磨損攻擊.而WPFS 考慮到NVM的磨損保護(hù),把大量集中對(duì)少數(shù)存儲(chǔ)區(qū)的寫操作分散到整個(gè)存儲(chǔ)空間,實(shí)現(xiàn)了NVM 的磨損均衡,能夠有效防御病毒程序的惡意磨損攻擊.

      每次對(duì)物理頁數(shù)據(jù)和索引節(jié)點(diǎn)的更新,寫次數(shù)并不是立即寫回物理頁寫次數(shù)表和索引節(jié)點(diǎn)映射表,而是通過更新DRAM 副本的方式寫回,因此,這兩個(gè)數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)區(qū)的寫次數(shù)較少.所以表6 中,WPFS 沒有統(tǒng)計(jì)這些物理頁的寫次數(shù);因?yàn)楣舴绞? 和攻擊方式5 沒有攻擊索引節(jié)點(diǎn)表存儲(chǔ)區(qū),所以這兩種攻擊方式WPFS 也沒有統(tǒng)計(jì)索引節(jié)點(diǎn)表的物理頁的寫次數(shù).由表6 可知:由于PMFS[9]并沒有對(duì)元數(shù)據(jù)和文件數(shù)據(jù)進(jìn)行磨損保護(hù),本文探索的5 種病毒程序都是通過簡(jiǎn)單的文件操作,在PMFS[9]文件系統(tǒng),大量寫操作集中在少數(shù)的存儲(chǔ)區(qū),導(dǎo)致NVM 很快就被磨損穿;但是WPFS 考慮了NVM 的磨損保護(hù),把大量集中對(duì)少數(shù)存儲(chǔ)區(qū)的寫操作分散到NVM的整個(gè)存儲(chǔ)空間,實(shí)現(xiàn)NVM 的磨損均衡,能有效防御病毒程序發(fā)動(dòng)對(duì)NVM 的磨損攻擊.

      圖13 表示在病毒程序的磨損攻擊下,持久化內(nèi)存文件系統(tǒng)是否采用本文提出的PFWD 技術(shù)時(shí)NVM 的磨損對(duì)比,橫坐標(biāo)表示NVM 總的寫次數(shù),縱坐標(biāo)表示NVM 以頁為粒度的最大寫次數(shù).如果持久化內(nèi)存文件系統(tǒng)未使用PFWD 技術(shù),NVM 很快就會(huì)被磨損穿;如果持久化內(nèi)存文件系統(tǒng)使用PFWD 技術(shù),則NVM 所有物理頁的最大寫次數(shù)僅僅為9 766,遠(yuǎn)遠(yuǎn)未達(dá)到底層NVM 存儲(chǔ)設(shè)備的寫耐受度108[24-27].在WPFS 文件系統(tǒng),病毒程序要使得NVM 被磨損穿,NVM 總的寫次數(shù)幾乎要達(dá)到10240×108次,NVM 物理頁的寫次數(shù)都接近108,使得NVM總的寫次數(shù)提高了10 240 倍,而且該倍數(shù)隨著NVM 存儲(chǔ)空間的增大而增大.

      Fig.13 Comparison of NVM wear in WPFS and persistent in-memory file system when PFWD is not used under wear attacks圖13 對(duì)比WPFS 和持久化內(nèi)存文件系統(tǒng)未采用PFWD 技術(shù)時(shí),NVM 在磨損攻擊下的磨損情況

      4.3 性能實(shí)驗(yàn)對(duì)比

      為了評(píng)估PFWD 機(jī)制的性能開銷,實(shí)驗(yàn)中使用FIO[36]測(cè)試工具對(duì)比測(cè)試WPFS-NoPFWD 和WPFS 在不同塊大小的讀寫性能,測(cè)試結(jié)果如圖14~圖17 所示,圖中橫坐標(biāo)為讀寫塊大小分別1K,2K,4K,8K,16K,32K,64K,128K,256K,512K,縱坐標(biāo)表示文件讀寫吞吐率.圖14、圖15 分別表示隨機(jī)讀寫的性能對(duì)比,圖16、圖17 分別表示順序讀寫的性能對(duì)比.

      Fig.14 Random read圖14 隨機(jī)讀

      Fig.15 Random write圖15 隨機(jī)寫

      Fig.16 Sequential read圖16 順序讀

      Fig.17 Sequential write圖17 順序?qū)?/p>

      以上性能實(shí)驗(yàn)結(jié)果顯示:對(duì)于順序讀和隨機(jī)讀操作,WPFS 沒有明顯的性能下降.這是因?yàn)樽x操作不會(huì)觸發(fā)磨損均衡操作.對(duì)于順序?qū)懞碗S機(jī)寫操作,采用PFWD 技術(shù)的WPFS 會(huì)有5%左右的性能損失.原因是WPFS 需要在寫流程中更新物理頁寫次數(shù)表和索引節(jié)點(diǎn)映射表,并實(shí)施超級(jí)塊、文件數(shù)據(jù)、文件索引結(jié)構(gòu)和索引節(jié)點(diǎn)的遷移操作.總體而言,PFWD 的開銷極小.

      5 結(jié) 論

      本文首次探索多種借助持久化內(nèi)存文件系統(tǒng)的文件操作對(duì)NVM 造成惡意磨損的攻擊方式.提出持久化內(nèi)存文件系統(tǒng)磨損防御技術(shù)PFWD.PFWD 技術(shù)通過把大量集中對(duì)少數(shù)存儲(chǔ)區(qū)的寫操作分散到整個(gè)NVM 存儲(chǔ)空間,實(shí)現(xiàn)了NVM 存儲(chǔ)空間的磨損均衡,能有效防御病毒程序通過簡(jiǎn)單的文件操作就能把底層的NVM 存儲(chǔ)設(shè)備磨損穿.即使NVM 存儲(chǔ)設(shè)備在硬件層已經(jīng)實(shí)現(xiàn)了NVM 的磨損均衡,PFWD 技術(shù)在持久化內(nèi)存文件系統(tǒng)層通過避免集中的寫操作,使得寫操作分散到整個(gè)NVM 存儲(chǔ)空間,能使得硬件層的磨損均衡算法減少數(shù)據(jù)遷移的開銷,提高存儲(chǔ)系統(tǒng)的吞吐率.

      猜你喜歡
      日志內(nèi)存磨損
      一名老黨員的工作日志
      扶貧日志
      心聲歌刊(2020年4期)2020-09-07 06:37:14
      “春夏秋冬”的內(nèi)存
      套管磨損機(jī)理研究
      游學(xué)日志
      鉆頭磨損后怎樣更換
      閃存的磨損均衡專利技術(shù)綜述
      河南科技(2014年19期)2014-02-27 14:15:25
      一種基于粗集和SVM的Web日志挖掘模型
      基于內(nèi)存的地理信息訪問技術(shù)
      防磨損襪子
      美姑县| 光山县| 邢台市| 杨浦区| 贡觉县| 光山县| 厦门市| 台中县| 长岭县| 城步| 阿拉善左旗| 肇东市| 翼城县| 汨罗市| 宕昌县| 将乐县| 沈阳市| 连云港市| 大英县| 横山县| 调兵山市| 六安市| 章丘市| 彰化县| 孟州市| 湘阴县| 若尔盖县| 通江县| 岑巩县| 平塘县| 麦盖提县| 永泰县| 红河县| 庆安县| 吉木萨尔县| 桃园市| 云和县| 蛟河市| 余干县| 兴和县| 迭部县|