西数黑科技:把SSD当内存用

西部数据最近推出了一种把SSD变成虚拟内存的黑科技,用来替代DRAM,这就是Ultrastar DC ME200,这与英特尔傲腾持久内存技术有异曲同工之处。

一个使用NAND SSD,一个是用3D Xpoint SSD,都拿来做内存。


先来看看西数的黑科技


Ultrastar DC ME200是一款基于Ultrastar SN200 SSD改进的SSD,采用的是15nm MLC NAND,用的时候也需要软件协助,来组成这套黑科技系统。

这套技术提供一套类似于内存管理单元(MMU)的功能,而且将SSD和DRAM虚拟化成一个虚拟内存池。

 

Ultastar_DC_ME200,既有2.5寸U.2盘,也有半高半长的卡

内存管理单元(MMU)是干什么的呢?

内存管理单元有时也称作分页内存管理单元(英语:paged memory management unit,缩写为PMMU)。它是一种负责处理中央处理器(CPU)的内存访问请求的计算机硬件。它的功能包括虚拟地址到物理地址的转换(即虚拟内存管理)、内存保护、中央处理器高速缓存的控制,在较为简单的计算机体系结构中,负责总线的仲裁以及存储体切换。

简单而言,MMU就是将虚拟内存地址转换到物理内存地址,虚拟地址空间比实际可用的DRAM要大,所需的块(block)和页(page)数据从SSD或者磁盘传到内存里。

所以,相比之下,当请求的数据恰巧在DRAM里的话,CPU很快拿到数据,延迟会低一点,西数软件实现的MMU能被用来扩展DRAM内存。

Ultrastar DC ME200对应的软件非常底层,在裸金属之上的hypervisor层,无需应用软件做任何修改就能用到虚拟内存池。

在西数虚拟内存技术的帮助下,应用程序在虚拟内存中执行,这比单单用DRAM内存,从SSD或者磁盘中读取数据效果要好的多。通过比较好的预测算法,可以得到近似于DRAM的性能表现。

比如:

跑在DRAM下的Memcached的性能与(4-8倍于DRAM容量的)ME200扩展内存的性能相当(相当于前者的85%-91%);

跑在DRAM下的Redis数据库的性能与(4倍于DRAM容量的)的扩展内存的性能相当(相当于前者的86%-94%);

跑在DRAM下的MySQL的性能与(4-8倍于DRAM容量的)扩展内存性能相当(相当于前者的93%);

西部数据的一位专家表示,用了ME200之后,1U或者2U的服务器能将内存从原来的1.5TB扩展到12TB(DRAM+NAND),内存容量相当于原来的8U服务器。实际情况可能会因人而异,不过,DRAM和NAND 1:8的配比应该还不错。

西数的这一产品叫ME200,其中ME是Memory Expansion的缩写,ME200的容量有三个规格1TiB,2TiB和4TiB。(注意内存里计算的是TiB不是TB,1TB大约等于953GiB)


西数虚拟内存 vs. 英特尔傲腾持久内存


说到这里实在忍不住想说,西数的这个黑科技做的事儿跟英特尔傲腾太像了,西数的ME200的目标应用是Redis,Memcached,Apache Spark以及一些大规模的数据库等等占内存的应用。

西数表示,与傲腾相比,西数的产品的容量比基于3D Xpoint的傲腾要高三倍。西数的这位专家表示,还没有看到傲腾特别明显的性能优势。

中立观点

有第三方分析人士指出,西数的新技术是否会取得市场上的成功还有待观察。并且指出两大关键点:一个是软件的集成程度,在实际应用中可能会带来的复杂性和可用性问题,另一个则是阿姆达尔定律(阿姆达尔定律指的是系统一个部分优化之后获得的性能提升的效果,如果系统某部分的性能没有提升,则主要受制于系统没改进的部分)。

前者是所有系统软件(驱动、补丁之类的)产品都要解决的问题,后者是所有缓存产品都面临的问题。

从技术的角度来看,利用非易失性存储的密度和经济性是提升直接内存访问性能的最好的办法,另外,同时增加每个插槽通道的数量也可改善内存的访问性能。

从市场发展来看,西部数据在NVMe SSD市场的表现已经明显落后于三星和英特尔,希望用NVMMe SSD来挽回一些局面。

译者看法

无论是傲腾的持久内存存储还是西数基于ME200的SSD虚拟内存技术,都是在NAND SSD(或者说磁盘)和DRAM之间加了一个存储层,它比DRAM要慢,比SSD NAND(或者说磁盘)要快,将内存可能会用到的数据缓存到这里,以供内存使用,而不是让内存直接读SSD(磁盘)里的数据,以此降低延迟,提升性能,提升内存密集型应用的体验,用相对廉价的SSD替代真正的昂贵的内存。

比较有挑战性的是决定数据放到哪儿的这套算法。就像操作系统和编程语言的内存管理系统一样,有的编程语言提供了自动化的内存处理比如Java,垃圾回收机制决定内存什么时候被回收,而介于内存和硬盘之间的这一层决定什么数据放在内存,什么数据放在两者之间。

在做法上,这其实跟Linux的swap分区,Windows的虚拟内存的定位也有些相似,都是因为内存不够用,用硬盘来顶。Linux为了提高读写效率,用swap去缓存内存中放不下的数据,Windows也是类似的道理,这一部分就是swap区。

不得不说,实现原理上无论是西数的黑科技还是英特尔的傲腾,都有几分类似,英特尔的持久内存存储插在内存条上的,西数的实现则是走NVMe协议,英特尔基于独有(美光也有类似)的3D Xpoint技术的实现对原有硬件架构的颠覆性更大,相对而言,西数的实现更平滑,基于MLC的实现总归比DRAM要便宜。

从实现路径来看,一个在SSD侧下手,一个在内存槽侧下手,殊途同归,究竟是处理器霸主能获得更多支持,还是硬盘巨头能建立生态呢?抑或两者共存?

其实,相对而言,西数的实现更容易获得支持,没有门槛和壁垒,相比之下,英特尔自成一派的做法能否成功还有待观察。