SSD 从形式到实质之改变

 作者:廖恒

         SSD的物理尺寸之混战正在进行其中。

数据中心的硬件架构师由于要规划下一代server的机械设计。还要制定JBOD的设计规范,想必面临不少困惑。要是选择的机械尺寸到了部署时成了非主流。势必造成採购困难、成本增高等一系列问题。搞不好要又一次订制serverJBOD。代价可谓不小,不得不多费些心思,擦亮眼睛。看看未来。

        软件架构师能否够指指楼下的硬件採购部门——那是他们的事,就此高枕无忧呢?

        答案是:假设你选择做蚂蚁般的一维动物。那就能够继续春眠不觉。假设想进化成人一样的二维(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构架的核心概念,此处不复赘述。

        但数据要存放到文件里去,已是软件project师的思维定式。

这个定式。在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),再能在机群内的多结点之间直接共享数据结构的直接訪问,那就不再有网络串行化之开销。这样程序猿就能像鸟儿一样自由地翱翔。

 

SSD 从形式到实质之改变的更多相关文章

  1. chmod以数字形式改变文件权限

    Linux文件的三种身份和四种权限,三种身份分别为: u:文件的拥有者 g:文件所属的群组 o:其他用户 对于每个身份,又有四种权限,分别为: r:读取文件的权限(read) w:写入文件的权限(wr ...

  2. Linux新手入门:通过chmod改变文件权限--转

    前面介绍过在Linux中如何查看文件的属性,在Linux文件权限详解中我们介绍了Linux文件的三种身份和四种权限,三种身份分别为: u:文件的拥有者 g:文件所属的群组 o:其他用户 对于每个身份, ...

  3. BOT、BT、PPP形式介绍(3)

    PPP     20世纪90年代后,一种崭新的融资模式-PPP模式(Public-Private-Partnership,即“公共部门-私人企业-合作”的模式)在西方特别是欧洲流行起来,在公共基础设施 ...

  4. 改变mysql客户端输出的字符串编码

    在客户端改变中文输出的编码,通常以gbk输出,因为电脑常见的是gbk编号形式 目的:不改变编码,输出中文的时候,可能会出现乱码的情况, set names gbk 在客户端以gbk编码显示需要输出的内 ...

  5. 前端js中this指向及改变this指向的方法

    js中this指向是一个难点,花了很长时间来整理和学习相关的知识点. 一. this this是JS中的关键字, 它始终指向了一个对象, this是一个指针; 参考博文: JavaScript函数中的 ...

  6. Numpy改变数组的形状

    import numpy as np n = np.arange(10) # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) # 查看数组的大小 n.size # # 将数 ...

  7. Linux实战教学笔记15:磁盘原理

    第十五节 磁盘原理 标签(空格分隔): Linux实战教学笔记 1,知识扩展 非脚本方式的一条命令搞定批量创建用户并设置随机10位字母数字组合密码. 1.1 sed的高级用法 [root@chensi ...

  8. Linux实战教学笔记16:磁盘原理

    第十五节 磁盘原理 标签(空格分隔): Linux实战教学笔记 1,知识扩展 非脚本方式的一条命令搞定批量创建用户并设置随机10位字母数字组合密码. 1.1 sed的高级用法 [root@chensi ...

  9. Linux 路线 推荐

    1.<Linux程序设计>- 靠它来入门,然后装一个linux体系,练习shell(party)和linuxC,把基础打牢: 2. <深入理解Linux内核>和<Linu ...

随机推荐

  1. mongodb的增删改查

    show dbs 显示所有有数据的数据库 use dbname:如use ela; 如果指定的数据库不存在,就会创建,否则就会切到该数据库上. db 显示当前数据库 db.dropDatabase() ...

  2. shell 脚本学习之内部变量

    一,$BASH Bash的二进制程序文件的路径 二,$BASH_ENV 这个环境变量会指向一个Bash的启动文件, 当一个脚本被调用的时候, 这个启动文件将会被读取. 三,$BASH_SUBSHELL ...

  3. AWS and OpenStack

    AWS OpenStack EC2 Nova EBS Cinder EFS Manila S3 Swift Storage Gateway 本地上云 ClondFront 内容发布服务 VPC Neu ...

  4. MongoDB的MapReduce用法及php示例代码

    MongoDB虽然不像我们常用的mysql,sqlserver,oracle等关系型数据库有group by函数那样方便分组,但是MongoDB要实现分组也有3个办法: * Mongodb三种分组方式 ...

  5. 基础知识之 - C# Using的用法

    C#里面Using有两种用法: 1.作为指令. using+命名空间,导入其他命名空间中定义的类型,这样可以在程序中直接用命名空间中的类型,不必指定命名空间: 命名空间是.NET程序在逻辑上的组织结构 ...

  6. windows环境下MySQL-5.7.12-winx64下载安装与配置

    系统:64位Win-7 官网压缩包:mysql-5.7.12-winx64.zip 前后花了一些时间,以前都是下载软件直接安装在本地,现在这个不一样,下载压缩包后要解压缩到安装目录,然后在控制台下配置 ...

  7. tornado handler 方法复用的 3 个方法

    tornado handler 调用 特性 在一次 tornado 请求中调用其他 tornado handler 中的方法, 比如 run 方法 引言 在后台开发中, 有时需要做一些功能的整合, 比 ...

  8. 如何用webgl(three.js)搭建一个3D库房,3D密集架,3D档案室,-第二课

    闲话少叙,我们接着第一课继续讲(http://www.cnblogs.com/yeyunfei/p/7899613.html),很久没有做技术分享了.很多人问第二课有没有,我也是抽空写一下第二课. 第 ...

  9. Java复习之Eclipse快捷键大全

    Ctrl+1 快速修复(最经典的快捷键,就不用多说了)Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加)Ctrl+Alt+↑ 复制当前行到上一行(复制增加)Alt+↓ 当 ...

  10. PAT 1062 Talent and Virtue

    #include <cstdio> #include <cstdlib> #include <cstring> #include <vector> #i ...