作者:廖恒
SSD的物理尺寸之混战正在进行当中。数据中心的硬件架构师因为要规划下一代服务器的机械设计,还要制定JBOD的设计规范,想必面临不少困惑。要是选择的机械尺寸到了部署时成了非主流,势必造成采购困难、成本增高等一系列问题。搞不好要重新订制服务器JBOD,代价可谓不小,不得不多费些心思,擦亮眼睛,看看未来。
软件架构师是否可以指指楼下的硬件采购部门——那是他们的事,就此高枕无忧呢?
答案是:如果你选择做蚂蚁般的一维动物,那就可以继续春眠不觉,如果想进化成人一样的二维(2.5维)动物,那就必须要闻鸡起舞了。额外再多些努力,说不定还有机会如飞鸟般在三维空间中翱翔一番。
据法布尔《昆虫记》所述,蚂蚁虽有六条腿,在二维的平面上完全有自由行动的能力,但是为了找到回家的路,他们除了在觅食时会自由行动,在搬运食物回家或集体行动时,都是严格地遵照留在地面上的气味指引,循着一条固定的路线在行走。哪怕路线被风吹来的树叶或是被水流所阻隔,它们也不惜以生命为代价,一定要回到既定的路线上去。
这就是程序员所熟悉的文件外存的访问方式。在内存中自由觅食时,程序之数据结构可以在内存中任意摆放、自由访问,但一旦要搬东西回家(数据要存放到安全可靠的不易失外存时),一切都要串行化(Serialization)地存放到一维的文件中去。计算机的存储从纸带、磁芯、磁鼓、软盘、硬盘进化到SSD,其变化程度可与单细胞浮游生物到人类的变化相媲美。但是外存的访问模式,仍保留了纸带时代的相同概念。因此多年前已有先贤提出了Memory wall并推广到I/O Wall的概念和定律。
Memory Wall——当计算速度提升到极限时,程序的执行时间由内存访问的时间所决定(即内存的速度决定了程序执行的时间)。
I/O Wall——当内存访问速度也提升到极限时,程序的执行时间由程序产生的I/O访问时间所决定(即I/O速度决定了计算机的速度)。
Memory Wall和I/O Wall似乎是一道更高过另一道的铜墙铁壁。既已成了定律,是否就不可超越呢? Are we doomed by these walls?
幸运的是早有智慧的前人发明了Cache的概念。Cache成了翻越这些高墙之楼梯,其出发点在于:
利用数据和程序在时间上(temporal)和空间上(Spatial)的局部相关性(Locality)来减少到内存和外存的访问。这已是CPU构架的核心概念,此处不复赘述。
但数据要存放到文件中去,已是软件工程师的思维定式。这个定式,在SSD的时代可能要被打破了。
回到开篇所讲的SSD机械尺寸的混战,我们来看看form factor到底意味着什么?
(1) 安装的方式——是否可热插拔?能否在某种某种机箱内容纳?
(2) 存储容量——超大的盘片能放置更多NAND芯片。
(3) 性能——NAND通道数越多(越大的盘),可并行操作的NAND芯片也越多,因此IOPS、带宽也越高。
(4) 连接的总线和协议,还有总线的延迟、带宽特性也不同。
(5) 可扩展性——外部总线能支持的传输距离长,具有可以扩展到多个SSD连接的能力,而DDR内存总线是基本不可扩展的,传输布线距离短,必须紧挨在CPU的边上。
(6) 编程模式——是以特殊的内存方式来访问,还是以外存的I/O块设备方式来访问?
目前,SSD Form Factor层面的主要竞争格式:
a) PCIe Card(Standard/custom)
b) 2.5 Inch(也许是3.5 Inch)
c) M.2
d) Ultra-DIMM or NV-DIMM?
而协议则有
I) SATA
II) SAS
III) NVMe
IV) DDR ?
前面所述的a)->b)->c)以及I)->II)->III)基本上只是个量变的过程,本质上还是个块设备。NVMe协议在协议栈上比传统的SCSI等协议栈作了优化,故而性能可得到提升,延迟也有大的精减。
但是以DDR方式访问的DIMM格式的SSD(当然也有在PCIe上实现的类似方案)就有了质的变化。因为程序或OS对其访问的方式可以不再是一种块设备,而可以转变为一种“有点特殊”的内存,而这些内存的“特殊性”体现在可以通过对OS虚存管理的修改来实现对应用的相对透明。当这件事发生之后,I/OWall就不再明显,即应用程序不再需要把数据进行串行化,再写入到文件中去,数据结构可以自由摆放在特殊的内存空间内自由访问,而且不会担心掉电造成的丢失。
这可以说实现了从蚂蚁到人的一维到二维进化,但如何实现象鸟儿一样在三维空间中飞起来呢?
我们来看看,在Scale-out的cluster中,即便对单机外存之访问变成了“特殊不易失内存”的方式,但结点之间要交换共享的数据结构,还是不能负除串行化之苦(数据结构要串行化后打包成消息才能通过网络接口传送到另一结点),就好像人要出差到另一个城市要买机票、过安检然后才能乘坐飞机一样的不便利。
设想一下,如果上述以内存方式访问的SSD,经过解耦合(Disaggregation),再能在机群内的多结点之间直接共享数据结构的直接访问,那就不再有网络串行化之开销。这样程序员就能像鸟儿一样自由地翱翔。