國
立
交
通
大
學
資訊科學與工程研究所
碩
士
論
文
模擬輔助調整策略固態硬碟高效能緩衝區
A Simulation-Assisted Tuning Strategy for SSD Write
Buffers
研 究 生:吳翊誠
指導教授:張立平 教授
模擬輔助調整策略之固態硬碟高效能緩衝區
A Simulation-Assisted Tuning Strategy for SSD Write Buffers
研 究 生:吳翊誠 Student:Yi-Cheng Wu
指導教授:張立平 Advisor:Li-Pin Chang
國 立 交 通 大 學
資 訊 科 學 與 工 程 研 究 所
碩 士 論 文
A ThesisSubmitted to Institute of Computer Science and Engineering College of Computer Science
National Chiao Tung University in partial Fulfillment of the Requirements
for the Degree of Master
in
Computer Science
July 2011
Hsinchu, Taiwan, Republic of China
誌謝
沒想到兩年一下就過了, 也沒想到我真的可以畢業了。 研究所生活對我而言是一個完 全全新的體悟跟經驗, 一開始真的不太適應腦海中浮現放棄的念頭大概快一百次吧。 最要 感謝的還是張立平老師, 他始終都沒有放棄我在我都放棄自己的時候, 讓我能繼續學習不 只在知識的追求上在做人做事的態度上的學習更是受益良多。 研究所生活中要感謝的人實在太多了, 首先要感謝是電鍋 (郭晉廷)、Master(黃偉杰)、 義勛 (黃義勛) 這三位學長我在他們身上學到很多也受了他們很多幫助; 接著是小節 (李 盈節)、 薇涵、 玟蕙在學業上面受到了你們的照顧;當然還有可愛的學弟妹們陪我度過了不 少的快樂時光 (雖然你們叫我學長我都覺得怪怪的); 還有就是我國中、 高中、 大學的換帖 兄弟們很開心在新竹還能和你們相遇, 你們總是在我心情低落的給我鼓勵、 陪我喝酒; 最 後要感謝的就是我的父母, 感謝他們在背後的鼓勵也很支持我的決定, 雖然我總是很衝動 很任性你們還是包容著我。 最後能完成碩士的學業對我來說非常的開心和夢幻, 謝謝一路上有給過我幫助的人 們。 時間總是推著我要不斷的前進, 我也知道成長不是那麼容易的一件事, 我會繼續努力 加油,最後謝謝大家。中文摘要
在 write buffer 的主要功能有兩個1. 吸收時間區域性2. 收集空間區域性來減緩在
NFTL(NAND Flash translation layer) 寫入的成本, 而在設計 write buffer
replace-ment 策略時勢必要根據此兩種區域性來做設計。 但由於各種不同 write pattern 裡面的
localities 不盡相同又必須考慮當下硬體的資源 (如 write buffer/Log buffer size), 在不
同 situation下所適用的 write buffer replacement 是不盡相同的。 而此篇論文提出利用
simulation 的方式去找出當下情況所應該使用的 write buffer replacement 並能自適性
的調整 replacement 策略在不同的 workload 情況。 而此篇論文的 simulation 是放在
device(firmware) 端, 因此能夠拿來當作我們 simulation 的資源非常有限, 因此我們必
須在拮据的資源下保留少數的資訊去模仿 write buffer/NFTL algorithm的行為並告訴
write buffer manager 當下所該使用的 replacement 策略。 因此我們被須在資源使用量
和準確度上面取得妥協,使得我們的simulation 可以在有限的資源下,產生出準確的模擬
Abstract
Write buffer has two major tasks.One is absorbing temporal locality.The other one is collecting spatial locality. Absorbing temporal locality can reduce hot data.Collecting spatial locality can reduce write traffic of block-level and hybrid mapping.When people design write buffer replacement strategy will take two localities as designed metric. But different workloads have different write pattern behavior,and people has to consider current resource hareware can supports.It is hard to strike a bal-ance between temporal locality and patial locality in different workload. This paper proposes a simulation-assisted Tuning strategy for self-adjusting buffer replacement strategy. We put simulation on device(firmware) part,so we have to use few re-source to imitate write buffer/NFTL algorithm and inform write buffer manager ”what replacement strategy we should use”.So we have to make a tradeoff between few resource and simulation’s accuracy.
目錄
第一章 Introduction 1 第二章 Problem formulation 3 2.1 FTL . . . 3 2.2 Write Buffer . . . 4 2.3 l-buffer . . . 5 第三章 Simulation-assisted tuning 7 3.1 simulation of Write Buffer . . . 73.2 simulation of Log Buffer . . . 12
3.2.1 Committed group management . . . 13
3.2.2 Invalidation handling AND LBA group Shifting . . . 15
3.2.3 log-buffer node data placement . . . 16
3.2.4 early deletion old group . . . 16
3.3 Runtime meta-simulation . . . 16
第四章 Experiment 18 4.1 Experiment Settings . . . 18
4.2 Experiment of vary write buffer size . . . 20
4.2.1 Performance evaluation . . . 20
4.2.2 memory evaluation . . . 21
4.3 Experiment of vary log buffer size . . . 22
4.3.1 Performance evaluation . . . 23
4.3.2 memory evaluation . . . 23
第五章 Conclusion 26
表目次
0.1 16M write buffer 在不同alpha 下 buffer 中平均的 group 數 . . . 8
0.2 Environment Setup . . . 18
0.3 l-buffer Simulation methods . . . 19
0.4 l-buffer setting. . . 19
0.5 other buffer methods . . . 19
圖目次
0.1 different alpha setting in insufficient buffer size . . . 5
0.2 different alpha setting in sufficient buffer size . . . 6
0.3 group density . . . 8
0.4 buffer node type. . . 9
0.5 Record Resolution to Bit Resolution . . . 10
0.6 RecordSize . . . 10
0.7 Record and Bit ratio . . . 11
0.8 log bffer group versus log buffer group . . . 12
0.9 committed data in log buffer group . . . 13
0.10 Remerged by First committed ratio . . . 13
0.11 log buffer 架構/操作 . . . 14 0.12 Invalidation handling . . . 15 0.13 group Shifting . . . 15 0.14 early deletion . . . 17 0.15 Runtime meta-simulation. . . 17 0.16 Windows NB . . . 21 0.17 Ubuntu . . . 22 0.18 memory evaluation . . . 22 0.19 memory-used ratio . . . 23
0.20 vary logbuffer with early deletion . . . 24
0.21 On-line value changes of α . . . 24
第一章
Introduction
NAND flash memory 的硬體架構有省電、 抗震、 體積小等優勢, 因此很多電子行動
產品(如: 行動電話、 多媒體播放器、 數位相框) 使用它來做為作為裡儲存系統的媒介。 隨
著科技製程的進步,NAND flash memory 價格已慢慢下降, 所以 NAND flash memory
容量也慢慢變大,進而慢慢發展出取代機械式傳統硬碟的固態硬碟 (Solid-state disk)。
NAND flash memory主要的操作可以分成三種1.read 2.write 3.erase。 其中read/write
是以 page 為操作的單位而 erase 則是以一個 block 為操作單位, 跟傳統硬碟相比,SSD
有非常好的隨機讀取效能 (random read),因為NAND Flash Memory沒 有傳統硬碟需
要移動機械手臂到待讀取位置所造成的搜尋時間(seek delay); 而在順序讀取(sequential
read) 和 順序寫入 (sequential write),SSD 比起傳統硬碟有相當或者更好的效能; 但是
SSD在隨機寫入(random write) 下的效能非常差。 而在flash memory 更新資料並不像
在傳統硬碟一樣將資料0變1或1變0, 如果 flash memory 要複寫原來已寫過的 data 就
必須需經過 抹除 (erase) 這個耗時的操作做完才可以在寫入 (erase before write), 在韌
體的部分則會有 FTL 介面(Flash translation layer)[7]來將來flash memory 模擬成傳
統的硬碟,使用者並不用也不需知道flash memory的存在和運作。 目前常見的FTL演算
法[1, 5, 10] 採用了out of place 的作法, 將新資料寫入預先保留的空間 (log buffer) 中。
而在 FTL 裡面會包含當預先保留的空間用完時必須將舊資料回收的管理行為 (garbage
collection) ,而garbage collection時必須先在抹除整個區塊前先搬移其中的有效資料頁
(valid Page) 到別的區塊,造成抹除的區塊的成本非常高, 尤其是待抹除 區塊包含愈多的
有效資料頁時, 因此減少 garbage collection 時候的成本是整個 SSD 設計上要考慮的因
素。
而最近改善SSD效能議題是加入一塊 write buffer [3, 8, 6,4,2]來減緩預先保留的
空間(log buffer) 消耗和減少做 garbage collection 時的成本。 由於write buffer 的儲存
媒介是 RAM, 所以並不是 erase before write 類型的儲存媒介對於時間區域性很強的資
料可以直接在write buffer 將此吸收掉避免熱資料消耗了 log buffer 的空間。 而當write
buffer 滿要做 Replacement 時, 假如是 sequential data 寫到FTL 此時可做 cost 較低
switch 操作, 不用寫到 log buffer中, 但假如稍有破碎的 sequential data 寫到FTL, 此
些而外的讀取成本但是可以藉由作成本較低的 switch 避免進入 log buffer 作 cost 較高
的full merge, 這個動作稱為 hole plugging。
這篇論文提出一個新的 write buffer 設計方法, 它主要是 simulation-assisted 的方
式來決定出目前該使用的 buffer replacement 策略, 我們知道 write buffer 主要是要吸
收時間區域性和收集空間區域性, 但是兩方面都 需要 buffer 的空間來吸收或收集, 兩者
其實是會競爭。 而此方法是用 simulation-assisted 根據目前 workload 和 硬體資源多寡
去在吸收時間區域性和收集空間區域性之間去取得妥協進而產生最大的效能。 而在block
plugging 方面此篇論文採用了 l-buffer 的方式藉由觀察 FTL 中的行為成本去決定要做
logging 還是 做 plugging, 藉此得到最大的效能。 第二章 Problem formulation 我們會
介紹基本的NAND Flash Translation Layer 架構 和Flash Storage 上的 write Buffer
管理方法設計時需要考量的原則, 並在 Related Work 說明既有在 Flash Storage 上 的
第二章
Problem formulation
2.1
FTL
NAND Flash Memory 的組成, 主要是由多個區塊所組成, 每一個區塊又是由多個
Pages 所組成。 NAND Flash Memory 的一次寫入/讀取單位 (read/write unit) 則為
一個 Page, 每一個 Page 會有一個 Spare Area, 可以用來儲存 User Area 中資料的
mapping 資訊或者 Error Correcting Code。 而刪除單位 (erase unit) 則為一個區塊,
即每次執行 erase 時都是以區塊為單位。 NAND Flash Memory 在更新資料時與一般的
block device 不同, 如:disk, 在更新某部份的資料後可直接寫回 其原本的實體位置, 但
是 NAND Flash Memory 無法將更改完後的資料直接寫入至該資料原本所在的實體位
置, 必須再額外找空閒的 Page 寫入並將舊的資料標記成 失 效 (invalid), 此動作即稱
為outplace-update。 而原本的 data 則視為失效(invalid), 但也因為如此 NAND Flash
Memory 中常常會存有很多 invalid data, 因此 NAND Flash Memory 每隔一段時間
即要清除那些 invalid data, 以空出空間提供其他 data 儲存, 此動作稱之為 Garbage
Collection。
而大多 FTL 的採取混合式的管理方式, 每個 Logical block 會一對一 mapping 到
一個 physical block 我們稱作 data block。 而其他沒被對應到的 physical block 我們
稱為 spare block 用來吸收 request 的更新, 而 spare block 我們用 page map 來管理,
而 Garbage Collection 的動作把部份在 Log Block 內的資料寫回其應該擺 放的 Data
Block中,在Hybrid NFTL中我們稱之為Merge。 採取混合式的管理方式在block level
mapping 和page level mapping 中取得妥協, 在 mapping table 不 會用像 page level
mapping那麼多的記憶體空間,在random write的效能也不像block level mapping 那
般低落。
這邊要介紹幾種混合式管理方式的 FTL。 SAST[1](set-Associative Sector
Trans-lation)是將數個邏輯上的block 綁成一個 group 而這個 group 裡的 logical block 用共
相同的 log buffer。SAST 有兩個參數 N 和 K,N 是用來決定將多少個 logical block 綁
成一個 group 主要是用來收集空間區域性, 讓 log buffer 使用率提高。 另一個參數是用
來決定此 group log buffer 的深度主要是用來收集時間區域性。 而 N=1且 K=1這種情
log block 只有一個。 而 BAST 和 SAST 最大的問題是 group 間會有 log block 互相 搶奪的現象 (block thrashing)。 FAST[5](full-Associative Sector Translation) 為全部
的logical block 共用全部的log block, 因此不會有log block互相搶奪的現象,但FAST
的問題在於在Garbage Collection關聯到要做merge的Logical block太多,造成此次
Garbage Collection 花費很久時間很有可能使得整個架構 time out 掉。
2.2
Write Buffer
write buffer 的主要作用是1. 吸收時間區域性在減少在 log buffer 空間消耗收集空
間區域性在 Hybrid mapping、block level mapping 的 FTL algrithm 下, 可以做 cost
較低 block plugging。 大多 buffer replacement 都是針對時間/空間區域性去設計它的
replacement 策略。 而不管是吸收時間區域性或者. 收集空間區域都需要 RAM 空間, 也
就是如何去調整兩者的比重是一件在 write buffer 設計上重要的問題。
BPLRU[4]的replacement policy 注重時間區域性, 依 LRU 順序選擇最久沒有被寫
入資料的群為 victim,它目的主要除了吸收熱資料外,對於 sequential write 也可以收集
滿整個群的資料後再寫到NFTL, 而且使用plugging 的機制來增加 Switch Merge 的機
會。 但缺點是因為用 LRU的方式來管理群,如果 hot 和cold 資料同時在群中,因為 hot
資料一直被hit的緣故,造成cold的資料沒有機會flush出去而積累在 Buffer中;另一個
缺點是沒有特別留住資料較少的群, 這些資料是造成 random write 的主要原因, 而且沒
有說明什麼時候做 plugging,如果對這些含較少資料的群也使用 plugging 代價反而會更
高。 FAB[2]的replacement policy 注重空間區域性, 優先選擇含最多資料的群為 victim,
它希望從 Buffer flush 出的資料是大筆 sequential 的資料, 而儘量把含較少資料的群留
在Buffer中。 但該方法的缺點是忽略了時間區域性的重要性, 如果某個群所含的資料量很
少,可能會一直留在buffer 而沒有機會被寫出,這類資料會佔住Buffer的可用空間;另外
對於 sequential write 來說, 大多的群只收集到小部份的 sequential data 就會成為含資
料最多的群而先被寫出,最會導致留在Buffer 中的都是含資料量少的群。CLC[3]將write
buffer 切成兩個部分, 一部分用來吸收時間區性 (熱區段), 另一部分用來收集時間區性
(冷區段), 再從較冷的區段選擇 victim, 缺點是如何去設定兩 個部分的比例難以事前就
知道且固定的設定也無法適用到不同的 Buffer size 以及不同的 workload。 REF[9]是一
個比較不一樣的replacement policy 它並不是以時間區域性或 者空間區域性作為它的主
要依據, 他則是會根據 FTL 裡面的情況去決定, 如果 group 在 log buffer 中有長出來
的關連度,SAST 的方面可以增加 log block 的使用率藉此減緩log block 間搶奪的現象。
但缺點是保留不住熱資料一旦熱資料在 log buffer長出來它都 會是 replace的對象造成
buffer 失去吸收熱資料的功能。
2.3
l-buffer
l-buffer的replacement policy主要是參考了1時間區域性和2空間區域性並定義出
group density(θ(g) =a(g)1−α×1s(g)1+α),a(g) 代表 group g 在 buffer 中上一次的 access
time 而 s(g) 表 group g 當下收集到多少 dirty sector, 並挑出 group density 最小值
的 group 來做 replace 而在公式中α = 1是用來決定 l-buffer 採用何種 replacement
policy,α = 1時代表 group density 公式只考慮空間區域性以挑選最 group weight 最
為 replace 對象, 而α = −1時代表 group density 公式只考慮時間 區域性以挑選最久
沒被 reference 的 group 為 replace 對象。 圖0.1、0.2為 workload 是 notebook trace
在α = −1和α = 1在充足和不充足的 write buffer size 下的寫出到 log buffer Victim
的age 和size 資訊, 在0.1write buffer 較不充足的情況完全考慮時間區域性的情況是要
group的age稍稍變老(大)就很容易被當作victim如左圖,而在完全考慮空間區域性的
情況下因為buffer 空間不足沒有很機會收集到group size 較大victim; 反觀在0.2buffer
空間較充足的情況下在完全考慮時間區域性時寫出的 victim age 都會是很大的如0.2左 圖, 而如果完全考慮空間區域性 的話因為有了足夠的空間所以可以收集到較大 size 的 victim 如0.2右圖。 因此 l-buffer 會利用α來去適應各種不同的工作環境並根據目前硬體 資源所能提供的幫助下發揮出最佳的效能。 size
age Write buffer:2M,alpha=-1
size
age Write buffer:2M,alpha=1
圖 0.1: different alpha setting in insufficient buffer size
當決定要 replace 的對象要進入 FTL 時,l-buffer 會根據λ來決定要做 plugging 或
! ! " " ! " # $ % & ' size
age Write buffer:64M,alpha=-1 Write buffer:64M,alpha=1
size age
圖 0.2: different alpha setting in sufficient buffer size
buffer的大小有所改變,當log buffer較小時λ會比較小因為此時log buffer中做Garbage
Collection的cost 會很高倒不如提高做plugging 的機會以減 緩進入 log buffer, 而log
buffer較大時λ會比較大因為log buffer 較大的話Garbage Collection的cost會較低會
讓多點資料進入 log buffer 且過多的 plugging 反而會拖累整個效能。
α和λ tuning 都是會隨著當下的工作環境和目前硬體資源調整, 採用調整的方式是
用 session-based 的調整過程及每過一段時間後就會調整α和λ一次。 而λ調整在 l-buffer
中它會記錄 FTL 中在每段 session 做 logging/plugging 的成本以算出λ, 因此在λ的
調整可以利用成本公式算出來。 而α的調整並沒 有一套成本公式去計算, 而是必須要用
simulation 的方式來幫助去抓取工作環境適合用甚麼樣的 replacement policy 去達到
最佳效能。 這種simulation-assisted 的做 法如 PB-LRU是一個 cache 的演算法是用在
multi-disk/cache並使能源使用率達到最低,是它必須要有額外的記憶體空間去模擬它的
disk/cache, 而 PB-LRU [11]是將此simulation 放在 host 端, 好處是 simulation 有足
夠的記憶體空間可以使用,缺點使用者必須要在他們自己的host端裝此simulation的程
式。 而這篇論文並不將α-simulat ion放在host 端而是放在firmware 的device 端。 因此
會遭遇到的問題就是在 device 端的硬體資源 (RAM) 沒辦法使用很多, 而這篇文提出的
方法 是利用有限的硬體資源(RAM)去做簡化過的 simulation 以達到硬體資源 (RAM)
減少, 但簡化過的 simulation 做出的結果必須和有完整硬體資源 (RAM) 做出的結果精
第三章
Simulation-assisted tuning
Meta-simulation(device-side simulation) forα-Selection 在 l-buffer 中,α是
self-tuning 的參數, 用來 fitting 不同的 trace 在時間區域性和空間區域性上取得一個平衡。
我們採用 Meta-simulation 方式來挑選α。 Meta-simulation 是採用 session-based 的方
式, 而它是在 back-ground 中決定下一個 session 要採用的α值。 因為是 back-ground
的 Meta-simulation 勢必要佔掉而外的記憶體空間, 而我們目標是不需要耗損太多的記
憶體空 間讓整個Meta-simulation可以在firmware 作掉進而放在 device 中。 另外一挑
戰是 Meta-simulation 精準度的問題, 必須在 合理的記憶體空間消耗下還有一定的準確
度。 根據我們實驗的過程, 必須在記憶體空間和精準度中取的妥協。 在記憶體空間的部分,
我們試這根據 write buffer 和 log buffer 的運作特性簡化整個資料結構的設計並搭配較
coarse-grained的resolution去減少記憶體的消耗,而基於這些有限的資訊去產生精準的
模擬結果。 所以我們將 meta-simulation 分成兩個部分:1.write-buffer part 2.log-buffer part。
3.1
simulation of Write Buffer
在 Write Buffer 的 Meta-simulation 方面, 在精準度方面我們必須要能夠 catch
準確的 replacement order, 而左右 replacement policy 方面 l-Buffer 是根據 Group
density(θ(g) =a(g)1−α×1s(g)1+α),所以對於每個LBA group都必須keep住age(temporal
info) and size(spatial info)。 而在memory的消耗方面每個group要紀錄的information
有(1)LBA: 此 group 對應到 Logical Block 的 Address(2)temporal info: 這部分比較
容易, 只需一個4KB的 counter 去記錄。(3)spatial info: 紀錄此 group access state, 因
此我們必須要有額外的空間來記錄每一個 sector 在 group 的狀態。 表0.1是16 M write
buffer 跑 notebook trace buffer 中group 大概介於1000∼2000個, 其中 group age 和
group LBA在buffer size 16M的情況下跑notebook trace兩個所佔的memory總和皆
在20KB以下。 而假如spatial info用bit map來存 的話就要250KB對於Memory的消 耗顯然太大。 所以我們針對如何keep spatial info提出了dual-resolution management。
觀察 bit map的使用狀況大多 group中 dirty sector 的數量不多大部分都是 clean
表 0.1: 16M write buffer在不同 alpha 下buffer 中平均的 group 數
trace/α -1 -0.5 -0.25 0 0.25 0.5 1
NB 434.22 601.8 765.61 1118.68 1696.47 23048.94 2304.17
PC 368.82 548.86 715.44 1049.17 1836.70 2785.93 3313.29
UBUTU 228.73 346.40 487.36 751.96 1267.11 1777.75 2061.06
紀錄而是用Record的方式來紀錄(計錄 Sector offset)。 而對於group weight 比較大的
group我們還是利用 Bit Map紀錄。 而dual-resolution management主要的概念是要營
造出和 l-Buffer的replacement的order 和資訊並盡可能減少memory的消耗量。 觀察
Group density 我們可以發現小 group的 Group density 對於 group weight 的變化非
常敏感,而大group的Group density的Group density對於group weight的變化則相
對於遲鈍(譬如weight 1⇒2 Group density就整整變兩倍,而weight 1022⇒1023整個
Group density 幾乎沒變)。 圖0.3(a)(b) 觀察將 temporal info 的因素固定, 觀察 group
weight 對於groupDensity 的影響。 在圖0.3(a) 很直覺 1
groupDensity會正比於 Group size。
而圖0.3(b) 可以發現當 group Size小的時候 ∆groupDensity1 對於 group weight 變化影響
很大, 反之亦然。 這說明了, 當我們要比較 weight 較小 group 間的 Group Density, 我
們必須用較細微的解 析度(fine-grained) 去管理才可以看出之間的差異。 而weight 較大
group間的Group Density,我們可以用較粗的解析度(coarse-grained)去管理以節省記
憶體的消耗。 GroupSize (Fig.2) ( ( ) * + + , -∆ ty GroupDensi 1 2 1 ty GroupDensi 1 GroupSize (Fig.1) 圖 0.3: group density
前面介紹了dual-resolution management主要的靈感來源,接著介紹dual-resolution 的做法。 分類是根據group的weight(dirty sector)來將分 為兩種不同dirty sector的擺 放方式。 小的 resolution 我們稱為record Resolution(fine-grained) 是以sector 為單
擺放方式。 而大的resolution我們稱為Bit Resolution(coarse-grained)是以sector的
倍數為單位, 它是以bit map來 做data擺放的方式,但他一個 bit 代表的是數個sector
被存取的狀態。 舉例來說若 Bit Resolution = 8,它一個 bit 就代表8 sector 的存取的狀
態。 就記憶體的消 耗為跟一個 bit 紀錄一個 sector 的1/8倍。 當然這個方式的精準度會
較差, 但成如前面提到較大的 group 其 Group Density 對於 group weight 的變化影響
不大。 圖0.4 是不同 map 的表示圖。
Record
Resolution
LBA=10
Age=99
8
12
1010
560
1 1 1 1 0 0 0 0
Bit
Resolution
LBA=110
Age=1234
0 0 0 1 1 0 0 1
1 1 0 0 0 0 0 0
0 0 0 0 1 0 1 1
1 1 1 1 0 0 0 0
圖0.4: buffer node type
接著隨這 Group weight 不斷的長大, 我們要如何把 record Resolution 轉換成 Bit
Resolution,這時候我們會利用Switch Threshold這個參數來做轉換的依據,假如record
Resolution Group 中的 record 大於 Switch Threshold, 我們就將 record Resolution
Group 轉換成Bit Resolution Group 如圖 0.5一來是減少 record 間的 search time(如
果串太多record要sea rch time 就會增加),二來是減少 memory的消耗如公式(a)。 而
Switch Threshold 的選定是非常重要的, 如果太小的話小 record Resolution group 過
早被轉換成Bit Resolution Group 造成 沒辦法分辨weight 小group 間的差異。 太大的
話會造成 memory 能 reduce 的不多。 在後面實驗介紹的時候會顯示個 trace 的Switch
Threshold 是差不多的。
由於在 write buffer 裡 group 通常 weight 不會很大, 因為 weight 大的 group 很
容易被挑選到當成 victim, 所以在 write buffer 裡面 record Resolution Gro up 通常
都是占大多數。 根據 Amdahl’s Rule 若要在改善記憶體消耗必先從 Record Resolution
block size sector =1024,Bit Resolution=8, switch Threshold = 8
圖0.5: Record Resolution to Bit Resolution
一個 sector 的比例極低。 所以加入RecordSize這個機制讓每個 Record 紀錄不只一個
sector,而是一段連續的sectors數。 如圖0.6在加入RecordSize機制後,某種程度來說它
也是Resolution 的放大。 對精準度來講會有一定的degrade, 所以RecordSize不可以太
大。 根據實驗在各 trace 下使用 RecordSize=2, 精 準度還是在不過 Record Resolution
map 的記憶體消耗可以減少一半圖0.7。
memoryreduce ⇒ SizeP erRecord × SwitchT hreshold − SectorsP erBlock
BitResolution (a) Record Resolution LBA=55 Age=151 4 5 7 6 560 559 Record Resolution LBA=55 Age=151 4 6 559 圖0.6: RecordSize
Fig.7 . . /0 . /1 . /2 . /3 4 54 5. /65. /06 . . /06 . /6 4 789:; < => ? @ A@ B@ C@ D@ E@@ EA@ FE F@GH F@GAH @ @GAH @GH E IJKE IJKA R:B Ratio Memory L LMN LMO LMP LMQ R S R SLMT SLMNT L LMNT LMT R UVWXYZ [\ ] ^ _^ `^ a^ b^ c^^ c_^
dc d^ef d^e_f ^ ^e_f ^ef c
g hic g hi_ R:B Ratio Memory j jkl jkm jkn jko p qp qjkrqjklr j jklr jk r p stuvw x yz { | }| ~|| ~}| ~ |} |} | | } |} ~ ~ R:B Ratio Memory
3.2
simulation of Log Buffer
在做 log buffer 模擬時做我們必須要知道 logging/plugging 的 cost 這樣我們才
可比較出當下要用哪個α值最好, 所以知道 victim block 的 associativity 是非常重要的
information。 另一方面是memory的考量,如果將log block 裡面的資訊全 部記下的話,
這樣記憶體的消耗會非常可觀。 另外 log buffer size 不同於 write buffer size,log buffer
size 會遠大於 write buffer size, 所以我們要確保 log buffer 的模擬不會隨這 log buffer
size 變大而線性成長。 time ad d re ss ad d re ss time time ad d re ss
(a)Temporal group (b)Spatial group
(c) down to log buffer group
圖0.8: log bffer group versus log buffer group
前面提到我們要比較不同α間的 cost, 就必須知道 log buffer 中 associativity。 假
如以 Spare 是64MB、Block size=128KB、Page size = 4KB 的情況下要記下所有 log
block 裡面的資訊就要256KB 這顯然太多, 如果隨這 spare 增大又更恐怖。 因此我們不
去紀錄全部 log block 中資訊。 從 write buffer committed 到 log buffer 的資訊去做觀
察, 在前面提到大部份的 write buffer algorithm 都會盡可能去吸收 temporal locality
group 如圖0.8(a) 以減少 hot data 不斷的進 入 log buffer 造成 log buffer 空間消耗
快速。 或者會盡可能去吸收 spatial locality group如圖0.8(b), 這對於 block-level
map-ping or hybrid mapmap-ping 的架 構下, 可以有機會做 cost 較低的 Switch merge or Hole
plugging。 而 l-Buffer 則是會考慮 temporal 及 spatial, 因此真正從 write buffer 中
committed(replace) 下來的 資料的特徵1. 會是較 cold 的 data, 因為 hot data group
會被 keep 在write buffer 繼續攜手。2. 會是相對於較小 size data 進入log buffer, 因
入log block 如圖0.8(c)。
3.2.1 Committed group management
Merge Merge
LBA Life Cycle
….. LBA .... .... ………… .... ... .... ………… .... ……
Oldest log block Young log block
Cause the LBA remerge
圖 0.9: committed data in log buffer group
圖0.10: Remerged by First committed ratio
因此當每個LBA從write buffer被committed 到log buffer的Data 很少有機會
全部被invalidate掉,在此LBA remerge 之前,如圖0.9。 而 圖0.10是顯示在不同trace、
不同 write buffer size、 不同α值的情況下 LBA 需要做 merge 時, 引起此次 merge 的
log block 是否 為這次 LBA 第一次 committed 的 log block 比例。 由圖0.10可以看到
們決定只記錄每個 LBA第一次 committed 的data, 而不是去記錄整個 log block裡面 的資訊。
圖 0.11: log buffer 架構/操作
Committed group management 主要的概念, 就是只紀錄每個 LBA 第一次
com-mitted 到 log buffer 的資料, 因為大部分的 merge 都是因為第 一次的 committed
data 所造成的。 而至於第一次 committed 之後的 committed 我們就不去記錄它, 因
為當 merge 時會將後面所有的資訊都 帶走。 因此 keep 第一次 committed data 是較有
效率維持準確度和減少記憶體消耗有效的方法。 在圖0.11(a) 是整個 log buffer 架構, 因
為我 們只記錄第一次 committed 的 data, 所以每個 LBA 在架構裡只會有一個 node。
另外有一個 physical log Block Number 的 index, 而 index 上的 list 紀錄所有 LBA
第一次 committed 時所以寫到的 log block。 因此當某一個 log block 被 GC, 我們只
需要算它串的 list 有幾個 node 就可以知道 associativity。 圖0.11(b) 要表示的是當這
次committed 的data 不是第一次committed, 也就是說之前有 committed data 寫到
log buffer,所以這 次的committed data 我們完全不去記錄他,以節省記憶體空間,況且
他對 associativity 不會有影響, 會被前面 commited data merge 時帶走。 如圖0.11(b)
中 LBA:1001有一筆 committed data 到來, 可是在 log block 0上已有 LBA:1001的
committed資訊所以我們就不記錄這筆committed data。 而當committed data 到來對
所以將此筆 committed 放入目前正在寫的log block index 中。 如圖0.11(c)。
3.2.2 Invalidation handling AND LBA group Shifting
在這部分我們要討論的是 invalidation 的機制, 雖然第一次 committed data 要完
全被 invalidation 掉的機會不高, 但我們 還是必須要 maintain 如果完全被 invalid 掉
時的情況。Invalidation handling 方面, 我們一開始都先 keep 第一次 committed data,
而後面的 committed data 我們是不處理 (儲存) 他, 但我們會查看他是否能將第一次
committed data invalidate 掉, 如果能 的話我們就將 group 中儲存的 data 釋放, 直到
group 中所儲存的 data 歸零。 這樣的做法, 我們一方面可以節省記憶體的 空間, 二方面
我可以知道第一次 committed data 完全被invalidate 掉。 如圖0.12
time LBA commit order LBA group statistic LSN LSN
It’s time to adjust LBA group in log buffer index
圖0.12: Invalidation handling
當第一次committed data完全被invalid時則必須要做group Shifting 圖0.12, 而
我們的做法將group shift到最後一次invalidated write log block中。 這對multi-write
的total invalidation 會有些微的誤差。 因為我們為了記憶體考量直接將group移到最後
一次 write log block(照理說應該要移到第二次 committed l og block, 但要記錄的 info
太多)。 不過根據實驗顯示誤差不大,因為占大部份的都是 one write committed data 就
可以將第一次 write committed data invalidated 掉。
Log block index 0 1 14 15 LBA:55 LBA:10 LBA:201 … … ... 10 11 55 66 1 2 7 8 5 6 7 8 9 10 11 12
Come LBA:55 commit data write 1~8 (a) before Log block index 0 1 14 15 LBA:55 LBA:10 LBA:201 … … ... 10 11 55 66 1 2 3 4 5 6 7 8 9 10 11 12 (b) after young LB oldest LB 6 5 7 8 圖 0.13: group Shifting
3.2.3 log-buffer node data placement
我們前面討論巨觀的 memory reduce⇒committed group management, 談到了只
記錄第一次committed data 來減少不必要的記憶體浪費。 而在微觀上面, 我們可以對於
第一次 committed data 擺放來達到減少記憶體浪費。 在此我們和 write buffer 一樣提
出兩種資料的擺放方式:1.Record⇒每個 Record 紀錄一個 LPN。 2.bit map。 這邊的兩
種資料擺放方式不會影響到整個準確度,因為我們沒有做 Resolution 的放大, 況且在 log
buffer read/write的單位已經到page比起write buffer中的s ector Resolution上面已
經大了八倍,某種程度也是大的Resolution Map。 在這邊我們會有一個轉換的
logbuffer-RecordNum, 當 record 的數目大於此的話我們將 record place 轉換成 bit map place。
而如何去設定 logbufferRecordNum 會影響到我們能省到多少記憶體的多寡。 根據下面
(a)(b) 的公式如果推導只要讓 Dirty Pages< P ageP erBlock
RecordSize 我們 用 record 來存會用較少
的記憶體空間, 所以將 logbufferRecordNum 設成¡ PagePerBlock/RecordSize, 我們將 得到較少的記憶體消耗。
recordcost= DirtyP ages × RecordSize(bit) (a)
bitmapcost= P ageP erBlock(bit) (b)
3.2.4 early deletion old group
在這個部分我們要討論的 group in log buffer 的問題, 因為 log buffer size 往往
比 write buffer 大很多, 所以 group 數對於 log buffer memory 消耗會是個問題。 我們
不希望隨這 spare 的增大造成我們做模擬的 memory 消耗線性增加。 因為提出了 early
deletion old groups 圖0.14, 它的做法其實就是去限制 log buffer 的 group, 作法就類
似LRU, 我們將那 些待在 log buffer 中最 old group 空間釋放出來給新的 LBA group
使用。 這樣做的概念是我們給了那些 old group 中很長的時間留在 log buffer 架構裡面,
但他還是沒有辦法將 group 裡面的 資料完全 invalidated 掉, 此 group 將來要完全被
invalidate的機率太低,所以我們就認定此group不會在被移動,所以將此group對應到
的log block index associativity 先加一, 因為我們 認定此 group 就會在他目前對應到
的log block 作GC時做merge。
3.3
Runtime meta-simulation
back-old young a d e b c old b c Oldest group
Come a new group f but reach TH d e f Associativity counters ……….. LB 0 LB 0 ……….. LB 1 LB 0 ……….. ……….. 圖 0.14: early deletion
ground知道當下較好的α值是多少,讓我們的真正的device 可以根據較好的alpha值去
做運作。 而我們採用的調整方法是用 multi-Instance +Session-based 如圖0.15。
multi-Instance 的話我們會選取不同的α值 (-1∼1) 以 catch 最佳的空間/時間區域性的比例。
Session-based: 每經過一Session就調整一次,將前一次 Meta-simulation較好的alpha
值給這次session的real device使用,而Session的單位我們採用write request的次數,
這對於 個 Instance 較於公平, 如果採用 flush group 若偏 BPLRU 的 Instance group
會比較少,反之偏向 FAB 的Instance group 會比較多。
Session 1 Session 2 Session 3 Session n-1 Session n
Instance 1 Instance 1 Instance 1 Instance 1
Instance 2 Instance 2 Instance 2 Instance 2
Instance 3 Instance 3 Instance 3 Instance 3
Instance 4 Instance 4 Instance 4 Instance 4
Instance 5 Instance 5 Instance 5 Instance 5
real device real device real device
Write Req real device
…………..
………….. real dvice real device
M e ta -s im u la tio n O n -l in e ru n n in g 圖0.15: Runtime meta-simulation
第四章
Experiment
4.1
Experiment Settings
在實驗中我們所使用的Log buffer size/Write buffer size 以及 NAND flash
Mem-ory規格如表0.2, 其中有 NAND flash Memory 的 Block size、Page size 和抹除及讀寫
時間如果沒有特別講就是沿用表0.2。 而至於我們在NFTL中所使用的演算法是用FAST
[5]來當作底層NFTL 演算法。 我們首先是由l-buffer 這個方法本身對於α調整的比較, 而
比較的對象有三種1.offline 2.host-simulation 3. device-simulation如表0.3,offline顧名
思義他是在 offline 的情況下找出最適合的α值但缺點是沒辦法實作不過我們可以來把它
當作 optimal 比較的對象。 device/host simulation 都是利用 meta-simulation 的方式
來找出適合α值, 而差異就是所需要用的記憶體空間造成一個可以將 simulator 放入
de-vice 一個則必須在 host 中安裝。 而 device-simulation 的設定方面我們所設定的
meta-Instance是3個, 在write buffer 的參數設定recordSize為2個sector也就是一個record
可以紀錄兩個LSN而在bit-resolution我們採用為 sector的八倍大也就是將map 解析度
放大八倍, 至於轉換的 Threshold 為24個 sector。 而 log buffer 方面則有兩個參數要設
定1. 在log buffer中最多log buffer group的個數=3000,而資料擺放轉換的Threshold
為4個page 設定如表0.4。
表 0.2: Environment Setup
write buffer size 2M 4M 8M 16M 32M 64M 128M
log buffer size 64M 128M 256M 512M
Sector size 512 B
Page size 4 KB
block size 512 KB
Time of Page Read 60 us
Time of Page Write 800 us
Time of Page Erase 1500 us
接著會拿剛剛提到的三種l-bufferα調整方法跟現有提出的其他buffer algorithm 作
比較,FAB的 Buffer replacement policy為每次挑選含最多資料的 Group當作victim,
表0.3: l-buffer Simulation methods
Description
offline 無法實作, 拿來當作omptimal 比較
host-simulation 使用的memory 多,host 端必須安裝 simulatior
device-simulation 用的 memory 少, 須克服精準度的問題
表 0.4: l-buffer setting
instance 3
Write Buffer parameter setting
recordSize 2(sectors)
bit-Resolution 8(sector 的八倍)
resolution change TH 24(sectors)
Log Buffer parameter setting
LogbuffernodeTH 3000
ogbufferRecordNum 4
理Group, plugging發生的時機當 Group 的資料滿一半時BPLRU 就會使用 plugging
機制;CLC 的 Buffer replacement policy將buffer 切成兩個部分 Upper 為 LRU order
用來吸收時間區域性,lower則用來收集空間區域性而兩個空間比例為1:9;REF的Buffer
replacement policy則是會根據FTL的資訊將最近有在log buffer長出來的group優先
寫出 buffer 而 plugging 的時機當 Group的資料滿一半時 BPLRU 就會使用 plugging
機制。 而各方法的設定如表0.5。
而在使用的workload的環境我們採用兩種大家比較常用的工作環境1.windows2.Ubuntu,
而在 windows又分為 notebook 和Desktop 兩種。 在 windows 環境使用情況是比較偏
有locality 的操作, 而相較於Ubuntu 的方面整體的使用會比較random。 而關於
Work-load 的設定如表0.6。 在下面的章節會根據不同的 workload、 不同的 log buffer size、 不
表 0.5: other buffer methods
Buffer Replacement Policy Plugging Default Settings Reference
BPLRU Group of Least Recently Used >0.5 [4]
FAB Group contains the most sectors No [2]
CLC Upper layer LRU+ lower layer FAB No Upper:lower=1:9. [3]
表0.6: Workload setting
Logical partition over-provision
Windows NB 20GB 64MB 256MB
Windows Desktop 40GB 128MB 256MB
Ubuntu 40GB 128MB 256MB
同的 write buffer size 來做比較。
4.2
Experiment of vary write buffer size
這部分要探討的是在不同的 write buffer 硬體資源情況下搭配不同 trace 的特性,
而我們的 device-simulation 如何去找出最佳的α值去適應不同的 write buffer 硬體資
源和不同 trace 的特性。 而我們將分為兩個方面去討論 1. Performance evaluation 2.
memory evaluation。
4.2.1 Performance evaluation
下面圖0.16是workload為Windows notebook而over-provision給64MB下的比
較數據,而圖0.16左邊那張是l-buffer不同α值調整策略的比較,offline/host/firmware(device)
這三種是會去調整α值而alpha=-1,0,1為固定α值的策略。 首先我們可以看到在write buffer
比較小時(2M∼8M)可以看得出來在固定α值的策略下在alpha=-1的情況下效果會最好,
因為在 write buffer 小的情況下 write buffer 的空間首要拿來吸收 hot data 也就是時
間區域性會是較好的方式, 反觀在 alpha=1下此時因為 write buffer 太小在 buffer 中
的group很難有機會收集到足夠大的size 更不用是說做較便宜的 merge:switch/parital
merge而且也沒辦法吸收 hot data 導致在buffer 小的情況下 alpha=-1效能很差;反觀
在 write buffer size 大的時候 (32M∼128M) 這時候 alpha=-1和 alpha=1的效能會逐
漸接近, 因為此時的有了充足的 buffer 空間 buffer 中更有能力來處理/收集空間的區域
性。 而有能調整α值的 offline/host/firmware(device) 在buffer size的情況下採用盡量吸
收時間區域性所以會和 alpha=-1的效能差不多, 但 buffer size 足夠大時又能適度的收
集空間區域性, 所以在 buffer size 足夠大能夠調整調整α值的方法會比較好。 而在能夠調
整α值的方法下,不論是host-simulation/device simulation都可以藉由調整alpha去符
合當下情況下最該收集的資料使得動態調整α值會有較好的效能。 另在圖 0.16 右邊那張
是在比較l-buffer和其他現有的 buffer演算法做比較,我們可以看到在每個 write buffer
的效能比較, 圖0.17左邊是l-buffer 不同α值調整策略的比較,我們先來看固定α的效能在
buffer size 小的時候很明顯的在這個workload 下吸收hot data 是非常重要alpha=0,1
和alpha=-1有一都有一段不小的差距,這是因為這個workload較為散亂造成在小buffer
size 情況下根本不用考慮到空間區域性的收集, 在 alpha=0的情況下多考慮一點空間區
域性的收集就使得它的效能和 alpha=-1有一段差距。 而在能夠調整α值的方法下
,host-simulation/device simulation/offline 的調整下都有相近的效能且在 buffer size 小的時
候接近alpha=-1用以吸收hot data,buffer 大時適性的考慮多一點空間區域性 可以收集
空間區域性搭配 plugging 因此效能 在 buffer size 漸大時效能又會比 alpha=-1好。 而
在圖0.17右邊比較了 l-buffer 和他現有的 buffer 演算法, 我們可以看到幾乎每個 write
buffer size l-buffer都比其他方法來的好。 而在buffer size小時l-buffer 會和只考慮時間
區域性的方法 BPLRU 差不多沒有贏很多的原因是在由於 Ubuntu workload 本身比較
零碎加上write buffer size小能夠收集到 size較大的 group少, 導致能做 plugging機會
不多,導致 l-buffer 沒辦法從 plugging 來賺取很多的 perforamcne。
綜合上面兩個 workload 的實驗我們可以看到 meta-simulation 有這不錯的調整效
果, 這告訴我們動態調整 alpha 是必要的且不可缺乏的。 另外實驗中 device simulation
和 host simulation 的效能沒有多大的落差這說明了我們只存少部分重要的資訊就可以 和完整的 meta-simulation 有差不多的效能而在記憶體的使用上又有更多的節省。 在下 一小節會比較此兩種 meta-simulation 在記憶體使用上的差異。 0.0E+00 5.0E+06 1.0E+07 1.5E+07 2.0E+07 2.5E+07 3.0E+07 2M 4M 8M 16M 32M 64M 128M offline firmware host alpha = -1 alpha = 0 alpha = 1 0.0E+00 5.0E+06 1.0E+07 1.5E+07 2.0E+07 2.5E+07 3.0E+07 2M 4M 8M 16M 32M 64M 128M offline firmware host BPLRU CLC FAB REF
Elapse time Elapse time
Write buffer Write buffer
LB =64M LB =64M
圖 0.16: Windows NB
4.2.2 memory evaluation
在這部分我們將根據上面的實驗來分析host-simulation和device(firmware)-simulation
0.0E+00 1.0E+07 2.0E+07 3.0E+07 4.0E+07 5.0E+07 6.0E+07 7.0E+07 2M 4M 8M 16M 32M 64M 128M offline firmware host alpha = -1 alpha = 0 alpha = 1 0.0E+00 1.0E+07 2.0E+07 3.0E+07 4.0E+07 5.0E+07 6.0E+07 7.0E+07 2M 4M 8M 16M 32M 64M 128M offline firmware host BPLRU CLC FAB REF
Elapse time Elapse time
Write buffer Write buffer
LB =128M LB =128M 圖0.17: Ubuntu 0 500 1000 1500 2000 2500 2M 4M 8M 16M 32M 64M 128M host firware 0 200 400 600 800 1000 1200 1400 1600 2M 4M 8M 16M 32M 64M 128M host firware Memory(KB) Memory(KB) Windows NB Ubuntu
Write buffer Write buffer
圖 0.18: memory evaluation
圖中我們可以看得出來device(firmware)-simulation記憶體的使用量明顯比 host-simulation
來的少,host-simulation 使用量大概為 device(firmware)-simulation 3∼4倍隨著 write
buffer 的上升會更多。 而主要的原因是我們 dual-resolution 來減少龐大的 sector bit
map 以及利用 request 的連續性利用 RecordSize 來紀錄 dirty sector。 而圖0.19顯示
不同 write buffer 下所需要的記憶體空間佔實際 SSD control ram 的比例從圖中看起
來並不多, 而另外我們可以發現使用記憶體的多寡和 write buffer size 是成正比的, 因為
write buffer size 一大裡面所要 maintain的 group數就多, 不過由於是成正比我們無需
特別去對 write buffer group 去做限制。
4.3
Experiment of vary log buffer size
這部分要探討的是在不同的 Log buffer 硬體資源情況下搭配不同 trace 的特性, 而
0 50 100 150 200 250 300 350 400 2M 4M 8M 16M 32M 64M 128M log buffer buffer 0 100 200 300 400 500 600 700 800 2M 4M 8M 16M 32M 64M 128M log buffer buffer Memory (KB) Memory (KB) 4.3% 2.7% 1.6% 1.0% 0.6% 0.4% 0.2% 5.8% 3.9% 2.9% 1.6% 1% 0.6% 0.5% Windows NB Ubuntu WB WB LB =64M LB =128M 圖 0.19: memory-used ratio
不同 trace 的特性。 而我們一樣將分為兩個方面去討論 1. Performance evaluation 2.
memory evaluation。 但是不一樣的是隨這 log buffer size增大在log buffer 中的group
也會隨之增多,可是此時我們SSD control ram 並沒有變多,因此當log buffer增大時我
們就會利用前面提到的early deletion來減少記憶體的消耗。
4.3.1 Performance evaluation
這部分我們首先要探討在不同log buffer size 下搭配不同的LogbuffernodeTH來
限制在log buffer中的 group數,圖0.20左邊是windows Desktop右邊是Ubuntu這兩
個workload的logical partition都 是40GB,所以們能摸到的LBA數會較多因此我們拿
來做實驗。 我們首先來看當LogbuffernodeTH¿2000下early deletion所帶來的效能降級
非常的不明顯可以說和沒有限制 log buffer group 的情況下, 這說明我們可以藉由 early
deletion 的方法來降低 log buffer size 增大時我們使用 SSD control ram 並不會隨他
線性增加。 而看圖中比較極端的例子當我們將LogbuffernodeTH設的很低時候(200)我
們可以看到效能的方面有呈現降級的現象, 因為我們 keep太少 log buffer group 的資訊
造成他的精準度變差。 圖0.21是在不同LogbuffernodeTH情況下α的變化,我們可以看到
在200的時候α的變化跟沒有限制時有這顯著的變化。 總之用適當 LogbuffernodeTH 作
early deletion不僅能減少記憶體消耗在效能方面也不會有太多的降級。
4.3.2 memory evaluation
這部分我們首先要探討在不同log buffer size 下搭配不同的LogbuffernodeTH所
產生的記憶體消耗量。 圖0.22我們可以看到如果不對 log buffer group 作限制的話記憶
體的消耗是一件恐怖的事, 尤其看 Ubuntu workload 幾乎是以倍數再增加,而使用
Log-buffernodeTH 我們可以看到記憶體消耗量方面 windows Desktop 都可以減少2成∼3
Buffer size 16M 2.5E+07 2.9E+07 3.3E+07 3.7E+07 4.1E+07 4.5E+07 128M 256M 512M 200 1000 2000 3000 4000 5000 No limit Buffer size 8M 2.5E+07 3.0E+07 3.5E+07 4.0E+07 4.5E+07 5.0E+07 128M 256M 512M
Windows Desktop Ubuntu
Elapse time Elapse time
LB LB
圖 0.20: vary logbuffer with early deletion
Windows Desktop Ubuntu
alpha alpha LB=256M, WB=16M -1 -0.75 -0.5 -0.25 0 0.25 0.5 0.75 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 TH=200 TH=3000 TH=4000 TH=5000 TH=no limit LB=128M,WB=8M -1 -0.75 -0.5 -0.25 0 0.25 0.5 0.75 1 1 2 3 4 5 6 7 8 9 10 TH=200 TH=3000 TH=4000 TH=5000 TH=no limit
圖 0.21: On-line value changes of α
Desktop本身是屬於較locality的存取行為所以它會摸到的LBA比較少;而Ubuntu 就
不一樣了大概可以減少4成∼5成, 原因是因為 Ubuntu 本身就是屬於較零碎的存取行為
所以它能摸到的 LBA 相對多很多造成就算 log buffer size 只有128M 時我們就有要做
early deletion 的必要。 early deletion 能減少的記憶體消耗根據 workload 的存取範圍
和存取行為或多或少的節省, 對整體而言 early deletion 是必須要做的尤其當 log buffer
¡ ¢££ ¤¥¦§¨¤©ª ¡ ¢££¤ ¥¡ ¢££ ¤¥¦§¨¤¦§¨¤©ª©ª ¡ ¢££¤ ¥¦§¨¤©ª « « « « ¬« ¬«¬« ¬« « « «« « « «« ¬« ¬« ¬« ¬« ®« « ®«« ®« « ®«« ®¬« ®¬« ®¬« ®¬« ¯« « ¯«« ¯« « ¯«« ®°± ®°±®°± ®°± ®¬² ±®¬² ±®¬² ±®¬² ± ¬ ®±¬ ®±¬ ®±¬ ®± ³´ ´ ³´´³´ ´ ³´´ µ´´´ µ´´´ µ´´´ µ´´´ ³´ ´ ´ ³´´´ ³´ ´ ´ ³´´´ ¶´ ´´ ¶´´ ´¶´ ´´ ¶´´ ´ ·´´´·´´´·´´´·´´´ ¸´ ´ ´¸´´´¸´ ´ ´¸´´´ ¹º»¼½¼¾ ¹º¹º»¼½ ¼¾»¼½¼¾ ¹º»¼½ ¼¾ Buffer size 16M 0 50 100 150 200 250 300 350 400 450 128M 256M 512M 200 1000 2000 3000 4000 5000 No limit
Windows Desktop Ubuntu
Memory(KB) Memory(KB)
LB LB
第五章
Conclusion
SSD 把資料儲存在 NAND Flash Memory 中, 而由於採用 outplace-update 所以
在寫入資料時可能會因為閒置空間不夠而觸發 GC, 在寫入愈 random的資料時回收
in-valid資料代價愈高, 導致愈慢的寫入效能, 這是 SSD 在一般應用上的效能瓶頸, 長久以
來討論固態硬碟上無非是要將從host 端的 write request 吸收/整理成對底層 NFTL 能
夠快速處理的形式。 而決定 write buffer 寫到底層 NFTL log buffer 的資料型態就是此
write buffer的演算法(換言之也是決定甚麼型態的資料須要留在write buffer 中) write
buffer 替換演算法大多是針對時間或空間的區域性如[4, 2, 3]或者是觀察NFTL 的運作
如[9]。BPLRU是屬於完全考慮時間區域性的演算法搭配hole plugging, 它的缺點是無法
分辨group中的冷熱資料及忽略了空間區域性;FAB則是完全的考慮空間區域性,它的缺
點是假如write buffer空間不足難以發揮此演算法優勢及忽略的時間區域性;CLC 方法想
綜合時間/空間區域性將buffer分成兩個partition,因此他有額外的參數要設定; REF的
話是優先將在log buffer有更新資料的group優先當作victim,缺點是必須在log buffer
空間極度缺乏的情況下才會有不錯的效能。 此篇論文提出的方法是利用simulation-assisted
的方式去發掘潛藏在 workload 中的 locality, 畢竟 workload 的 locality 是我們沒辦法
掌握,我們必須在 run-time 的時候根據我們simulation 的結果去調整我們write buffer
替換演算法 (也就是改變α),我們首要的就是能利用的resource 不多,而在此篇論文的提
出的方法可以盡可能去減少不必要的資源浪費只存放重要且有代表性的資料而這些資料
足以讓我們建構出 write/log buffer 演算法的行為, 並不會造成 simulation 出來的結果
不準確也就是成功地在減少resource 消耗和simulation 準確度間找到一個平衡點,讓我
參考文獻
[1] H. Cho, D. Shin, and Y. I. Eom. Kast: K-associative sector translationfor nand flash memory in real-time systems. In DATE ’09: Proceeding of the 12th
conference on Design, Automation and Test in Europe, pages 507–512, 2009.
[2] H. Jo, J.-U. Kang, S.-Y. Park, J.-S. Kim, and J. Lee. Fab: flash-aware buffer management policy for portable media players. Consumer Electronics, IEEE
Transactions on, 52(2):485 – 493, may 2006.
[3] S. Kang, S. Park, H. Jung, H. Shim, and J. Cha. Performance trade-offs in using nvram write buffer for flash memory-based storage devices. Computers,
IEEE Transactions on, 58(6):744 –758, jun. 2009.
[4] H. Kim and S. Ahn. Bplru: a buffer management scheme for improving random writes in flash storage. In FAST’08: Proceedings of the 6th USENIX
Confer-ence on File and Storage Technologies, pages 1–14, Berkeley, CA, USA, 2008.
USENIX Association.
[5] S.-W. Lee, D.-J. Park, T.-S. Chung, D.-H. Lee, S. Park, and H.-J. Song. A log buffer-based flash translation layer using fully-associative sector translation.
Trans. on Embedded Computing Sys., 6(3):18, 2007.
[6] Z. Li, P. Jin, X. Su, K. Cui, and L. Yue. Ccf-lru: a new buffer replacement algorithm for flash memory. Consumer Electronics, IEEE Transactions on, 55(3):1351 –1359, aug. 2009.
[7] M-Systems. Flash-memory Translation Layer for NAND flash (NFTL).
[8] S.-y. Park, D. Jung, J.-u. Kang, J.-s. Kim, and J. Lee. Cflru: a replacement algorithm for flash memory. In CASES ’06: Proceedings of the 2006
interna-tional conference on Compilers, architecture and synthesis for embedded sys-tems, pages 234–241, New York, NY, USA, 2006. ACM.
[9] D. Seo and D. Shin. Recently-evicted-first buffer replacement policy for flash storage devices. Consumer Electronics, IEEE Transactions on, 54(3):1228 – 1235, aug. 2008.
[10] S. P. D.-H. L. S.-W. L. Tae-Sun Chung, Dong-Joo Park and H.-J. Song. System software for flash memory: a survey. In EUC ’06: Embedded and Ubiquitous
Computing, pages 394–404, 2006.
[11] Q. Zhu, A. Shankar, and Y. Zhou. Pb-lru: A self-tuning power aware storage cache replacement algorithm. In The 18th Annual ACM International
Confer-ence On Supercomputing (ICS-04), Saint-Malo, France, June26-july, volume 1.