蒋文辉 孔祥伦 王玉龙
(南方电网数字电网研究院有限公司,广东 广州 510555)
不同于使用磁盘作为存储介质,通过旋转磁头来进行数据存取的传统机械硬盘,固态硬盘(Solid State Drives,SSD)是用闪存电子存储芯片阵列制成的硬盘,无任何机械活动部件。
虽然机械硬盘凭借容量大、性价比高、使用寿命长、数据易恢复等优点占领着主要的存储市场,但固态硬盘由于其读写速度快、体积小、功耗低、抗振强、工作温度范围广等优势,在航空、电力等工业领域和消费电子领域仍获得了广泛应用。
由于有相关标准明确要求不得使用旋转部件等原因[1-2],变电站自动化设备更是大量采用了固态硬件作为外存储器存储程序和数据,如数据通信网关机、智能远动机、PMU相量测量装置、保护信息管理单元等。
目前,有不少文献研究讨论了固态硬盘的应用。
文献[3]将固态硬盘与传统磁盘组合,利用固态硬盘高性能和传统磁盘低成本、大容量的特点,能够为用户提供大容量的存储空间,保证系统的高性能,同时还能降低成本。
文献[4]对固态硬盘和传统硬盘进行了性能测试、对比分析,通过测验计算机响应时间,设计了使用SSD的计算机升级方案,提升了计算机系统整体性能并延长了计算机服务年限。
文献[5]在变电站的继电保护装置中采用固态硬盘作为存储介质,基于PCIe总线技术实现了大容量存储系统设计,满足了继电保护装置对数据处理安全可靠性的要求。
文献[6]通过固态硬盘测试,获得了读写比例、数据包大小、访问模式等工况变化和供电电压波动对读/写速度、电流等性能特性的影响规律,测试结果表明,固态硬盘使用过程中应保证输入电压的稳定性。
硬盘的性能主要指数据读写速度,长期以来远低于处理器和内存。
机械硬盘读取数据的方式是通过磁头在高速旋转的盘片上进行磁操作。受限于磁头机械转速,转速7 200 r/min的机械盘,其大数据顺序读速度能达到160 MB/s,写速度达到80 MB/s。
固态硬盘读写时是对闪存存储元件进行电子存取操作,速度更快,即使存在主控芯片的操作延时,其读写速度仍能达到500 MB/s,是机械硬盘的数倍。
机械磁盘受限于磁头移动和磁盘旋转等机械运动,响应时间和吞吐率已经远远落后于CPU和内存,SSD外存储器高速读写的优势,有效缓解了计算机系统长期存在的硬盘IO速度瓶颈问题。
固态硬盘的寿命主要和存储单元的擦写次数有关,随着擦写次数上升到寿命限值,硬盘的读写性能下降,存储的数据也会变得不可信。
固态硬盘写入数据到存储单元称为一次擦写,将所有的存储单元全部擦写过,则称为一次全擦写(P/E)。所有固态硬盘都有全擦写限值,根据闪存单元的工艺不同,全擦写限值有数万次、数千次、数百次不等。
固态硬盘使用的闪存单元技术原理是一种基于浮栅技术的场效应管(MOS晶体管),根据浮栅内存储的电子数量不同所表现的电压值来表现不同的数据值。数据值分为1、2、3和4比特,分别对应闪存单元的4种类型:单级闪存单元(SLC)、二级闪存单元(MLC)、三级闪存单元(TLC)和四级闪存单元(QLC)。单位存储能力提高的同时伴随的是寿命的下降,一般认为SLC的寿命下限为全擦写10 000次,MLC为3 000次,TCL为1 000次,QLC为150次,而价格同样依次下降[7]。
固态硬盘一般由主控器、存储介质和固件组成,相应也有核心技术来保障硬盘性能和寿命。固件技术将存储介质组织成块并进行管理,建立逻辑地址和物理地址的映射关系,以提高读取/写入效率并平衡写入次数。
存储块频繁写入超过限值后,将造成存储颗粒老化,成为坏块。因此,数据写入时主控器会协调写入擦写次数最少的存储块,来保障所有存储块的擦写次数接近,该过程称为“磨损均衡”。
优化的磨损均衡算法会将硬盘中存在的长期不变数据也进行迁移,用空出的较新存储块写入新数据,实现静态磨损均衡。因此,每次上层应用要求写入的数据量会小于实际写入存储单元的数据量,该现象称为“写入放大”。
存储单元按块管理,则小数据写入会占用多余的存储单元,这一过程也会产生写入放大,因此会针对小数据进行合理迁移并开展垃圾回收。提高磨损均衡的合理性,优化垃圾回收算法,降低写入放大系数,是固态硬盘优化的核心技术,能够有效提升固态硬盘的使用寿命。
文献[8]提出了一种全程优化的垃圾回收方法,在数据初始放置、垃圾回收目标块的选择、有效数据的迁移等方面尽可能全面地考虑各步骤对SSD寿命的影响,同典型算法相比,可以减少寿命磨损近30%。
文献[9]提出一种超级块重组算法,在垃圾回收时挑选每个闪存上有效数据量最小的物理块来重组超级块,作为垃圾回收的源超级块。
实验结果表明,和传统的垃圾回收算法相比,该算法能减小2/3的写入放大,系统寿命提升将近3倍,适用于预留空间小但对系统寿命和满盘下写性能有要求的场景。
文献[10]提出采用在控制器内部配置缓存设备的方式提高固态硬盘整体性能,缓存设备可使随机小数据写入时只写入缓存而不是闪存介质,当汇总数据量较大时批量写入,该方法能有效延长硬盘使用寿命,但需要增加掉电保护机制防止缓存数据丢失。
文献[11-12]综述了提高SSD耐久度的方法,包括改善磨损均衡算法、使用外部数据缓冲、降低写入放大系数、提升预留空间、应用区块磨损反馈技术等。
某500 kV变电站使用的远动网关机在投运半年后即频繁出现程序退出、设备死机等现象,重启后能恢复。设备商检测分析后确认SSD(MLC颗粒)平均全擦写次数为2 500次,已接近3 000次,部分存储颗粒磨损度较高。更换SSD后问题解决,装置运行正常,但仍需定量地进行分析,确定SSD写入数据量、P/E次数与故障的关系。
SSD的写入数据量可以使用Linux系统自带的iotop命令监测,P/E次数则需要硬盘供应商提供相应的工具来获得。现场SSD为MLC存储颗粒,64 GB容量,不带缓存。
模拟变电站数据环境,使用3台样机和SSD进行测试,记录操作系统的日平均写入数据量,和SSD检测工具获得的日平均P/E次数进行对比,结果如表1所示。
表1 SSD寿命对比测试
测试得出以下结论:
(1)带缓存机制的SSD能有效延长使用寿命,降低放大系数;
(2)随着SSD累积P/E次数的增加,放大系数会增大很多;
(3)假定放大系数与当前已擦写次数为正相关,则该型号SSD的预估寿命在0.6~2.3年。
现场SSD故障出现在设备投运半年后,考虑到设备前期的场内调试、现场调试至少有4个月时间,可以认为寿命对比测试的结论较为符合现场情况。MLC颗粒的SSD理论累积P/E次数下限为3 000次,而本次故障发现平均P/E次数达2 500次时已频繁出现读写到坏块导致设备故障的情况,合理推断是该型号SSD的磨损均衡算法效果不佳,造成部分存储颗粒因磨损过度已经退化,造成设备程序或操作系统运行异常。
另外,日均30 GB的写入数据量与变电站远动机的场景认知有偏差,为查明写入数据量的程序比例,持续使用iotop命令定位分析程序的数据写入量,发现存在某个服务程序的日均数据写入量达到了26 GB。通过与软件供应商沟通,确认是该远动机启用了一个数据断面定时保存功能造成的。该功能不是必需的,取消后该站的SSD日平均写入数据量降低为4 GB,预计寿命能延长7倍。
最终该故障现象得到根本解决的方法为:
(1)变电站自动化设备换用其他品牌带缓存机制的SSD;
(2)关闭自动化设备系统软件中不必要的数据保存功能。
变电站设备使用SSD,需对其状态进行在线监测,评估性能变化和使用寿命,在SSD颗粒老化前预警。监测对象包括:
SSD的写入放大系数与剩余空间有高度相关性,剩余空间越大,则写入放大系数越小。研究数据表明,剩余容量为50%时,写入放大系数为2左右[12];当剩余容量低于20%时,写入放大系数会增大较多。因此,需要对剩余空间进行监测预警,低于20%的可用空间时,使告警指示灯亮。
如能使用供应商自带的工具定期对SSD进行状态监测,是较为合理的方式。除此之外,考虑到SSD品牌的多样性,可以定期对SSD进行顺序读写测试来检测硬盘性能是否有明显下降,一般设定标称告警值为100 MB/s,连续多次速度检测低于该值时设备应告警。
测试写入过程不应对SSD造成较大的损耗,测试建议单次数据量为32 kB,连续写入1 024次,每天执行一次监测,则当天数据量不超过40 MB,对SSD损耗相对较小。测试写性能,Linux设备一般可使用dd命令:
如为机械硬盘,测试结果一般返回在100 MB/s左右,固态硬盘在500 MB/s左右。
自动化设备的状态监测软件模块集成供应商提供的监测工具,每日定时对SSD进行一次状态读取,获取当前全擦写P/E次数S,与前一天的差值即为日P/E次数T,以公式(3 000-S)/T来预估剩余寿命天数。
对于新盘,预估寿命应大于8年,否则应分析写入数据量是否偏大,需要优化应用程序并考虑加大SSD容量。考虑到换货周期,建议预估剩余寿命低于90天时告警。
本文介绍了固态硬盘SSD的原理和相关技术概念,重点讨论了SSD的性能和寿命相关的核心技术。通过分析一起典型的变电站自动化设备SSD寿命相关的故障案例,指出缓存机制有助于提升SSD寿命,不恰当的软件使用会加速SSD的老化。
最后,本文提出了自动化设备的SSD在线监测方案,从预留容量、读写速度、预估寿命三个方面进行状态监测,为应用SSD存储的自动化设备的稳定可靠运行提供技术保障。
本文的研究内容可为变电站自动化设备合理使用SSD提供有益的参考。