# Operating System Support for NVM+DRAM Hybrid Main Memory
## Authors:
* Jeffrey C. Mogul、Eduardo Argollo、Mehul Shaz、Paolo Faraboschi
###### `Paper` : [pdf](https://www.usenix.org/legacy/events/hotos09/tech/full_papers/mogul/mogul.pdf)
###### `slides` : [ppt](https://drive.google.com/open?id=1GEXby6cMp-jbtsloxmsKtRYhY7e3zhWG)
###### `introduction` : [videos](https://drive.google.com/file/d/1BWnGt-TpXg7PTVmJMXxrIpyYqeQDJu3t/view?usp=sharing)
###### tags: `usenix`
## Abstract:
* 未來主記憶體採用 DRAM+NVM(flash or PC-RAM)可能很快變成主流
* 介紹 OS 可能會如何管理混合式主記憶體,但不一定在其他層即可行
* 透過初步的實驗來說明這些方法是可行的
## 1. Introduction
* DRAM 為傳統CPU所使用的 Main Memory 材質,但他耗電且貴,且因為這些缺點,DRAM 無法在資料中心大量安裝, 因為難以滿足密度高卻又降低耗能。
* Flash memory 較為便宜、緊密且耗能低,但有著access time、access unit sizes、endurance的缺點,也因此多用於储存裝置而非主記憶體。
* 半導體產業希望能開發一種稱為 universal memory ( UM )的技術來取代 DRAM 及 flash,結合兩種的優點。然而目前技術上仍有十分遙遠的距離
* 在此篇論文,探討到若是以 UM 取代 DRAM,考量到 UM 的特性( limited endurance,slow writes ),要如何以OS來支援這些狀況
* 具體來說,這篇論文會討論混合式的主記憶體--DRAM 結合 flash ( FLAM ),很可能可以增加main memory density、減少 power & cost,考慮到 flash 的高寫入延遲跟較少寫入就需要 wear out 的特性,拿來做 Main memory 似乎有點奇怪,因此這篇論文的目標是透過可行的 hardware design & OS changes 來補償 flash 的 weakness,另外也展現 OS 可能會如何支援其他種 UM
* 使用 read-write DRAM 跟 read-only flash , flash pages 確實在CPU的 memory address space 中,可以使用 memory-read 直接以 instruction 讀取(受保護性的 read-only),讓OS 得以介入 memory writes
* 此方法重點是,只有當 pages 的 time-to-next-write ( TTNW )相對高時才會使用, 考量到 flash writes 的 penalties ( latency ; wear-out ) 非常高,當然 OS 只能夠知道 pages 的 estimated time-to-next-write ( ETTNW ),而假設 OS 端的資訊能夠準確幫助預測,這篇論文同時也提供實驗性的 data,使用 FLAM 來讓足夠多的 TTNW pages to justify
* 此篇論文的重點是,flash 不是混合型主記憶體的最佳選擇, 而是 DRAM + NVM 才會是更合理的解決方法,此篇主要在描述如何以 OS 小心的管理那些資料進入 NVM,且何時可以隱藏 NVM 的較差特性。
### 1.1 Motivation
* 資料中心會需要大量的DRAM,但因為DRAM較貴且耗能,會有很大的限制
* 高密度的 DIMMs 會花費非常多,一個 8GB 的DRAM 會比4個 2GB 的 DRAM 貴上許多
* DRAM 也非常耗能,因此希望可以找出一種更加大的主記憶體,且沒有 DRAM 的這些缺點來做為取代
### 1.2 Memory technologies
* flash 有許多很適合作為 main memory 的優點, 較便宜、耗能少、跟 DRAM 比占較少空間
* 然而若是要直接取代 DRAM 仍有這些問題:
* Erasing: flash 寫入前一定要先 erase,這個操作較慢,且一定要 erase block 而不是 word
* Endurance: erase + write cycles 達到一定的數量(不大)之後就要做 wear out,對於储存裝置來說寫入的頻寬太慢足以避免這個問題,但若是放到主記憶體階層,以 5 GB/s 的速度 60 天內就要對 256GB 做 wear out
* Slow writes: 寫入速度比DRAM writes 慢很多,所以無法與傳統的 memory controller做匹配
* Read timing: NAND flash 需要一次讀取一整個 page,很難用在主記憶體上,但 NOR flash 就能如同 DRAM 想讀取多或少 (儘管在低頻寬)
* Table 1 顯示不同 memory 的特性,但比較數值上會有困難,舉例來說 NOR flash 通常比 DRAM or NAND flash 來的早製造,在表格中有固定 feature size,來讓密度容易做比較
* Table 1 顯示不論是 cost or density,NAND flash 都比 NOR flash 優秀,不過因為 NAND flash 不能滿足如同 DRAM cache-line 的讀取速度,不適合做 hybrid design
* 這篇論文探討兩種混和主記憶體:
1. NOR flash + DRAM
2. PC-RAM + DRAM
![](https://i.imgur.com/WERnyuT.png)
## 2. Design issues: NOR-flash hybrids
* 探討使用 軟體管理的混合式 NOR flash記憶體的硬體及軟體設計
### 2.1 Hardware design
* 首先假設新的硬體設計的pin是會跟標準的 DRAM DIMMs 及 memory controllers 相容,雖然更改目前的標準化介面可能可以達到更好的效能,但在此先以原先的標準做假設。
* 假設出一個 FLAM DIMM,包含盡可能多的 NOR flash chips,一些為了 buffer writes 的 DRAM ,還有一個簡單的 controller ASIC。
* DIMM 可以被分割成以下幾個不同區塊
* Flash: 作為讀取用途,cache-line-wide reads, CPU 不能直接寫到這塊
* DRAM copy buffer (`CB`): CPU 分配讀取或寫入
* Control registers: 以標準規格的 System Management Bus (SMBus) 來分配到 I/O space
* Basic migration mechanism: 因為 flash 不能直接被 CPU 储存操作寫入,我們改用 page-sized 寫入到 `CB`,因此當 OS 決定從 main-memory DRAM 移動 page $Pd$ 到 FLAM 時,會先配置一個 pre-erased flash page $Pf$,並複製 $Pd$ 到 `CB` 的$Pb$,接著發出 signal 給 FLAM controller 來複製 $Pb$ 到 $Pf$
* 這個複製過程很慢,是以 flash-write 的速度,但不用讓 CPU stalling,為了要維持必要的寫入頻寬,NOR flash 會 banked 8-16 ways,當複製結束,controller 會對 OS 發出信號,因此可以將原先的 virtual page $Pv$ 對應的 $Pd$ 改到 $Pf$,並終止 TLB entry
* 一個小部分的 `CB`會被放置在一旁以處理 OS 對 controller 的特殊命令: copy commands( 給予( $Pd$ , $Pf$ ) pair )、erase command( 給予 offset & size of the sectors to erase )
### 2.2 Basic software design
* 當一開始 booting 時,OS 都先 allocate 到 DRAM,接下來開始從 DRAM migrate to FLAM
* 在 sec. 2.1 描述的 migration 機制要再精進,舉例來說: OS 要設定 $Pd$ 的 page-table entries ( during migration )為 read-only;且設定 $Pf$ 的 page-table entries ( after migration ) 為 read+execute,因為 migration 中的任何 write 都有可能發生 inconsistency,且所有 write after migration won't work。如果 SW 储存這些 pages 中的其中一個,會發生 fault。在 fault 發生後 write 產生前,OS 一定要停止 migration 或是 將 page 從 FLAM 複製到 DRAM。
* migrated page 的處理模式有點類似 copy-on-write page。
### Deciding which pages to put in FLAM
* 有些 kernel private address space 不能輕易 migrated,在一系列的 pages 中 OS 會選擇其中最可以 "return on investment" 的來 migrate 到 FLAM。
* Page types: OS 習慣以 pages 的 type information 來連結,舉例來說: code pages 就很好被移植到 FLAM;stack pages 就不太適合;兩個 process 間共同分享的 non-file pages 不適合被移動。
* File types: 可以作為 ETTNW 的指引,如同執行檔、字體都是 read-only ,或是網路上分享的檔案或安裝檔也都是 read-only。
* File reference modes: Windows 提供 tmp file 來最佳化 buffer cache 的行為,因此約有80%的檔案會在4秒內就被刪除,當然,這些tmp file 不應該被 migrate,可惜大部分的 application 並不會標示他們為 tmp file。
* Application-supplied page attributes: 推測有些急需要記憶體的 application -- 如databases 可以提供粗略的 ETTNW 數值給一些 pages,如 index files & dynamic tests。
* Files names: 針對其他難以分類的 files,OS 可以記錄歷史的 TTNW distribution,如果過往被觀察到有很大的 TTNW 可以被 migrate 到 FLAM。
* Page hitory: 理論上 OS 會追蹤每一個 page 的 TTNW,這樣子的追蹤可能會造成 DRAM 的過多 overhead ( 使用 FLAM 就是為了節省 DRAM )
* 使用 NVM 有很多優點,但在這裡就不多做說明
* Migration 當然也會因其他因素造成影響,如有多少 free FLAM space 可用,以及 CPU 為了 migration 的 load 與 DRAM 不夠用間的權衡,在這方面就要使用到更多的理論,如 page-frame reclamation algorithms。
### 2.4 Garbage collection
* 因為 flash erase blocks ( 比 pages 大 ),所以 OS 會將 FLAM pages migrate 回 DRAM,以此來維持足夠用的 free FLAM pages。
* 假設傳統的 " copying garbage collector " 機制會適用,如同一個 mapped file 的 pages 可能會有類似的 lifetimes。
### 2.5 Wear leveling
* 因為 flash 的耐用度,OS 需要對 FLAM 做 wear-leveling。
* 每個 block 過往的紀錄都要被保存 ( allocated , free , erased ),OS 才得以將之複製到最少 erase-count 的 block,因為這些紀錄不論是 reboot or crash 都要保存下來,所以這些資料集會存在 FLAM 中。
* 辨識 FLAM pages 有沒有壞掉的方法: migrate 後 OS 立刻比較 page 跟 source page,如果相同代表沒有 worn out;反之將 page 的 erase-count 設為無限大。
## 3. Design for hybrids using PC-RAM
* PC-RAM 比起 flash 有較高的 densities & 較低的 costs/bit,耐受度上大約比 flash 高了 2~3層級,此外也不需要 erase before write,大大改善了系統設計。
* 但因為讀寫速度上仍然追不上 DRAM ,所以仍需要 DRAM 作為 read-buffer,因為期待讀取速度能有 DRAM-like 的速度。
* 使用 PC-RAM 並不需要做 garbage collection,因為不需要 pre-erase ; 也會有較簡單的 wear-leveling,因為 PC-RAM 的耐用度較高,可以假設有 5 年的 lifetime。但可能需要一些機制,因為 resistance drift 的因素,read-after-write 無法立刻發現出現 wear-out。
## 4. Preliminary experiments
* 只有做初步的實驗,目標是:在一段長時間中,read-only FLAM 的 memory pages 是否足夠?
* 一段長時間的定義為:Time Between Writes to a Page (TBWP) 的平均值( Based on NVM technology & 硬體 lifetime )
* 在實驗中選擇 5 年的生命週期,約 $1.58e8$ 秒,而耐用度上,flash 為 $10^6$ ; PC-RAM 為 $10^8$,因此 TBWPs 目標為 $158sec$ & $1.58sec$。
* 實驗有考慮了三個方式進行:
1. hardware tracing via simulation
2. page-levle tracing via kernel modication
3. simulation of a FLAM system
但此篇論文目前只有試第一種
### 4.1 Simulator-based tracing
* 當 pages 使用 architectural simulator 寫入時可以準確 trace,本論文使用較快的模擬器--COTSon,但仍然很慢,213 traced seconds 就花了 10 天
* 實驗環境:
1. 1-core Opteron CPU (64KB L1 caches, 2MB L2 write-back cache, 2 GB main memory, 4KB/page)
2. Linux 2.6.15 跑兩個 application
* Nutch, a web-search engine (1.2 GHZ CPU)
* SPECjbb benchmark (3 GHz)
3. 4-core Nutch trial (800GHz Opteron, 8 MB L2) 下跑不同的 dataset and workload
* 實驗過程:
1. 追蹤所有從 L2 cache 寫回的實體記憶體,並記錄一系列的 TBWP
2. 計算出所有 page 的 TBWP 的中位數 (50%)
3. fig. 1(a) 顯示 TBWP 中位數下的 page fraction 的 dirstribution
* 隨然這些 traces 太短無法顯示確切的 TBWP result for a target of 158 sec.
* 圖 1 顯示兩個基準都有超過一半的 pages 有超過 15.8 sec 的 TBWP 中位數
* 即便我們想要至少 75% 的 TBWP 超過 target,仍然可以放大約一半的 pages 到 PC-RAM
![](https://i.imgur.com/a7CUfsx.jpg)
## 5. Summary
* 有些操作 (Nor flash & PC-RAM (possible) 寫入、 NAND Flash 讀寫操作)需要 DRAM 作為 buffer 來避免同步下的時間差異,OS 可以判別 buffer 也因此可以影響 OS 的 page migration 實作
* OS 可以判斷哪些 pages 可以移到 NVM 來避免 endurance 的問題
* 緩慢的寫入速度(特別是 NOR flash) 需要 OS 來管理 page migration。
* 總結來說,未來會很需要 OS 的相關研究與創新來實施 universal memory technology。