,
(西安郵電大學(xué) 計(jì)算機(jī)學(xué)院,西安 710061)
Android是一款基于Linux內(nèi)核的開源操作系統(tǒng),一經(jīng)提出便在移動(dòng)設(shè)備上迅速普及,目前Android系統(tǒng)已經(jīng)占據(jù)了全球智能手機(jī)五成份額[1]。Android智能手機(jī)廣泛使用體積小、功耗低的eMMC(Embedded Multi Media Card)作為數(shù)據(jù)存儲(chǔ)設(shè)備,區(qū)別于傳統(tǒng)機(jī)械硬盤,eMMC使用閃存芯片作為存儲(chǔ)介質(zhì)[2]。同時(shí)因手機(jī)電源不穩(wěn)定的特點(diǎn),Android默認(rèn)使用EXT4文件系統(tǒng)[3],作為L(zhǎng)inux中最常用的日志文件系統(tǒng),采用JBD2(Journal Block Device 2)軟件[4]進(jìn)行日志記錄,因此擁有良好的故障恢復(fù)能力,能夠保證Android系統(tǒng)的穩(wěn)定性以及數(shù)據(jù)的安全性。目前Android存儲(chǔ)系統(tǒng)架構(gòu)與Linux存儲(chǔ)系統(tǒng)架構(gòu)類似,有著用戶空間與內(nèi)核空間兩部分。內(nèi)核空間中主要包括EXT4文件系統(tǒng)與eMMC存儲(chǔ)設(shè)備兩個(gè)部分,EXT4文件系統(tǒng)通過(guò)虛擬文件系統(tǒng)向用戶空間提供系統(tǒng)調(diào)用接口,而EXT4文件系統(tǒng)底層則通過(guò)通用塊層、塊設(shè)備驅(qū)動(dòng)層與eMMC塊設(shè)備關(guān)聯(lián)起來(lái)[5]。
目前針對(duì)Android系統(tǒng)存儲(chǔ)性能優(yōu)化的方案主要有兩個(gè)方面:一方面是用戶空間中對(duì)應(yīng)用軟件或者軟件依賴運(yùn)行庫(kù)的優(yōu)化;另一方面是內(nèi)核空間中對(duì)文件系統(tǒng)的優(yōu)化。用戶空間中的優(yōu)化主要集中于對(duì)Android中大量使用的SQLite數(shù)據(jù)庫(kù)技術(shù)的改進(jìn),例如通過(guò)消除SQLite的WAL模式下數(shù)據(jù)庫(kù)checkpoints的寫冗余部分,獲取存儲(chǔ)性能的提升[6],但是這樣的方案只能夠提升軟件利用SQLite技術(shù)存儲(chǔ)數(shù)據(jù)時(shí)的存儲(chǔ)效率,無(wú)法對(duì)Android系統(tǒng)中文本文件、多媒體文件等多種類型的文件讀寫產(chǎn)生有效提升。內(nèi)核空間中的優(yōu)化主要包括對(duì)Android默認(rèn)使用的EXT4文件系統(tǒng)的優(yōu)化以及針對(duì)Android使用的閃存設(shè)備設(shè)計(jì)專門的文件系統(tǒng)兩種方案,前者優(yōu)化調(diào)整EXT4文件系統(tǒng)中的重要參數(shù)從而提升文件系統(tǒng)的整體存儲(chǔ)性能,但是方案中并沒(méi)有考慮到EXT4文件系統(tǒng)的日志功能用于閃存設(shè)備所造成的影響,而且效果并不理想[7];后者則有著著名的F2FS(Flash Friendly File System)[8],此方案雖然在小文件的隨機(jī)讀寫上有著較大的提升,但是由于開發(fā)時(shí)間尚短,在系統(tǒng)穩(wěn)定性、軟件兼容性等方面仍無(wú)法與EXT4文件系統(tǒng)相比,因此目前尚未廣泛使用。
針對(duì)Android智能手機(jī)普遍采用的eMMC存儲(chǔ)設(shè)備掛載EXT4文件系統(tǒng)的存儲(chǔ)系統(tǒng)架構(gòu),本文分析了EXT4文件系統(tǒng)日志特性導(dǎo)致其對(duì)閃存設(shè)備文件讀寫性能衰減的問(wèn)題,提出了一種能夠消除此問(wèn)題的EXT4文件系統(tǒng)日志功能優(yōu)化方案。
EXT4文件系統(tǒng)借用了數(shù)據(jù)庫(kù)中事務(wù)的思想,為需同步至磁盤的數(shù)據(jù)建立相關(guān)的日志數(shù)據(jù),以便能夠在發(fā)生系統(tǒng)崩潰后可以利用日志數(shù)據(jù)恢復(fù),重新使文件系統(tǒng)保持一致的狀態(tài)[9]。EXT4文件系統(tǒng)掛載時(shí)將磁盤空間劃出一小塊空間作為日志數(shù)據(jù)區(qū)域,專門用于存儲(chǔ)日志數(shù)據(jù)。文件系統(tǒng)讀寫文件時(shí),保持原有的讀寫磁盤邏輯不變,通過(guò)JBD2進(jìn)程將影響文件系統(tǒng)一致性的元數(shù)據(jù)塊及時(shí)寫入到日志數(shù)據(jù)區(qū)域中。
表1 EXT4文件系統(tǒng)數(shù)據(jù)同步事務(wù)狀態(tài)表
圖1描述了EXT4文件系統(tǒng)日志數(shù)據(jù)流。虛線箭頭表示了當(dāng)文件系統(tǒng)讀寫數(shù)據(jù)中途崩潰時(shí)的修復(fù)過(guò)程,重新掛載分區(qū)時(shí)根據(jù)日志數(shù)據(jù)區(qū)域中的數(shù)據(jù),逐一將記錄下的元數(shù)據(jù)寫回到磁盤原始位置,保證文件系統(tǒng)的一致性。實(shí)線箭頭表示每次EXT4文件系統(tǒng)讀寫磁盤時(shí)的邏輯,首先由JBD2進(jìn)程將每次需要寫入的數(shù)據(jù)中元數(shù)據(jù)部分拷貝一份,將元數(shù)據(jù)封裝成日志數(shù)據(jù)后提交到日志數(shù)據(jù)區(qū)域,之后EXT4文件系統(tǒng)對(duì)磁盤進(jìn)行正常讀寫數(shù)據(jù)流程,這樣的一次流程被稱為一次事務(wù)。表1為一個(gè)事務(wù)幾種狀態(tài)的描述[10],以區(qū)分事務(wù)的執(zhí)行程度。
圖1 EXT4文件系統(tǒng)日志數(shù)據(jù)流圖
EXT4的日志數(shù)據(jù)區(qū)域以文件系統(tǒng)的塊為單位組織日志數(shù)據(jù),有著類似于通用數(shù)據(jù)區(qū)域的結(jié)構(gòu)劃分,但是相比通用數(shù)據(jù)區(qū)域更加簡(jiǎn)單,起始位置存放了日志數(shù)據(jù)的超級(jí)塊,用于組織管理日志數(shù)據(jù)區(qū)域,隨后便是按順序以及一定規(guī)則存放的各次事務(wù)日志數(shù)據(jù)。一次事務(wù)的日志數(shù)據(jù)主要由描述塊、數(shù)據(jù)塊和提交塊組成,其中描述塊標(biāo)識(shí)了一份日志數(shù)據(jù)的起始位置,數(shù)據(jù)塊則存儲(chǔ)了日志數(shù)據(jù)內(nèi)容,提交塊用于表明本次事務(wù)是一次完整的事務(wù),在文件系統(tǒng)崩潰恢復(fù)時(shí)只會(huì)使用完整的事務(wù)數(shù)據(jù)。在進(jìn)行文件系統(tǒng)崩潰恢復(fù)時(shí),需要找到日志數(shù)據(jù)的數(shù)據(jù)塊所在原文件系統(tǒng)的塊地址進(jìn)行回寫修復(fù),因此日志數(shù)據(jù)中的各個(gè)數(shù)據(jù)塊與原文件系統(tǒng)的目標(biāo)塊的對(duì)應(yīng)關(guān)系就尤為重要,這種對(duì)應(yīng)關(guān)系存放在描述塊中。由于數(shù)據(jù)塊數(shù)量不定,JBD2在描述塊中通過(guò)一個(gè)數(shù)據(jù)結(jié)構(gòu)表明一組對(duì)應(yīng)關(guān)系,該數(shù)據(jù)結(jié)構(gòu)為:
typedef struct journal_block_tag_s
{
__be32 t_blocknr;
__be32 t_flags;
__be32 t_blocknr_high;
} journal_block_tag_t;
該結(jié)構(gòu)體通過(guò)其在描述塊中序號(hào)標(biāo)識(shí)代表的數(shù)據(jù)塊號(hào),通過(guò)t_blocknr字段標(biāo)識(shí)對(duì)應(yīng)的原文件系統(tǒng)塊地址。每個(gè)描述塊中都包含了一個(gè)或多個(gè)journal_block_tag_t結(jié)構(gòu)體用于表明本次事務(wù)日志數(shù)據(jù)中各數(shù)據(jù)塊對(duì)應(yīng)的文件系統(tǒng)原始位置。
閃存轉(zhuǎn)換層(Flash Translation Layer,簡(jiǎn)稱FTL)是一種通過(guò)塊設(shè)備模擬方式實(shí)現(xiàn)閃存設(shè)備存儲(chǔ)系統(tǒng)的技術(shù)。將底層NAND閃存介質(zhì)的管理及操作封裝起來(lái),為文件系統(tǒng)提供塊設(shè)備讀寫接口,從而讓文件系統(tǒng)訪問(wèn)NAND型閃存就像訪問(wèn)傳統(tǒng)機(jī)械硬盤一樣[11]。閃存轉(zhuǎn)換層的功能主要有兩點(diǎn):地址映射及垃圾回收。一般情況下,閃存轉(zhuǎn)換層通過(guò)維護(hù)兩個(gè)靜態(tài)表來(lái)完成它的功能[12],如圖2所示。
圖2 閃存轉(zhuǎn)換層結(jié)構(gòu)圖
閃存轉(zhuǎn)換層通過(guò)其內(nèi)部維護(hù)的地址映射表和空間管理表來(lái)管理邏輯地址轉(zhuǎn)換以及閃存的物理空間。當(dāng)文件系統(tǒng)通過(guò)塊設(shè)備讀寫接口讀寫塊設(shè)備時(shí),由閃存設(shè)備接收對(duì)邏輯區(qū)塊地址的讀寫請(qǐng)求,根據(jù)讀寫請(qǐng)求中的邏輯區(qū)塊地址,在閃存轉(zhuǎn)換層中通過(guò)地址映射表找到對(duì)應(yīng)的物理區(qū)塊地址進(jìn)行訪問(wèn),這就是閃存轉(zhuǎn)換層的地址映射功能。垃圾回收即對(duì)閃存中的無(wú)用數(shù)據(jù)進(jìn)行回收,閃存轉(zhuǎn)換層指定一個(gè)閃存塊進(jìn)行垃圾回收,通過(guò)空間管理表中的頁(yè)面狀態(tài)判斷當(dāng)前頁(yè)中的數(shù)據(jù)是否需要保留,對(duì)需要保留的數(shù)據(jù)頁(yè)(Live,頁(yè)面狀態(tài)中記錄了物理頁(yè)面對(duì)應(yīng)的邏輯區(qū)塊地址)暫時(shí)拷貝至緩存或其他區(qū)域,等待塊擦除完成再次寫入原位置,對(duì)于處于已經(jīng)無(wú)用的數(shù)據(jù)頁(yè)面(頁(yè)面狀態(tài)為dead)則無(wú)需拷貝,直接擦除[13]。
EXT4文件系統(tǒng)掛載時(shí)對(duì)塊設(shè)備劃分的日志數(shù)據(jù)區(qū)域是對(duì)邏輯區(qū)塊地址的劃分,即針對(duì)閃存轉(zhuǎn)換層維護(hù)的地址映射表中邏輯區(qū)塊地址進(jìn)行了通用數(shù)據(jù)區(qū)域與日志數(shù)據(jù)區(qū)域的劃分。但是當(dāng)實(shí)際數(shù)據(jù)同步至閃存設(shè)備時(shí),邏輯區(qū)塊地址實(shí)際映射的閃存物理地址是根據(jù)閃存設(shè)備自身?yè)p耗均衡等機(jī)制確定并建立映射的,這樣就會(huì)導(dǎo)致在EXT4文件系統(tǒng)提出IO請(qǐng)求的邏輯區(qū)塊地址上,通用數(shù)據(jù)與日志數(shù)據(jù)嚴(yán)格分離,但是在閃存設(shè)備中,兩種數(shù)據(jù)卻可能是混雜在同一個(gè)閃存塊中的。
如圖3所示,日志數(shù)據(jù)區(qū)域是邏輯區(qū)塊地址范圍為100至149的區(qū)域,當(dāng)EXT4文件系統(tǒng)開始將數(shù)據(jù)同步至閃存設(shè)備時(shí),文件數(shù)據(jù)寫入到通用數(shù)據(jù)區(qū)域,而日志數(shù)據(jù)寫入到日志數(shù)據(jù)區(qū)域,兩個(gè)區(qū)域都是連續(xù)且嚴(yán)格分離的,但是數(shù)據(jù)寫入到閃存設(shè)備具體頁(yè)時(shí),數(shù)據(jù)會(huì)由閃存設(shè)備根據(jù)自身的策略選擇一個(gè)空白頁(yè)進(jìn)行寫入,這就導(dǎo)致了在一個(gè)閃存設(shè)備的物理塊中,日志數(shù)據(jù)的頁(yè)與通用數(shù)據(jù)的頁(yè)是混雜的。
圖3 通用數(shù)據(jù)及日志數(shù)據(jù)存儲(chǔ)狀況
EXT4文件系統(tǒng)通過(guò)JBD2將日志數(shù)據(jù)提交到日志數(shù)據(jù)區(qū)域,JBD2軟件通過(guò)函數(shù)jbd2_journal_next_lob_block函數(shù)獲取下一個(gè)可寫入的邏輯區(qū)塊地址,此函數(shù)的實(shí)現(xiàn)決定了日志數(shù)據(jù)以何種順序記錄在日志數(shù)據(jù)區(qū)域中。 jbd2_journal_next_log_block函數(shù)中由j_head變量作為日志數(shù)據(jù)區(qū)域的寫指針,用于指向下一個(gè)可寫的邏輯區(qū)塊地址,在每次寫入一個(gè)邏輯塊后通過(guò)自增的方式改變寫指針位置。當(dāng)指針指向日志數(shù)據(jù)區(qū)域尾部即日志數(shù)據(jù)區(qū)域全部寫滿后,指針會(huì)重新指向日志數(shù)據(jù)區(qū)域頭部,即日志數(shù)據(jù)再次從區(qū)域頭部開始寫入。采用這樣方式能夠利用傳統(tǒng)機(jī)械硬盤的可覆寫特性,不對(duì)以往寫入的日志數(shù)據(jù)執(zhí)行刪除操作,直接覆蓋寫入新的日志數(shù)據(jù)。如圖4所示。
圖4 JBD2日志數(shù)據(jù)區(qū)域循環(huán)結(jié)構(gòu)原理
根據(jù)以上情況可以看出,EXT4文件系統(tǒng)可以在日志數(shù)據(jù)區(qū)域不斷的循環(huán)寫入日志數(shù)據(jù),在滿足日志數(shù)據(jù)寫指針到達(dá)日志數(shù)據(jù)區(qū)域尾部之前,日志數(shù)據(jù)不會(huì)主動(dòng)刪除,對(duì)于閃存設(shè)備而言,這些數(shù)據(jù)隨機(jī)分散在閃存設(shè)備的各個(gè)塊中,并且與通用數(shù)據(jù)混雜在一起,閃存設(shè)備進(jìn)行垃圾回收時(shí),這些數(shù)據(jù)所在頁(yè)的狀態(tài)仍為L(zhǎng)ive,導(dǎo)致閃存設(shè)備垃圾回收時(shí)仍然需要拷貝這部分無(wú)用日志數(shù)據(jù),造成文件系統(tǒng)讀寫閃存文件性能衰減的現(xiàn)象,本文對(duì)此問(wèn)題提出相應(yīng)解決方案。
本文針對(duì)以上描述的問(wèn)題,提出主動(dòng)刪除事務(wù)日志數(shù)據(jù)策略,根據(jù)EXT4文件系統(tǒng)數(shù)據(jù)同步事務(wù)處于Finished狀態(tài)時(shí),通用數(shù)據(jù)以及日志數(shù)據(jù)已經(jīng)全部寫入磁盤的含義,結(jié)合JBD2日志數(shù)據(jù)區(qū)域循環(huán)結(jié)構(gòu)的特性,在事務(wù)狀態(tài)變?yōu)镕inished時(shí)記錄本次事務(wù)日志數(shù)據(jù)的結(jié)束邏輯區(qū)塊地址,多次數(shù)據(jù)同步事務(wù)的過(guò)程中,通過(guò)上次事務(wù)與本次事務(wù)保存下來(lái)的邏輯區(qū)塊地址確定本次事務(wù)的日志數(shù)據(jù)位置,進(jìn)行主動(dòng)刪除操作。對(duì)于開啟日志功能的EXT4文件系統(tǒng),優(yōu)化后單次數(shù)據(jù)同步操作的基本流程如圖5所示。
圖5 優(yōu)化后EXT4單次數(shù)據(jù)同步事務(wù)流程
通過(guò)多次數(shù)據(jù)同步事務(wù)中對(duì)圖5中描述的流程不斷循環(huán),達(dá)到及時(shí)刪除無(wú)用日志數(shù)據(jù)的目的,消除因日志功能導(dǎo)致的EXT4文件系統(tǒng)讀寫性能衰減問(wèn)題。根據(jù)事務(wù)的Finished狀態(tài)記錄下本次事務(wù)日志數(shù)據(jù)的結(jié)束邏輯區(qū)塊地址,同時(shí)檢查是否存在有效的上次事務(wù)日志數(shù)據(jù)的結(jié)束邏輯區(qū)塊地址,若存在,則兩地址之間的頁(yè)保存了本次事務(wù)的日志數(shù)據(jù),將這段邏輯區(qū)域地址對(duì)應(yīng)的閃存物理頁(yè)面無(wú)效化,從而將日志數(shù)據(jù)刪除;若不存在,則不進(jìn)行閃存頁(yè)面無(wú)效化操作,本次事務(wù)保存的地址在下次事務(wù)時(shí)標(biāo)記了日志數(shù)據(jù)的起始區(qū)塊地址,從而實(shí)現(xiàn)下次事務(wù)的日志數(shù)據(jù)刪除操作。
圖6 主動(dòng)刪除事務(wù)日志數(shù)據(jù)策略原理
如圖6所示,在日志數(shù)據(jù)區(qū)域中,事務(wù)日志數(shù)據(jù)的主動(dòng)刪除策略通過(guò)j_invalid_begin與j_invalid_end兩個(gè)變量記錄事務(wù)日志數(shù)據(jù)的邏輯區(qū)塊地址,將日志數(shù)據(jù)刪除,完成后將j_invalid_end向后移動(dòng),作為下次刪除操作的起始位置。當(dāng)日志數(shù)據(jù)的刪除指針到達(dá)日志數(shù)據(jù)區(qū)域尾部時(shí),采取與日志循環(huán)寫入結(jié)構(gòu)相同的策略,刪除指針重新指向日志數(shù)據(jù)區(qū)域頭部。
本文為EXT4文件系統(tǒng)的日志功能實(shí)現(xiàn)了一個(gè)額外的循環(huán)結(jié)構(gòu),將不會(huì)再被使用到的日志數(shù)據(jù)刪除,無(wú)用的日志數(shù)據(jù)基于事務(wù)Finished狀態(tài)進(jìn)行刪除,F(xiàn)inished狀態(tài)即表示正式數(shù)據(jù)已經(jīng)寫入完畢,不再需要該事務(wù)的日志數(shù)據(jù)預(yù)防宕機(jī)、EXT4文件系統(tǒng)崩潰等情況,因此不會(huì)出現(xiàn)有用的日志數(shù)據(jù)被刪除的情況,保證系統(tǒng)穩(wěn)定性的同時(shí)提高文件系統(tǒng)讀寫性能。
為驗(yàn)證本文提出的EXT4文件系統(tǒng)日志功能優(yōu)化方案,進(jìn)行實(shí)機(jī)測(cè)試比較,所用機(jī)型為Samsung Galaxy S5,具體環(huán)境參數(shù)如表2所示。
表2 測(cè)試環(huán)境
對(duì)Linux內(nèi)核修改后編譯并移植至測(cè)試機(jī)器中,進(jìn)行相應(yīng)測(cè)試。
首先通過(guò)A1 SD Bench進(jìn)行測(cè)試,這是一款A(yù)ndroid手機(jī)存儲(chǔ)性能測(cè)試工具,能夠測(cè)試手機(jī)內(nèi)置閃存、RAM等設(shè)備的性能。執(zhí)行50次A1 SD Bench閃存性能測(cè)試,每次分別進(jìn)行100秒讀取及寫入操作,統(tǒng)計(jì)讀取與寫入的數(shù)據(jù)量計(jì)算出對(duì)閃存讀取速度與寫入速度。如圖7、8所示,圖中橫坐標(biāo)為測(cè)試次數(shù)序號(hào),縱坐標(biāo)為讀、寫速度。
通過(guò)圖7可以看到,灰色線條表示優(yōu)化前讀取速度折線圖,黑色線條則表示優(yōu)化后讀取速度。優(yōu)化前EXT4讀取速度范圍約為166.6 Mb/s至181.3 Mb/s,而優(yōu)化后讀取速度范圍約為187.4 Mb/s至199.8 Mb/s,雖然速度存在一定波動(dòng),但是從圖中可以看出,優(yōu)化后的讀取速度相比優(yōu)化前有著明顯的提升。
圖7 優(yōu)化前后讀取速度比較
圖8 優(yōu)化前后寫入速度比較
通過(guò)圖8可以看到,與讀取速度類似,寫入速度也存在波動(dòng)的現(xiàn)象,優(yōu)化前的EXT4寫入速度范圍約為20.2 Mb/s至22.2 Mb/s,優(yōu)化后的寫入速度范圍約為22.6 Mb/s至24.63 Mb/s。雖然優(yōu)化前寫入速度最大值與優(yōu)化后寫入速度的最小值之間的差距并不大,甚至在第18次的測(cè)試中,優(yōu)化前后的寫入速度差僅為0.49 Mb/s,但是在整體折線圖的分布上,優(yōu)化后寫入性能有著明顯提升。此外通過(guò)以上測(cè)試可以看出,讀取速度明顯優(yōu)于寫入速度,這主要是由于Android所使用NAND閃存介質(zhì)本身讀取性能遠(yuǎn)高于寫入性能導(dǎo)致的。對(duì)以上測(cè)試數(shù)據(jù)進(jìn)行統(tǒng)計(jì)計(jì)算后,本方案優(yōu)化后文件系統(tǒng)的讀寫性能提升約11.8%。接下來(lái)編寫程序測(cè)試優(yōu)化前后EXT4對(duì)不同大小文件的讀寫時(shí)間,通過(guò)O_DIRECT標(biāo)志繞過(guò)文件系統(tǒng)緩存,對(duì)各種大小的文件分別測(cè)試10次統(tǒng)計(jì)平均值,測(cè)試結(jié)果如圖9所示。
圖9 不同文件大小讀寫時(shí)間測(cè)試
如圖9所示,縱坐標(biāo)代表不同大小文件的讀寫速度,修改后EXT4對(duì)相同大小文件的讀寫花費(fèi)的時(shí)間相比于原內(nèi)核更短。在文件較小時(shí),優(yōu)化前后花費(fèi)的時(shí)間差別較??;但是當(dāng)文件較大時(shí),優(yōu)化后所花費(fèi)的時(shí)間有著明顯的減少。這是因?yàn)閷?duì)于小文件來(lái)說(shuō),可能觸發(fā)的垃圾回收過(guò)程較少甚至不需要進(jìn)行垃圾回收,因此本方案優(yōu)化效果不明顯,但是在進(jìn)行大文件的讀寫時(shí),會(huì)觸發(fā)更多的閃存垃圾回收,本方案能夠減少閃存垃圾回收中對(duì)無(wú)用日志數(shù)據(jù)的拷貝消耗,因此提升效果較為明顯。
本文提出一種提高EXT4文件系統(tǒng)性能優(yōu)化方案,首先記錄數(shù)據(jù)同步事務(wù)處于Finished狀態(tài)時(shí)日志數(shù)據(jù)的邏輯區(qū)塊地址,結(jié)合上一事務(wù)記錄下的邏輯區(qū)塊地址,令本次日志數(shù)據(jù)所在閃存物理頁(yè)面無(wú)效,最后在垃圾回收時(shí)清除閃存設(shè)備的無(wú)用日志數(shù)據(jù),從而避免日志數(shù)據(jù)的冗余拷貝。
通過(guò)實(shí)驗(yàn)對(duì)比,本文方法能夠減輕閃存設(shè)備因日志數(shù)據(jù)造成的“寫放大”現(xiàn)象,同時(shí)能夠在增強(qiáng)EXT4文件系統(tǒng)讀寫效率的同時(shí),延長(zhǎng)閃存設(shè)備的使用壽命。
在本文研究基礎(chǔ)上,下一步研究工作主要有以下幾個(gè)方面,考慮除日志數(shù)據(jù)以外導(dǎo)致Android存儲(chǔ)性能下降的其他因素,例如針對(duì)SQLite與EXT4的日志記錄不協(xié)調(diào)問(wèn)題進(jìn)行優(yōu)化研究等,實(shí)現(xiàn)Android I/O棧從應(yīng)用程序至底層硬件設(shè)備的一整套優(yōu)化方案,進(jìn)一步提高Android智能手機(jī)的存儲(chǔ)性能。