查看原文
其他

不用闪存了,Optane SSD为何还要28%的OP?

2017-03-26 唐僧 企业存储技术
本文内容非商业用途可无需授权转载,请务必注明作者及本微信公众号、微博ID:唐僧_huangliang,以便更好地与读者互动。


上一篇《Intel Optane P4800X内存模式背后技术:ScaleMP》我写的偏应用模式或者增值软件方面,这两天看到同行朋友们对硬件底层也挺感兴趣的,我也来凑个热闹,班门弄斧写点东西。OPOver Provisioning,即超量配置)这个概念在SSD上已经不陌生了。

 

3D XPoint Memory有没有写放大?

 


关于写放大的问题,源于我在前文中写过的上面这段话。根据目前了解到的信息,3D XPoint Memory可能不是普通的相变(结晶/非结晶态转换)或者电阻式存储介质,不像闪存要有一个P/E Cycle,即改写数据时不用先进行擦除操作了。这样也就不需要垃圾回收(GC,理论上编程的长度单位可以不受诸如页面、块之类的限制。那我为啥还给了个“写放大”的评价?

 

前两天有位朋友曾为此和我深入讨论。由于当前的Intel Optane SSD DC P4800XNVMe块设备,对操作系统的驱动来看也是像SSD闪存那样仿真512byte4KB的磁盘扇区。这是进出SSD最小的I/O单位,如果底层介质的性质足够好,在此基础上可能就真的没有写放大了。

 

而我在前文中讨论的是配合ScaleMP来模拟内存,这时如果我只发出64byte的操作请求,如果不是连续地址不考虑预读/写合并的话,落到P4800XNVMe块设备上就会“变大”。除非有一天Optane能真正按照内存的方式来工作。

 

举个简单的例子,一个文件如果我只改几个字节,落到磁盘I/O上最小单位也是块(扇区),P4800X应该只能按照后者来处理。

 


记得几年前我曾经写过一篇《十亿IOPS不是梦?Fusion-io闪存API另类分析》,其中就讨论过8PCIe SSD如何跑出1.25 IOPS。这里是通过Fusion-ioAtomic 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,所以会有一个差值。

 

这时再计算P4800XOP就是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来做垃圾回收,那么就是用于ECCFirmware和其它维护操作了?

 

关于这方面,我与下午在微信群里看到的一位朋友观点基本相同。(由于没有官方资料确认,只好大胆猜测一下,如果写错欢迎指正

 

我们知道内存是在芯片之间做ECC,而NAND闪存是在颗粒内部(实际容量比用户容量要大),那么128Gb 3D XPoint Memory会不会内部已经包含了ECC校验位呢?

 

在企业级SSD上,比较常见的颗粒间容错技术是XOR,有点像RAID 5磁盘阵列。也就是说单个芯片失效仍保证数据可用。接下来的一个问题就是,XOR或者P+Q校验是在芯片之间,还是通道之间?

 

如果在芯片之间,那么除了6+1之外,还可能有13+126+2这样比例的可能,有些情况下需要7个通道2-4次并行操作才能写完一轮数据。这样对预防单个芯片失效应该可以,并且控制器内部集成少量DRAM或者SRAM也是很正常的。

 

而我还看到一种说法——目前的3D XPoint介质误码率还比较高。当然这只是相对而言,而且Intel肯定也在产品设计中用了各种技术来弥补。因此我倾向于认为6+1的通道间XOR比较合理,这样也能达到ECC的效果。而如果设计更多的通道数,则遇到“双错误”的概率会增大,也不排除另一种说法——7个通道性能已经够用。

 

这里借用GreenLiant绿芯的一张图参考下(详见《FPGA搞不定LDPC?分布式ECC助阵SSD》),因为我听说Optane使用的3D XPoint每颗芯片上也包含局部控制功能。

 

假设上述猜测属实,448GiB减去1/7剩下384GiB,比349GiB还多出大约35GiB。剩下最后两点,Firmware——按照常规理解单独一个小容量Flash Rom就可以吧?不确定3D XPoint Memory需要多大容量,如果像元数据那样放在主存储介质中,就有点不像底层Firmware的感觉了。

 

至于维护操作,显然还是需要有的。虽然不用GC了,但磨损平衡还要做,包括数据完整性扫描、搬移这些后台操作应该会有,以及像NAND闪存那样预留一些空间替换损坏的存储单元。

 

简单写这么多吧,在专家眼里我的认识可能又浅薄了:)

 

:本文只代表作者个人观点,与任何组织机构无关,如有错误和不足之处欢迎在留言中批评指正。进一步交流技术,可以加我的QQ/微信:490834312。如果您想在这个公众号上分享自己的技术干货,也欢迎联系我:)


尊重知识,转载时请保留全文,并包括本行及如下二维码。感谢您的阅读和支持!《企业存储技术》微信公众号:huangliang_storage


长按二维码可直接识别关注

历史文章汇总(传送门):http://chuansong.me/account/huangliang_storage

点击下方“阅读原文”,查看更多历史文章↓↓↓

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存