二 二
二、、、、 Background
2.1 Flash memory characteristics
快閃記憶體分為 NAND flash 跟 NOR flash,NOR flash 速度較快,具有 eXeute in place,但是成本較高,而 NAND flash 成本較低,SSD 裡都是以 NAND flash 為主,
所以本篇論文以 NAND flash 為研究基礎。如 figure 3 所示,NAND flash memory 裡 會分為多個 block,而每個 block 裡又再區分成多個 page。NAND flash 主要有三個 動作:read operation、write operation 和 erase operation,其中 read operation 跟 write operation 都是以一個 page 為最小讀寫單位,而 erase operation 則是以一個 block 為 最小抹除單位,當一個 page 已被寫入資料,必須經過 erase 才能夠再次寫入。
A block (an erase unit)
A page (a read/write unit)
Figure 3. The structure of flash memory
Read operation 可分為三個階段:setup、busy 跟 data transfer,setup 階段是透過 I/O pin 對 flash memory chip 下 command,給它 requested data 的實體位址,然後 flash chip 就會進入 busy 階段,flash chip 把需要的 data 放到 flash 內部的 register,之後進 入 data transfer 階段,DMA 會從 register 把資料讀出來。而 write operation 也是分為 三個階段,跟 read operation 一樣是 setup、busy 和 data transfer,不同的地方是它們 執行的順序,write operation 開始時一樣會先對 flash chip 下 command,再來會先進 入 data transfer 階段,把要寫入的資料先寫到 flash 內部的 register,之後才是 busy 階段,將 register 的資料真正寫到 flash cell 裡,就完成一次 writer operation。Erase operation 則只分為兩個階段:setup 和 busy,但是 erase operation 所消耗的時間卻是
遠大於另外兩個 operations。
2.2 Multi-channel and interleaving
現今市面上的 SSD 幾乎都是 multi-channel 的架構,從 2 channels,4 channels,
甚至到 10 channels 都有,每個 channel 都有自己的一條 data bus,使用 multi-channel 的好處是可以同時對多個 flash chip 下 command,讓多個 flash chip 一起執行並將資 料一起傳到 host 端,這樣跟 single channel 比起來,channel 的數量就相當於能改善 多少倍數的 performance,如 figure 4 所示,以 4 channels 為例,假設我們要執行 read operation,controller 會一起對所有 channel 裡的 flash chip 下 command,flash 經過 busy phase 後,在一起將 data 傳回 host,從 figure 4(b)來看,所有 channel 都是同時 執行的,single channel 執行一次 read operation 的時間,在 4 channels 架構下,可以 達到 4 倍的 performance。
Controller
(a) (b)
Figure 4. Multi-channel and read operation diagram
當執行 read operation,在 setup 階段 controller 透過 bus 下指令給 flash chip,而 在 data transfer 階段 controller 也透過 bus 從 flash chip 接收資料,只有在 busy 階段 bus 才會是空閒的,interleaving 主要的想法就是當一個 flash chip 在 busy 時,利用 這 bus 空閒的時間再對另一顆 flash chip 下 command 或接收資料。以 Figure 5(a)為 例,有 4 個獨立的 flash chip 共享一條 bus (single channel),這 4 個 flash chip 分別稱 為 CE1 到 CE4,會有 1 個 controller 負責控制對哪一個 CE 下 command 及接收資料,
假設我們要對 CE1 到 CE4 執行 read operation,其 timing model diagram 如 figure 5(b),
controller 對 CE1 下完 command 後,趁 CE1 進入 busy 階段時 controller 再對 CE2 下 command,以此類推。Interleaving 所改善的 performance 在於其 busy phase 重疊的時 間,所以當 busy phase 的時間遠大於 setup phase 的時間加 data transfer 的時間的話,
interleaving 就能改善較多的 performance。Multi-channel 跟 interleaving 這兩種架構 並不衝突,可以個別使用,也可以組合一起使用,而我們的架構會在 section 3 說明。
(a) (b)
Figure 5. Single channel and read operation diagram
2.3 Motivation
一般 read access 分為 random read 跟 sequential read,random read 的部份並不是 此文所要討論的議題,本篇論文著重在 sequential read,OS 對 disk 下 sequential read access 時,如果所要求的 size 太大,一般會被分成好幾個 request,而且 device 一次 只能接受一個讀取,device 在處理一個 request 時,request 通常都不會對齊 channel 的邊界,如 figure 6,而且 request 所要求的資料也不會覆蓋到所有 channel,因為 multi-channel 的關係,SSD 會讓所有的 channel 一起運作,但這麼一來也是浪費的。
假設 Figure 6(a)(b)(c)是 OS 連續對 device 下的三個 requests,它們是 sequential read requests,圖中線段所指的是這些 requests 在 flash chips 上所讀取資料的分布,
這三個 requests 都有相同的地方是都沒有對齊 channel 的邊界以及所讀取的資料都不 會覆蓋所有的 channels,造成了 channels 當中許多的 idle slots,而這些 idle slots 所 會讀取的資料部分,處理的方式可以分為保留或者捨棄。如果選擇捨棄的方式,則 figure 6 的這個例子的 timing diagram 就如 figure 7(a)所表示,當 device 在處理 request2 跟 request3 時,會發現跟前一個 request 造成重複讀取的情形。若我們選擇把 idle slots 所讀取的資料存到 buffer 裡來避免重複讀取的話,而 figure 7(b)則是此方法的 timing diagram,跟 figure 7(a)相比,已經不會有重複讀取的 overhead 了,但這樣還是無法 改善太多效能,而因為 device 一次只能處理一個 request,這個例子中每次 device 在處理 request 時只會使得一個 CE 在 busy,這麼一來就沒有辦法利用 interleaving
來減少 response,而我們比較希望的情形是像 figure 7(c)這樣,利用 prefetch 將 sequential read requests 連接起來一次處理,這樣才能夠利用 interleaving 來減少 SSD 的 response。Figure 7(c)這種情形跟 figure 7(a)和 figure 7(b)比起來分別可以改善約 58%跟 52%的 response。
CE 1
CE 2
CE 3
CE 4
channel 1 ~ channel 8
CE 1
CE 2
CE 3
CE 4
channel 1 ~ channel 8
CE 1
CE 2
CE 3
CE 4
channel 1 ~ channel 8 request 1
request 2
request 3
(a) (b) (c)
Figure 6. The example for unaligned requests
Figure 7. The timing diagrams of three approaches for unaligned requests
而我們的問題在於要如何來執行 prefetch,prefetch 需要注意的因素有二,一是 prefetch 的時機,另外一個就是 prefetch 的 size,當一個 request 進來時,就可以考慮 需不需要做 prefetch,可是如果隨便就做 prefetch,把原本不需要的資料也事先讀進 來,增加了這次的 response,每次都 prefetch 的話,會嚴重影響到 SSD 的 performance,
所以我們期待能夠在第一時間就做 prefetch 而且 prefetch 的 size 也適當,沒有讀取 到不需要的資料,而這在現實上是辦不到的,因為每次只接受一個 request,無法得 知它是 random read 還是 sequential read,即使是 sequential read,仍然也不曉得該 prefetch 多少 sectors,而我們提出的 prefetch policy 主要是能提供不錯的 performance 而且將 prefetch 所造成的 overhead 減至最低。
2.4 Related work
由於 flash memory chip 在沒有其他硬體架構的幫助下,它的最高讀取速度也只
有 40 MB/s,目前也有許多論文提出一些加快 flash memory performance 的硬體架 構,像是在[1]這篇論文中,它提出了一個名叫 DUMBO 的 multi-channel hardware architecture,並利用此 architecture 提出了三種讓 flash memory chips 平行處理的方 法,striping、interleaving 以及 pipelining,前兩種方法都是利用兩個以上可以獨立運 作的 channel,當一個 channel 在 busy 的時候,controller 趁機對另一個 channel 下 command,好讓所有 channels 都在 busy,而 pipelining 則是利用 channel 當中的 ping-pong buffer 來達到平行化。
[3]這篇論文裡提到用 gang 的方式可以提高 SSD 的 bandwidth,並舉出兩種 gang 來達到平行化,shared bus gang 跟 shared control gang,shared bus gang 相當於 section 2.2 中所提的 interleaving 的架構,讓所有可獨立運作的 flash chips 共用一條 data bus,
但是它的 bandwidth 還是沒變,只有 interleaving 的效果,可以減少 SSD 的 response,
而 shared control gang 則相當於 section 2.2 所提的 multi-channel 的架構,由同一條 control pin 控制許多 flash chips,但是這些 chips 都擁有自己的 data bus 傳輸資料及 command,這麼一來可以達到 bandwidth 加倍的效果。
而在[2]這篇論文中,它也是利用多個可獨立運作的 flash chips,在文中稱作 multi-banks,來將各個 flash chip 的 busy time 重疊,不同的是,它還考慮到 bank 的 平衡性,特別提出了 dynamic striping scheme,一般對於 multi-banks 的 address translation 都屬於平均分配的,如 RAID-0,但是會導致 bank 之間不平衡的原因在於 write request 的 locality 以及各個 bank 的使用不平均,而 dynamic striping policy 的方 法是當要執行 write page 的時候,會先選擇 idle 而且還有空間的 bank 配置空間來寫 入資料,利用這種動態配置空間的方式來讓各個 bank 都能平均被利用。
[1,3]都是利用 multi-channel 來增加 bandwidth 以及 interleaving 來減少
response,而[2]除了利用 interleaving 外,還特別對 multi-banks 做 load balance,對於 現今的 SSD 為了加快 throughput,均採用 multi-channel 的架構跟 interleaving,而且 channel 的數量和可獨立運作的 flash chip 數量都逐漸增加,導致 device 在處理 request 時無法使所有的 flash chip 都 busy,浪費了 SSD 原本可提供的平行度。
在[6]這篇論文中,它分別去觀察不同的 interleaving degree 跟不同 channel 數的 multi-channel 架構對 SSD performance 的影響,它還說增加 channel 的數量跟增加 interleaving degree 數相比,能改善較多的 performance,但是增加 channel 數量會增 加設計 controller 的複雜度,而增加 interleaving degree 時就沒有這個困擾,這兩者 之間存在著 trade-off。另外它也發現到當 interleaving degree 增加到一定數量後,對 於 read requests 所能改善的效能就會趨於平緩,他認為主要的原因在於太多個 banks 共用一條 data bus,即使會增加 bus 的使用率,相對地也會使得 bus 出現塞車的狀況,
尤其是對於頻寬較小的 data bus 更是嚴重,而之後我們的實驗也會去觀察 interleaving
degree 對於 prefetch 的影響。
過去的論文並沒有對 flash memory 的 prefetch 做討論,flash memory 是電子式 的儲存裝置,不像一般 hard disk 是屬於機械式的,hard disk 在讀資料時是靠磁碟的 旋轉跟讀取頭,所以 hard disk 利用 prefetch (read ahead)主要是為了減少 seek time,
在本篇論文中,我們對 SSD 使用 prefetch 主要是為了增加 flash chip 的平行運算。
三 三 三
三、、、、 Adaptive Prefetch for Multi-channel SSD