NVMe 固态盘已经开始逐渐普及,但是,有个严峻的问题摆在眼前,那就是如何对NVMe盘做Raid,NVMe固态盘虽好,但是如果缺乏了Raid的冗余性保护,那么不少人其实是有顾虑的,从而阻碍NVMe固态盘的普及。我们知道,做Raid目前最广泛的方式,是采用硬Raid卡,先将硬盘接入到Raid控制器上,Raid控制器再接入到系统PCIE总线上,这是SAS/SATA盘的标准做法。

得益于数据块条带化以及Raid卡上的数据缓存以及超级电容的备电,读写IO速度被进一步加快,同时还能够防止单盘或者双盘同时故障导致的数据丢失。Raid卡在服务器上被广泛应用。

那么,对于PCIE接口的、NVMe访问协议的固态盘,目前的Raid卡是无能为力的,因为目前的Raid卡只提供了SAS/SATA接口接入硬盘,要想把NVMe固态盘接入,就得对现有Raid控制器进行改造,在芯片中加入PCIE主控制器和PCIe Switch,NVMe固态盘接入集成在Raid主控里的Switch(或者两个独立的die芯片,封装在一起),依然采用Raid主控来做Raid。这种做法会增加成本,因为为了同时支持SAS/SATA和PCIE,多引入了PCIE Switch部分,而SAS兼容SATA,却不兼容NVMe。

NVMe固态盘做Raid的几个方式分析

选项之一:NVMe Over SAS

既然ATA和SCSI都可以over SAS,那么为什么不能把NVMe协议也Over到SAS呢?其实理论上是完全可以的。SAS Expander中每个端口都有个叫做STP bridge的桥接电路,就是这个电路负责生成SATA链路对应的信号,从而才可以与SATA盘通信,而如果在SAS Expander中增加一个PCIe的主控端,负责生成PCIe信号,由SAS Expander固件负责对PCIe固态盘进行初始化配置。但是冬瓜哥认为这样做理论上可以,但是复杂度并不亚于前一种方案。

选项之二:在PCIe Switch上做Raid

SAS 和SATA盘可以通过SAS Expander汇总接入到SAS控制器上,PCIe接口的NVMe SSD也可以通过PICeSwitch芯片汇总接入到CPU上的PCIe主控制器上。那么是否可以在PCIe Switch上做Raid呢?理论上没有什么不可以。但是利用芯片做Raid需要满足几个条件:性能不用很强但也不能太孱弱的嵌入式通用CPU,专用XOR硬加速电路,起码2GB的数据缓存,用于掉电保护的超级电容和Flash。如果把一片PCIe Switch芯片中嵌入这几样东西,那么还不如说其已经变成了将后端接口从原来的SAS换为PCIe 主控+PCIeSwitch的传统Raid控制器了,也就是接下来的选项之三。

选项之三:在现有SAS/SATA Raid控制芯片中增加PCIe Switch

该选项应该说是比较正统的想法,之前的两个选项稍显奇葩。但是这种方法带来的一个问题则是Raid控制器的成本会非常高,同时其性能还不见得好。NVMe协议+PCIe为何能够发挥出固态盘的性能?主要是两个方面:协议栈的精简加上CPU到PCIe设备链路层一跳直达充分降低了时延,再就是加大的队列数量和队列深度,充分提升了并发度从而极大提升了吞吐量。而如果采用外部硬Raid控制器来做Raid,结果将是:由于Raid控制器属于带内虚拟化设备,其会终结掉前端的协议和IO请求,将数据拷贝到内部缓冲,然后进行Raid处理,再重新向后端SSD发起IO请求,这便让NVMe协议对IO时延的降低荡然无存。

其次,由于硬件电路资源的限制,硬Raid控制器内部不会有太高的并发度,因为无法做太多的硬寄存器队列进去。

第三点,如果硬Raid控制器同时支持SAS/SATA/NMe硬件接入的话,那么势必会产生快慢盘效应,也就是NVMe固态盘的性能会进一步被SAS/SATA接口的盘拖慢,因为后者响应慢,其对芯片内部资源迟迟得不到释放,从而导致快盘性能受牵连。

第四点,在运维方面,会带来不便,比如,无法利用一些工具直接在主机端查看NVMe SSD内部的状态,因为Raid控制器完全屏蔽了NVMe盘,主机端OS根本看不到它,无法对其直接操作,想要细化的功能,就必须在Raid控制器固件中开发对应的工具,取回对应的信息,然后利用Raid控制器提供的工具来查看,这个非常不方便,完全将NVMe固态盘的运维排除在外。

第五点,硬Raid控制器固件里很难实现对固态盘的特殊优化,比如全局磨损均衡,动态负载优化等等专门针对固态介质而考虑的特性,Raid控制器厂商对固态盘的管理是不在行的,而且受限于内部运行资源的限制,不可能在短小精悍的固件中做很复杂的功能。

冬瓜哥看来,利用传统硬Raid控制器做Raid的最大一个优点是能够维持传统的使用习惯,而其他则全是缺点。

选项之四:在主机端采用软件做Raid

噗~~。有人会不以为然了,软raid?别搞笑了。软的怎么会比硬的更强呢?在十几年前,这么说似乎没什么问题,但是放到现在,事情变了。十几年前是CPU不够用的,再让他计算软Raid,当然力不从心;而现在是CPU核心数量暴增,频率不能说是暴增但也上去了,已经性能过剩了,尤其是核心数量方面。再加上Linux自带的软Raid模块是没有经过优化的。经过优化的软Raid,在性能上完爆硬Raid。这一点可以看看目前的传统SAN存储系统,其利用单路CPU就可以达到远高于Raid卡的性能,其内部都是软Raid的方式。

硬Raid控制器内的嵌入式CPU的频率一般在1GHz左右,核心数量一般在2~3核,不管是频率、核心数量,还是其内部的执行性能,都远远比不上Xeon服务器CPU。若不是为了维持传统的使用习惯,硬Raid控制器的地位恐怕早已今非昔比了。对于机械盘Raid,硬Raid绰绰有余,但是对于NVMe固态盘做Raid,我们必然首选利用服务器本地的CPU加上经过优化的软Raid模块来做Raid,这样可以保证:IO数据依然一跳直达,从host主存直接拷贝到SSD保证时延降低不是太多、有充足的RAM资源可以容纳更多的队列保证吞吐量、host可以直接控制NVMe固态盘获取对应的信息方便运维、基于开放平台Linux开发方便容易增加更多功能比如针对固态盘的特殊优化、host端资源充足且固态盘与机械盘走不同的协议栈所以不会有快慢盘效应。

这样一说,软Raid全是优点了?只要经过充分的优化,全是优点。唯有一点需要注意,突然故障宕机时如何保证数据一致性的问题,软Raid不能采用write back模式的缓存,否则将丢数据,但是可以用一些手段规避这个问题,比如就用write through,或者利用NVDIMM/NVRAM来承载数据缓存。

有人针对实际测试,使用Linux内核自带的mdraid模块,将4块Intel 750的NVMe SSD做Raid5,写性能只能到70K IOPS左右,可见其效率之低下。当前Linux自带的软Raid是无论如何也无法满足固态存储场景下的基本需求的。

另外,目前的内核自带软Raid也并没有在其他方面对固态盘场景做感知和优化,比如寿命问题,SSD的寿命是可预知的,很有可能同一个Raid组中的多块固态盘短时间内同时达到寿命终点从而引起多盘失效而丢失数据;再比如Raid组的初始化过程,是个完全浪费时间和没有必要的过程,只会白白浪费固态盘寿命;无法感知逻辑数据对象(比如逻辑盘),只能整盘重构,白白浪费寿命。

Memblaze的FlashRaid TM 重新定义软Raid

Memblaze (忆恒创源)作为国内知名固态存储提供商,曾经推出过国内第一块NVMe SSDPblaze4,能够达到将近800K的IOPS。

为了持续建设NVMe生态,开发一款能够发挥出NVMe固态盘性能的软Raid模块的这个设想,很早就引起了公司内部的重视。终于,在2016年的6月份,Memblaze将隆重正式发布这款产品——FlashRaid TM 。先来看看其是否强劲:


         FlashRaid 性能如此强悍的关键原因在于无锁队列技术。FlashRaid模块在达到百万IOPS时对CPU耗费也就是30%左右,Xeon 2640双路,30核心。FlashRaid的开发负责人吴忠杰表示,mdraid模块内部对多线程的优化太差,存在大量锁,效率非常低,尤其是处理写IO的时候。而FlashRaid团队的专家们经过反复思考,最终找到了能够实现基于无锁队列的生产者消费者模型的办法,并申请了专利。无锁队列的好处就是总体性能能够能够随着线程数的增多而呈现更好的线性增长特性。IO根据目标LBA地址范围被Hash然后均衡的下发到多个队列中。


         除了性能方面的优化,FlashRaid在架构、固态存储感知优化等方面大量采用及创造业界前沿技术,可以说是一场技术盛宴!

1.      基于Raid2.0架构构建

整体架构上,FlashRaid采用Raid2.0思想实现。一组物理盘首先被逻辑分割为chunk,多个chunk形成storagepool(可创建多个池),池内的chunk与chunk之间做成各种类型的Raid组从而组成一个条带,也就是container,然后多个container再组成逻辑卷。Chunk的大小是可调节的。Container的chunk该如何在众多chunk中分配,由Resource Allocator根据多方面因素优化决定。

Raid2.0 架构的好处就在于能够极大加快重构速度,以及智能重构,只重构被数据块占用的区域。

2.      带优先级的精准重构技术

假设某个存储池内有两块硬盘损坏,某个Raid6类型的container中恰好有两个chunk分别属于这两块硬盘;同时,另一个Raid6类型的container中只有一个chunk落入了这两块硬盘中的任意一块中,此时,前者这个chunk的处境更加危险,因为其已经没有冗余性了,而后者这个chunk依然能允许一块盘故障,此时FlashRaid会智能判断该场景并且优先重构第一个container。该技术的确为业界创新技术,冬瓜哥之前没有看到过任何其他产品实现该技术。同理,在一块盘故障之后,受影响的Raid5类型的container总是优先于受影响的Raid6类型的container得到重构。

3.      细粒度实时重构

如果遇到某个数据块发生不可恢复错误,那么系统会动态实时的对该块进行重构,而无需等到整个盘故障后才重构。

4.      动态可变长条带

初始时,用户选择使用4D+1P方式的条带/container,但是可能池中的某个SSD容量不够了,系统此时会在后台动态的将4D+1P条带改变为3D+1P,该过程为透明后台执行,不会影响前端应用的IO访问。


5.      全局磨损均衡和逆均衡

当某块SSD的寿命剩余较多时,会拥有最高的被分配权重,这样可以均衡寿命,而当池中的所有SSD的寿命均耗费殆尽的时候,为了方式寿命过于均衡可能导致的同时多盘失效,此时系统启动逆均衡措施,强行选择寿命即将耗尽的SSD,增加其数据写入权重,这样,其就会有更大几率先于其他盘坏掉,然后系统发起重构恢复冗余性。

6.      完善的CLI和GUI配置和监控

除了上述特色之外,FlashRaid还专门对运维方面做了一些增强,比如对链路闪断进行处理,对磁盘热插拔进行处理等等。另外,FlashRaid具备良好的可移植性,并且对SPDK做了适配,可以迁移到用户态空间运行。

FlashRaid绝非仅仅是一款普通的Raid管理模块,FlashRaid的最终形态会是一款具备强大功能的存储系统平台了,得益于其对固态存储优秀的优化,其被广泛用于分布式块存储系统底层的那一天,很快就会到来!


        据悉, Memblaze会在6月15日举办数据中心技术大会,会上会有FLashRaid产品正式发布环节 ,会上将揭秘FlashRaid产品的更多细节。 Memblaze与冬瓜哥独家合作, 为耐心看到这里的朋友们提供了 免费注册码: MBYXQ ,长按扫下面码,报名,输入优惠码即可 。

其他相关阅读(点击可直接进入):

《【冬瓜哥画PPT】最完整的存储系统接口/协议/连接方式总结》

【冬瓜哥画PPT】浅谈闪存控制器架构

【冬瓜哥论文】浅析固态介质在存储系统中的应用方式

你绝对想不到的两种高逼格存储器

【冬瓜哥手绘】大话众核心处理器体系结构

《关于SSD元数据及掉电保护的误解

关于闪存FTL的Host Base和Device Based的误解

《帮你梳理一下各种存储协议及接口》

赏之!

Reward

people gave a reward

固态盘到底该怎么做Raid?相关推荐

  1. 运维工程师到底都在做些什么?

    我们群里最近讨论500台服务器安装系统的问题.我特意找了一篇高人写的文章来与大家分享,希望对大家能有所帮助哈!(以下为作者原文,未加任何修改哈) 看到chinaunix最近出的门户网站运维板块veyr ...

  2. DELL R710做Raid显示灰色

    DELL R710服务器,总共5块硬盘,2块146G(Raid1),2块300G(Raid0),1块240固态硬盘(Raid0),Ctrl+R进入做Raid其中将2块146G硬盘和1块240固态硬盘分 ...

  3. 到底能不能做一辈子的程序员——大龄程序员将何去何从

    目录 写在前面 做一辈子的技术到底好不好 迷茫 求大佬指点迷津 写在前面 今天面试一家银行科技部被拒绝了,原因并不是因为自己的技术烂,而是因为-- 自己缺乏银行从业经验. 做java开发快三年了,看过 ...

  4. pycharm里怎么关闭一个项目_【周末分享】一个完整的项目复盘到底要怎么做?...

    点击"阅读原文",注册会员,海量活动方案免费拿 作者 | 杨阳(广告创意主笔) 来源 | 广告创意(ID:idea1408) 字数:3099 推荐阅读时长:5min 从计划到执行到 ...

  5. 灵魂拷问:用移位来代替除法运算真的效率高吗?Java 编译器到底有没有做除法优化?

    目录 引入 C++ 编译器对除法的优化 Java 编译器对除法的优化 移位运算对应的字节码 除法操作对应的字节码 查看及分析 JIT 即时编译结果 1.手动编译 OpenJDK 2.编译 hsdis- ...

  6. 华为做raid5步骤_华为RH2288V5服务器做RAID 0(官方推荐做法)

    华为RH2288V5服务器采用的Avago SAS3408阵列卡,RAID做法跟RH2285 RH1285不一样,今天薇晓兰就带各位了解下如何给RH2288V5服务器做RAID! 由于Avago SA ...

  7. Dell做RAID配置图文全教程

    首先准备工作:Dell服务器 首先重启Dell,我们会看到Dell服务器的启动页面: 当我们看到出现下面这个界面的时候,根据提示按下Ctrl+R进到SAS磁盘阵列里面 备注:大多数Dell服务器进磁盘 ...

  8. 90%的人都做错的用户画像,到底应该怎么做?

    前几天,有个搞运营的小伙伴向我吐槽,熬了几个夜做出来的用户画像被老板说垃圾.不管是市场人员.运营人员还是产品经理,都躲不开"用户画像",但经常听到伙伴们抱怨,这个词太大了,根本不知 ...

  9. 服务器做raid bios界面做raid配置

    raid是磁盘阵列 举例环境:长城服务器 注意 版本号10以下的不支持BIOS里面做Raid

最新文章

  1. 十二个任务 分给三个线程处理
  2. centos mysql权限不够_centos执行文件时权限不够怎么解决_网站服务器运行维护,centos...
  3. 色彩缤纷的python(改变字体颜色及样式)
  4. 笔记--------手动分页
  5. 最短工期 (25 分)【拓扑排序模板】
  6. 探索Julia(part4)--数组
  7. Dataphin产品核心功能大图(六)发布中心:生产和开发隔离模式下的保护伞
  8. 程序员这个职业会是另一个即将破灭的泡沫吗?
  9. C# 基础知识-09----.NET中SpecialFolder 类
  10. 深度强化学习笔记(一)——深度强化学习简述
  11. 一个在华为工作十年的大牛 历程
  12. 医疗his系统的优势
  13. 多列堆积柱形图怎么做_Excel2010中进行制作多列堆积图的操作方法|多列堆积柱状图...
  14. 移动前端开发和web前端开发的区别
  15. SQL中OVER(PARTITION BY)详解
  16. 外国同行看中国互联网“微创新”
  17. 如何将 M1 Mac(MacBook Pro、Air、iMac、Mac mini)恢复出厂设置?
  18. 错宗复杂的进程标识PID
  19. URL中“#” “?” “”号的作用
  20. python中gensim库详解

热门文章

  1. mysql怎么加快搜索_优化mysql数据库 提高检索速度
  2. 在不同的库存情况下,亚马逊CPC广告的投放策略会有什么改变呢?
  3. 使用 vue-direction-key 快速切换 input 的焦点 focus
  4. UNPv1第二十三章:线程
  5. SAP ABAP——SMARTFORMS(一)【SF概要及文本编辑器】
  6. 【心电检测】基于 EMD、CEEMDAN 算法实现呼吸心跳信号检测实例(去除呼吸旁瓣干扰,测量心跳频率)附matlab代码
  7. 第8章 泛型 《Kotlin 项目实战开发》
  8. 你被京东“坑”了多少钱?
  9. 两小时狂赚1000万!这一切怎么“成功”完成?
  10. 是什么让我遇见这样的你。