对于闪存系统,很多人和我一样,最初的认知是来自笔记本电脑的SSD盘,也许你也没有觉得SSD快了多少,但如果使用SSD后再来使用传统磁盘,你就会发现磁盘速度难以忍受。
为了追求更高的速度,我们开始使用SSD盘,如果仅仅如此,那么我们对于闪存的认知将是不及格的,这就像使用SSD盘仍然坚持碎片整理,实际上人的认知,并没有跟上闪存技术的步伐。企业级应用更是如此,企业级闪存应用需要关注的内容更多。
企业级可靠性和稳定性
企业级应用对于可靠性和稳定性有很高的需求,如果不能够达到这个要求,就没有办法在市场普及开来。 影响闪存系统可靠性和稳定性的因素,一是来闪存颗粒访问的调度和管理,另外一个文件系统的优化;二者都将会影响到闪存系统的可靠性和稳定性。如果漠视这些重要的内容,将闪存应用理解为:“使用SSD盘”,这是非常肤浅的,也会给系统的稳定安全预埋下隐患和危机,这并不是危言耸听。
闪存的隐患和缺陷
闪存优势在于高I/O速度和低功耗,但也存在着耐久性、数据保持性、读写干扰、制造工艺等缺陷。其中,闪存耐读,但不耐擦写,其擦写次数有一定的限制,此外,电子泄漏、电子辐射都可能导致干扰,造成数据错误或丢失;闪存读写,也有可能对于临近存储单元构成干扰,所有这些都要通过技术手段,如Error-correcting code (ECC校验)、RAID保护机制、Wear leveling(磨损平衡)、Bad block mapping(坏块管理)、Read/write disturb management(读写干扰管理)、Garbage collection(垃圾收集)等加以克服,所采用的技术手段不同,其效果也会有很大的差异。
以ECC为例,当读取时候,系统从颗粒里面读出数据和ECC校验码,如果验证一致就送出数据,如果不一致,则需要通过ECC校验获得正确数据。不同的闪存控制系统设计,使用初期差别并不大。但是随着使用时间和数据量的增长,坏块会逐渐增加,这时就会产生大量的ECC Error,如果ECC引擎存在瓶颈,就会导致设备性能和可靠性会大幅度下降(参见:请问你用了多少ECC引擎),因此不同的设计方案对于系统性能和数据安全影响很大。
磨损平衡也是如此,由于存在擦写次数的限制,尽可能通过算法让每个撒谎内存块擦写次数相同,以增加闪存设备的寿命。如此一来,数据存储的逻辑块地址LBA,在不同的时间会指向不同的物理地址PBA。这是闪存不同于磁盘的地方。磨损平衡算法有动态、静态磨损平衡以及全局磨损平衡的区分。方法不同效果会有很大的差异。
文件系统优化同样重要
除了闪存控制器等硬件层面设计之外,文件系统对于闪存系统性能和可靠性的影响也非常大。
文件系统是一个比较复杂的系统,从文件系统到底层设备,其路径很长,这会影响到闪存性能和延时优势的发挥。为此, 2012年英特尔提出NVMe标准,目的就在于缩短闪存设备的访问路径,提升访问堆栈性能,发挥闪存高IO性能和低延时优势。
换句话说,文件系统存在根据闪存特性进行优化的空间。很多时候,传统的文件管理和调度系统,以及存储阵列管理软件都是针对磁盘的特点而设计的,很多并不适用于闪存。因此,为了充分发挥闪存的特点,需要对于软件进行优化,后者重写,或者关闭掉一些不利于闪存管理的特性。
如今,Linux最新的Btrfs文件系统已经基于闪存特性做了访问优化,而ZFS文件系统在设计之初,就考虑了通过闪存进行性能加速的方法。当前比较热门的Ceph文件系统,更像是在底层文件系统之上的文件服务,如今也大量采用闪存进行性能加速。
不同文件系统配套,对于闪存系统的稳定性、可靠性和安全性的影响丝毫不亚于硬件。因此,需要用户在应用中重点加以关注。
小结
闪存作为存储介质的革命,其影响将是非常深远的,对于用户的使用习惯也提出了非常高的要求。对此,需要用户深入了解、区分不同技术和方法,如此才能够兴利除弊,大程度发挥闪存科技的最新成果。如果过于简单化,就会给未来埋下隐患,而这是应该极力加以避免的。