【干货】全闪存阵列技术大揭秘完整版

原创内容,转载请注明:  [http://www.ssdfans.com]  谢谢!

1:EMC XtremIO解剖


 

经常听人说起全闪存阵列,牛逼哄哄的样子,那这个全闪存阵列到底是个什么东东?阿呆将以某一款EMC XtremIO为例来带你入门。

 

结构

 

如下图是一个标准的XtremIO全闪存阵列,含有两个X-Brick,之间用Infiniband互联。可以看出,X-Brick是核心,那么X-Brick里面究竟是那些东东?


 

我们来看看,一个X-Brick包括:

  • 高级UPS电源;
  • 2个存储控制器;
  • 磁盘阵列存储柜DAE,放有很多个SSD,每个SSD都用SAS连接到存储控制器;
  • 如果系统有多个X-Brick,那么需要2Infiniband交换机来实现存储控制器高速互联;

     

    存储控制器

     

    如下图,存储控制器其实就是个Intel的服务器,配有两个电源,看起来是两个独立NUMA架构的CPU2Infiniband控制器,2SAS HBA卡。Intel E5 CPU,每个CPU配有256GB内存。

     


     

    屁股后面插好各种线缆,就是这样乱糟糟的。设计的架构适用于集群,所以线缆有很多是冗余的。

     


     

    阵列正面照,LCD显示的是UPS电源状态。下图中一个个竖着的应该就是SSD阵列了。

     



     

    配置

     

    如下表,一个X-Brick容量是10TB,可用容量7.5TB,但是考虑到数据去重和压缩大概为51的比例,最终可用容量为37.5TB


     

    性能

     

    参考链接里面貌似是EMC内部人士写的测试结果,他们在这个2X-Brick的全闪存阵列跑了550个虚拟机,服务7000个用户服务器。每天平均读写带宽为350-400MB/s,IOPS 20k.最高时达到20GB/s,200k IOPS

     

    软件控制台

     

    我们来看看软件控制台参数,第一个图左边显示数据降低率2.51,其中去重1.51,压缩1.71.右边是带宽,IOPS和延迟监控图,看起来能显示每个SSD当前的性能和汇总的读写性能。



    下图是每个SSD的监控图,DAE中每个盘下面有模拟的灯,根据盘当前的读写活动不断闪烁,看起来非常酷!


     

    2:EMC XtremIO硬件架构

     

    EMC XtremIOEMC全闪存阵列市场的突袭,它从底层开始完全根据闪存特性设计,我们来看看Vijay Swami在个人博客上对XtremIO的详细分析。

     

    硬件架构

     

    如下图,一个X-Brick包含两个存储控制器,1个装了25SSDDAE,还有两个电池备用电源(BBUbattery backup unit)。每个X-Brick包含有25400GBSSD,原始容量10TB,使用的是高端的eMLC NAND Flash,一般擦写寿命比普通的MLC长一个数量级。如果只买一个X-Brick,配有两个BBU,其中一个是为了冗余,如果继续增加X-Brick,那么其他的X-Brick只需要一个BBU


     

    X-Brick支持级联来增加容量,所以是一种Scale-Out的架构,最多可以到4个甚至8个。

     


     

    X-Brick之间采用40GbpsInfiniband交换机互联。

     


     

    上图是一个X-Brick存储控制服务器的所有端口,40Gbps Infiniband接口是为了后端数据连接,其实就是X-Brick之间的互联。那么,阵列和Host控制端怎么进行数据交互呢?可以看出,既可以使用8 Gbps FC,也可以使用10GbpsiSCSI。那又是怎么连到那么多的SSD上呢?用的是6GbpsSAS接口,和VNX类似。同时,包括电源和所有的接口都是有冗余的,用来故障时备用。这样一个X-Brick节点自己数据的存储怎么解决呢?它配有两个SSD,用来掉电时保存内存中的元数据,要知道去重还是很占用内存的,因为一般每个数据块需要计算出一个hash值,甚至双重hash,用hash值来判断唯一性。同时还有2SAS硬盘,作为操作系统运行的磁盘。

     

    这样一来,存储控制器有自己的硬盘,而不占用DAE里面的SSD阵列,闪存阵列只用于存储用户数据,受两个存储控制器管理。这种架构的好处是结构清晰,界限分明,未来还能直接升级存储控制器软硬件而不动闪存阵列里的数据。

     

    再来看看每个存储控制器的配置:有两个CPU插槽的1U机箱,使用两个8核的Intel Sandy Bridge CPU256GB内存。

     

    3:吹最高性能的都是耍流氓

     


    现在很多厂商都以吹嘘最高性能为荣,拿一个新盘,写一点数据,甚至往DRAM Cache里面写一点,读出来,就吹嘘带宽,IOPS,延迟。更有甚者,不写数据,空盘读,达到巅峰带宽,
    简直把用户当三岁小孩。殊不知,对用户来讲,尤其是企业级用户,最高性能说明不了什么,只能忽悠那些不懂行的人,对真正业内人士来说,实际使用的稳定性能才是王道。

     

    EMC全闪存阵列XtremIO110TBX-Brick,可用容量只有7.5TB,但是考虑到数据去重,用户能用的容量其实很大,跟实际的应用相关。比如虚拟桌面VDI应用,数据重复率很高,想想不同人安装的Windows XP虚拟机的系统文件基本都是一样的,去重可以省下多大的空间啊!但是像一般的数据库应用,重复率又很低,毕竟数据库存储的数据几乎是随机的。

     

    不耍流氓的实际IOPS

     

    我们来看看一个X-BrickIOPS

  • 100% 4KB写:100K IOPS
  • 50/50 4KB/写:150K IOPS
  • 100% 4KB 读:250K IOPS

     

    如果是两个或更多X-Brick级联,性能线性增长,前面的数值翻几倍就可以了。如本文开头那张图所示。

     

    有一点必须得强调,在现在牛皮吹的一个比一个大的时代,上面说的这个性能看起来一般,但是要知道,这可是实际使用的性能。而且不是空盘拿来跑跑的性能,而是全盘写了至少80%之后的性能。为什么要写至少80%才能测真正的性能?因为空盘写不会触发垃圾回收,用户占满了整个带宽,当盘快写满的时候,垃圾回收开始工作,用户能分到的带宽就少了,性能自然下降。而我们买了盘,肯定很快会写很多数据,所以只有快写满了才是常态。

     

    4:装了安卓的iPhone你还买吗?

     


     

    软件取胜之道

    存储行业发展到今天,硬件越来越标准化,所以已经很难靠硬件出彩了。要么能够制造存储芯片,例如三星这种模式,从底层开始都自己做,靠巨大的出货量坐收硬件的利润,但这种模式投资巨大,一般人玩不来。要么就靠软件走差异化了,而且软件还有一个硬件没有的优势:非标准化,比如IBM的软件很多是基于自己的Unix系统开发,别人用了之后切换到其他厂家的软件难度很大,毕竟丢数据的风险不能随便冒。

     

    看了前面的XtremIO硬件架构之后,不少人可能觉得并没有什么复杂的,基本上是个系统集成,组装机嘛,中国的山寨厂家也能搞一套出来。但是,全闪存阵列的核心在软件,软件做好了,才能让用户体验到闪存阵列的性能。试想,如果iPhone装的是Android系统,你还会花五六千大洋排队去买吗?估计连两三千都舍不得了吧!

     


     

    XIO软件几大杀器

     

  • 去重:提升性能,同时因为写放大降低,延长了闪存的寿命,提高可靠性。
  • Thin Provisioning:分区的容量可以随着使用而自动增长(直到用满阵列),这样关键时候不会影响到性能。
  • 镜像:先进的镜像架构保证了容量和性能不会受损。
  • XDP数据保护:用RAID6保护数据。
  • VAAI集成。后面解释这是个什么东东。

     

    XIO软件核心设计思想

     

  • 一切为了随机性能
  • 任何节点上访问任意数据块,都不能比其他情况增加多余的成本,就是必须是公平访问所有资源。这是为神马?这样的效果就是即使节点增加,性能可以线性增长,扩展性也好。
  • 尽可能减少写放大
  • 要知道,对SSD来讲写放大不仅导致寿命缩短,同时因为闪存的擦写次数升高,导致质量下降,数据可靠性也会下降。XIO的设计目标就是让后台实际写入的数据尽量少,起到一种数据衰减的作用。
  • 不做全局垃圾回收
  • XIO使用的是SSD阵列,而SSD内部是有高性能企业级控制器芯片的,当前的SSD主控都非常强大,垃圾回收效率很高,所以XIO并没有再重复做一遍垃圾回收。这样做的效果是降低了写放大,毕竟后台搬移的数据量少了,同时,节省出时间和系统资源来给其他软件功能,数据服务,VAAI等。
  • 按照内容存放数据
  • 数据存放的地址用数据内容生成,而跟逻辑地址无关。这样数据可以存放在任何位置,提升随机性能,同时还可以针对SSD做各种优化。
  • 数据可以平均的放置在整个系统中。
  • True Active/Active数据访问
  • LUN没有所有者一说,所有节点都可以为任何卷服务,这样就不会因为某一个而性能受损。
  • 扩展性好:性能,容量等都可以线性扩展。

     

    5:深入XIO软件架构

     


    新年刚过,最近京沪等一线和南京等准一线城市房价暴涨,楼市火热,推升了交易量。在这股疯了似的行情中,很多人估计都不敢相信自己的眼睛了:别说了,我想静静!大城市的房子是有限的,技术却是无限的,人的大脑很多都是尚未开发的荒地,既没有18亿亩土地红线,又没有土地出让金,阿呆哥带你花个十分钟,安安静静学习全闪存技术,把这些荒地开发起来。每天看一篇SSDFans的文章,一年后你的大脑就能建成一座SSD技术大厦了,而别人天天盯楼市的大脑还是荒地。

     

    XtremIO软件为什么在Linux用户态?

     


    如上图,XIO全闪存阵列软件架构,XIO OSXIO的软件都运行在Linux的用户态,这样有什么好处呢?我们知道,Linux系统分为内核态和用户态,我们的应用程序都在用户态运行,各种硬件接口等系统资源都通过内核态管理,用户态通过system call访问内核资源。XIO软件运行在用户态有几大优点:

  • 避免了内核态的进程切换,速度快。
  • 开发简单,不需要借助于各种内核接口,以及复杂的内存管理,异常处理。
  • 不必收到GPL的约束。Linux是开源系统,程序在内核运行必然要用到内核代码,按照GPL的规定,就得开源,在用户态自己开发的应用就不受此限制。这种商业性软件,里面很多都是公司花了很多心血开发的核心技术,开源了就太不值得了。由此也可以看出软件对全闪存阵列的价值!开源了还能卖那么贵吗?或者说开源了,谁都可以组装起来,装一个开源软件,全闪存阵列就只能打价格战了,高科技当大白菜卖。


     

    用户态掌控一切

     

    在每个CPU上运行着一个XIOS程序:X-ENV,如果你敲一下“top”命令,就会发现这个程序掌控所有的CPU和内存资源。为什么这么做?就是为了XIO100%使用硬件资源,能够运筹帷幄之中,决胜千里之外。知道自己赚多少钱,才能想清楚该怎么花啊。

    第二个作用是,不给其他进程影响XIO性能的机会,保证性能的稳定。

    第三个作用是提供了一种可能性:未来可以简单修改就移植到Unix或者Windows平台,或者从X86 CPU移植到ARMPowerPCCPU架构,因为都是上层程序,不涉及底层接口。

     

    软件定义硬件

     

    XtremIO完全是脱离了硬件的软件,为什么这么说?因为他们被EMC收购之后,很快就从自己的硬件架构切换到了EMC的白盒标准硬件架构,说明软件基本不受硬件限制。而且,XIO的硬件基本没有自己特殊的组件,不包含FPGA,没有自己开发的芯片、SSD卡、固件等,用的都是标准件。这样做的好处是可以使用最新最强大的X86硬件,还有最新的互联技术,比如比Infiniband更快的技术。如果自己开发了专用的硬件,要跟着CPU一起升级就很麻烦了,总是会慢一拍。

    甚至,XtremIO完全可以只卖软件,只不过目前EMC没这么干而已。现在是硬件,软件,EMC客户服务一起卖。没准哪天,硬件不赚钱了,EMC就只卖XIO软件了呢。

     

    6EMC XtremIO核心软件流程

    6大模块

     

    XIO软件分为六个模块,来实现复杂的功能。包括三个数据模块RCD,三个控制模块PML

  • PPlatform,平台模块。
  • 监控系统硬件,每个节点有个P模块在运行。
  • MManagement,管理模块。
  • 实现各种系统配置。通过和XMS管理服务器通信,执行任务,比如创建卷,LUN的掩码,等从命令行或图形界面发过来的指令。有一个节点运行M模块,其他节点运行另一个备用M模块。
  • LCluster,集群模块。
  • 管理集群成员,每个节点运行一个L模块。

     

  • RRouting,路由模块。
  • 其实就是把发过来的SCSI命令翻译成XIO内部的命令。
  • 负责来自两个FC和两个iSCSI接口的命令,是每个节点的出入口看门大爷。
  • 把所有读写数据拆成4K大小。
  • 计算每个4K数据的HASH值,用的是SHA-1算法。
  • 每个节点运行一个R模块。
  • CControl,控制模块。
  • 包含了一个映射表:A2H(数据块逻辑地址——Hash值)。
  • 镜像,去重,自动扩容等高级数据服务。
  • DData,数据模块。
  • 包含了另一个映射表:H2PHash——SSD物理存放地址)。可见,数据的存放地址跟逻辑地址无关,只跟数据有关,因为Hash值通过数据算出来。
  • 负责对SSD的读写。
  • 负责RAID数据保护技术:XDPXtremIO Data Protection

     

    读流程

     

  1. Host把读命令通过FCiSCSI接口发送给R模块,命令包含数据块逻辑地址和大小。
  2. R模块把命令拆成4KB大小的数据块,转发给C模块。
  3. C 模块查A2H表,得到数据块的Hash值,转发给D模块。
  4. D模块查H2B表,得到数据块在SSD中的物理地址,读出来。

     

    不重复的写流程

     


    1.    Host把写命令通过FCiSCSI接口发送给R模块,命令包含数据块逻辑地址和大小。

    2.    R模块把命令拆成4KB大小的数据块,计算出Hash值,转发给C模块。

    3.    C 模块发现Hash值没有重复,所以插入到自己的表里面,转发给D模块。

    4.    D模块给数据块分配SSD中的物理地址,写下去。

     

    可去重的写流程


    1.    Host把读命令通过FCiSCSI接口发送给R模块,命令包含数据块逻辑地址和大小。

    2.    R模块把命令拆成4KB大小的数据块,计算出Hash值,转发给C模块。

    3.    C 模块查A2H表(估计还有个H2A表,或者是个树,Hash数组之类),发现有重复,转发给D模块。

    4.    D模块
    知道数据块有重复,就不写了,只是把数据块的引用数加个1

     

    可以看出,自动扩容和去重都是自然而然在后台完成的,不会影响正常读写性能。

     

    7VM复制竟然如此简单!

     

    茫茫人海,漫漫人生路,有时候尽管我们选择了不同的道路,但最终还是走到了同一个归宿。没想到,整合文件系统和SSD映射表后的复制和有去重功能的全闪存阵列最终达到了一样的效果。

     


     

    我们曾经畅想过整合了文件系统inode表和SSD映射表之后,复制会很简单,只需要两个逻辑块对应到一个物理块就可以了,并不需要读出来再写下去。要知道自从全闪存阵列有了去重功能之后,也有异曲同工之妙,复制这个基本的文件操作竟然如此简单:没有数据搬移,仅仅是某几个计数登记一下而已。下面我们细细道来。

     

    ESXiVAAI

     

    首先我们来普及一下ESXiVAAI两个名词。我也是百度的。

     

    VMware的虚拟化产品,就个人、小企业而言,有WorkstationESXivSphere,免费版)、VMware Server(免费版)可以选择,WorkstationVMware Server需要装在操作系统如WindowsLinux上,ESXi则内嵌操作系统,又免费。所以ESXi可以看成是虚拟机平台,上面运行着很多虚拟机。

     

    VAAI“vStorage APIs for Array Integration”,虚拟化领域的标准语言之一,其实就是ESXi等发命令的协议了。

     

    复制流程

     

    下图是复制前的数据状态。


  5. ESXi上的虚拟主机用VAAI语言发了一个虚拟机(VM)复制的命令。
  6. R模块通过iSCSIFC收到了命令,并选择一个C模块执行复制。
  7. C模块解析出命令内容,把原来VM的地址范围0-6,复制到新的地址7-D,把结果发送给D模块。
  8. D模块查询Hash表,发现数据是重复的,所以没写数据,只把引用数增加1.
  9. 这样复制完成了,没有真正的SSD读写。

     

    不过有个问题是,这些元数据操作都是在内存中完成的,那万一突然掉电了怎么办?XIO设计了一套非常复杂的日志机制:通过RDMA把元数据的改动发送到远端控制器节点,使用XDP技术把元数据更新写到SSD里面。XIO的元数据管理是非常复杂的,前面讲的流程只是简单介绍而已。

     


    由于使用了A2HH2P两张表,数据可以写到SSD阵列的任何一个地方,因为只跟数据的HASH有关,跟逻辑地址Address没关系。

     

    8:中国为什么需要高铁?

     


    最近两会召开,网友们在热追中国高铁十三五规划,尤其是福建到台北的海底高铁更是令人震撼。短短十多年的时间,中国居然成为了世界第一高铁大国,乘坐高铁成为了大家城市间出行的第一选择。那为什么中国这么热衷于建设高铁呢?

     

    人多!就是因为中国人口众多,而且稠密,基本集中在东部地区,比如京沪线,普通铁路的运力根本不够这么多人的需求,飞机也没办法拉完这么多人。高铁速度快,自然单位时间内能运载更多的人,交通效率更高。

     

    在存储领域也是这个道理,全闪存阵列底层采用了闪存,所以速度很快,为了不浪费闪存的速度,上层的通信也需要非常高效。本文揭秘XtremIO全闪存阵列的内部通信。

     

    回顾RCD模块

     

    前文介绍了RCD三个数据相关的模块。唉,等等,等等,这是什么东东?哈,早就知道你完全不记得了,也知道你懒得去翻历史文章,所以再解释一遍。

  • RRouting,路由模块。
  • 其实就是把发过来的SCSI命令翻译成XIO内部的命令。
  • 负责来自两个FC和两个iSCSI接口的命令,是每个节点的出入口看门大爷。
  • 把所有读写数据拆成4K大小。
  • 计算每个4K数据的HASH值,用的是SHA-1算法。
  • 每个节点运行一个R模块。
  • CControl,控制模块。
  • 包含了一个映射表:A2H(数据块逻辑地址——Hash值)。
  • 镜像,去重,自动扩容等高级数据服务。
  • DData,数据模块。
  • 包含了另一个映射表:H2PHash——SSD物理存放地址)。可见,数据的存放地址跟逻辑地址无关,只跟数据有关,因为Hash值通过数据算出来。
  • 负责对SSD的读写。
  • 负责RAID数据保护技术:XDPXtremIO Data Protection

     

    可以看出,R和上层打交道,C是中间层,D和底层SSD打交道。记住这个就可以了。

     

    物理连接

     

    首先要搞清楚的是,这么模块物理上怎么放在控制服务器里面。前面说过,1X-Brick的控制服务器有两个CPU,每个CPU运行一个XIOS软件。如下图,RC模块运行在一个CPU上,D在另一个上。为什么要这么做呢?


     

    因为Intel Sandy Bridge CPU集成了PCIe控制器(估计是说Sandy Bridge企业版CPU集成了PCIe 3.0接口,不需要通过南桥转接)。所以,在多CPU的架构中,让设备直连CPUPCIe接口性能就会很高,而RCD的分布也是按照这个需求来设计的。例如SAS转接卡插到了CPU 2PCIe插槽上,所以D模块就要运行在CPU 2上,这样性能才能达到最优。从这里,我们有可以看出XtremIO的架构上的优点,就是软件完全可以按照标准化硬件来配置,通过布局达到最优的性能。如果CPU的分布变化了,也会根据新的架构简单调整软件分布来提升性能。

     

    模块间通信:扩展性极佳

     

    我们再来说说正题:模块间怎么通信?其实并不要求模块必须在同一个CPU上,就像上图一样,RC并不是一定要在一个CPU上才行。所有模块之间的通信通过Inifiniband实现,数据通路使用RDMA,控制通路通过RPC。我们来看看通信的时间成本:XtremIOIO总共延时是600-700us,其中Infiniband只占了7-16usInfiniband来互联的优点是什么?其实还是为了扩展性,X-Brick即使增加,延迟也不会增加,因为通信路径没变化:任意两个模块之间还是通过Infiniband通信,如果系统里面有很多RCD模块,当一个4K数据块发到一个前端R模块上,它计算Hash值,Hash会随机坐落在任意一个C上,没有谁特殊。这样一切都是线性的,X-Brick的增减,线性的导致性能增减。

     

    10:大结局

     


     

    XtremIO跟谁般配?

     

    闪存价格还是比较昂贵的,尤其是企业级应用使用的eMLCSLC,所以全闪存阵列XtremIO并不能取代大容量的存储阵列SAN。那它跟哪种应用场景比较般配呢?想想就知道了,闪存的优势就是延迟低,性能高,所以适用于容量要求不高,但是要求延迟低,高IOPS的应用,比如VDI(虚拟桌面基础架构,就是虚拟机),数据库,SAP等企业应用。

     

  • 数据库是非常受益的,为什么呢?首先是性能高,其次有一大优点就是复制几乎不占用空间,所以用户可以很方便快速地把数据放很多个副本。
  • 已经有人咋一个X-Brick上运行了2500-3500VDI虚拟机,而延迟在1毫秒以内。虚拟机很多数据也是重复的,毕竟每个系统的文件都差不多,所以去重也能发挥大作用。
  • 企业应用领域也有人使用XtremIO加速了关键应用。

     

    总之,只要容量足够,那你的应用肯定用起来比以前快多了!

     

    结语

     

    看完了整个全闪存阵列XtremIO的技术揭秘,我们发现其实XIO的核心还是在软件,因为硬件都是标准件,X86服务器,SAS接口的SSDAFA到底有什么独特的地方呢?

  • 相比SSD,他没有垃圾回收,Wear LevelingRead Disturb等等传统SSD的功能,因为这些都在SSD里面由主控搞定了。
  • 相比传统阵列,它的特色是去重和RAID 6每次写到新的地址的功能。

     

    以前可能你也不知道牛逼哄哄的全闪存阵列到底是怎么弄的,看完了这篇文章,相信你已经不觉得它神秘了。甚至可以这么简单的看:SSD是很多U盘的阵列,全闪存阵列是很多SSD的阵列,只不过U盘是最差的NAND FlashSSD好一点,AFA用的更好。但是,每升一级,就是一次质变,要增加新的功能。

     


     

    你想在SSD领域积累更多人脉、学习核心技术、掌握最新动态?我们建了一个微信群,方便SSD Fans们讨论SSD,闪存和存储相关的话题。群友既包括各大公司SSD、存储方面的技术精英,行业大牛,也有很多SSD爱好者。

     

    欢迎各位SSD行业人士、使用者和爱好者加入,谢绝猎头,广告(可联系contact@ssdfans.com通过公众平台发布)。

     

    加入后请修改昵称为:姓名(或昵称)公司(或领域)职业

     

    例如;张三-Marvell-SSD FW QA

    蛋蛋-SSD Controller-FW开发

     

    微信加nanoarch为好友拉你入群。

     

    引用

    http://vjswami.com/2013/11/13/xtremio-hardwaresoftware-overview-architecture-deepdive/

    http://sudomakeinstall.com/virtualization/emc-xtremio


分类目录 金士顿SSD评测.
扫一扫二维码或者微信搜索公众号ssdfans关注(添加朋友->点最下面的公众号->搜索ssdfans),可以经常看到SSD技术和产业的文章(SSD Fans只推送干货)。
ssdfans微信群介绍
技术讨论群 覆盖2000多位中国和世界华人圈SSD以及存储技术精英
固件、软件、测试群 固件、软件和测试技术讨论
异构计算群 讨论人工智能和GPU、FPGA、CPU异构计算
ASIC-FPGA群 芯片和FPGA硬件技术讨论群
闪存器件群 NAND、3D XPoint等固态存储介质技术讨论
企业级 企业级SSD、企业级存储
销售群 全国SSD供应商都在这里,砍砍价,会比某东便宜20%
工作求职群 存储行业换工作,发招聘,要关注各大公司招聘信息,赶快来
高管群 各大SSD相关存储公司高管和创始人、投资人

想加入这些群,请微信扫描下面二维码,或搜索nanoarchplus,加阿呆为微信好友,介绍你的昵称-单位-职务,注明群名,拉你进群。SSD业界需要什么帮助,也可以找阿呆聊。