天天看點

不用閃存了,Optane SSD為何還要28%的OP?

3D XPoint Memory有沒有寫放大?

關于寫放大的問題,源于我在前文中寫過的上面這段話。根據目前了解到的資訊,3D XPoint Memory可能不是普通的相變(結晶/非結晶态轉換)或者電阻式存儲媒體,不像閃存要有一個P/E Cycle,即改寫資料時不用先進行擦除操作了。這樣也就不需要垃圾回收(GC),理論上程式設計的長度機關可以不受諸如頁面、塊之類的限制。那我為啥還給了個“寫放大”的評價?

前兩天有位朋友曾為此和我深入讨論。由于目前的Intel Optane SSD DC P4800X是NVMe塊裝置,對作業系統的驅動來看也是像SSD閃存那樣仿真512byte、4KB的磁盤扇區。這是進出SSD最小的I/O機關,如果底層媒體的性質足夠好,在此基礎上可能就真的沒有寫放大了。

而我在前文中讨論的是配合ScaleMP來模拟記憶體,這時如果我隻發出64byte的操作請求,如果不是連續位址不考慮預讀/寫合并的話,落到P4800X的NVMe塊裝置上就會“變大”。除非有一天Optane能真正按照記憶體的方式來工作。

舉個簡單的例子,一個檔案如果我隻改幾個位元組,落到磁盤I/O上最小機關也是塊(扇區),P4800X應該隻能按照後者來處理。

記得幾年前我曾經寫過一篇《十億IOPS不是夢?Fusion-io閃存API另類分析》,其中就讨論過8塊PCIe SSD如何跑出1.25 IOPS。這裡是通過Fusion-io的Atomic WriteAPI來仿真出來的“64byte塊”,真正落到閃存上的是經過了合并,以達到一種理想的順序I/O。如果是換成讀操作就沒這麼簡單了。

為啥是7個通道、28%超量配置?

根據之前看到的資料,Optane P4800X使用的3D XPoint Memory技術為128Gb 20nm,每顆16GiB(注意我這裡使用的機關)。如上圖,背面14顆加上正面一共28顆晶片,實體容量為448GiB。

那我用448除以375GB的标稱容量,是不是就可以算出OP比例呢?答案是不準确

375 /(1024/1000)/(1024/1000)/(1024/1000)=349 GiB

有的朋友可能沒注意到我在前文中寫的“349GIB”,其實是個簡單的道理,SSD一直沿用硬碟标稱容量的方式,按照1000進位,而實際格式化容量是1024,是以會有一個內插補點。

這時再計算P4800X的OP就是28%——一個在NAND閃存企業級SSD上常見的超供比例。對于這28%都用來幹啥用,國外網站上是這樣寫的:

“3D XPoint memory media doesnot have or require the extra capacity, so over-provisioning doesn't reallyapply. With that said, spare capacity beyond the user defined area is leveragedfor ECC, firmware, and other maintenance operations”

前面說過,由于3D XPoint能就地改寫,不像NAND閃存SSD那樣需要OP來做垃圾回收,那麼就是用于ECC、Firmware和其它維護操作了?

關于這方面,我與下午在微信群裡看到的一位朋友觀點基本相同。(由于沒有官方資料确認,隻好大膽猜測一下,如果寫錯歡迎指正)

我們知道記憶體是在晶片之間做ECC,而NAND閃存是在顆粒内部(實際容量比使用者容量要大),那麼128Gb 3D XPoint Memory會不會内部已經包含了ECC校驗位呢?

在企業級SSD上,比較常見的顆粒間容錯技術是XOR,有點像RAID 5磁盤陣列。也就是說單個晶片失效仍保證資料可用。接下來的一個問題就是,XOR或者P+Q校驗是在晶片之間,還是通道之間?

如果在晶片之間,那麼除了6+1之外,還可能有13+1和26+2這樣比例的可能,有些情況下需要7個通道2-4次并行操作才能寫完一輪資料。這樣對預防單個晶片失效應該可以,并且控制器内部內建少量DRAM或者SRAM也是很正常的。

而我還看到一種說法——目前的3D XPoint媒體誤碼率還比較高。當然這隻是相對而言,而且Intel肯定也在産品設計中用了各種技術來彌補。是以我傾向于認為6+1的通道間XOR比較合理,這樣也能達到ECC的效果。而如果設計更多的通道數,則遇到“雙錯誤”的機率會增大,也不排除另一種說法——7個通道性能已經夠用。

假設上述猜測屬實,448GiB減去1/7剩下384GiB,比349GiB還多出大約35GiB。剩下最後兩點,Firmware——按照正常了解單獨一個小容量Flash Rom就可以吧?不确定3D XPoint Memory需要多大容量,如果像中繼資料那樣放在主存儲媒體中,就有點不像底層Firmware的感覺了。

至于維護操作,顯然還是需要有的。雖然不用GC了,但磨損平衡還要做,包括資料完整性掃描、搬移這些背景操作應該會有,以及像NAND閃存那樣預留一些空間替換損壞的存儲單元。

簡單寫這麼多吧,在專家眼裡我的認識可能又淺薄了:)