固态盘到底该怎么做Raid?
《固态盘到底该怎么做Raid?》要点: 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上做RaidSAS和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是无论如何也无法满足固态存储场景下的基本需求的. (编辑:ASP站长网) |