机器学习算法在SSD系统中的应用(上)
01 背景介绍
据行业研究公司 Forward Insights预测[1], 2022年全球企业级固态硬盘市场规模为189亿美元,到2026年有望增长到265亿美元,增长迅速。与传统HDD相比,SSD具有低功耗、低噪音、高性能、高存储密度等优点,因此SSD近些年来在快速占据HDD的市场份额。
随着性能的逐代提升,SSD的设计实现面临越来越大的的挑战,原因是多方面的。例如NAND闪存介质的擦写次数有限、SSD的垃圾回收对设备性能有影响,甚至传统的存储系统架构对大容量高性能的存储设备不够友好等。SSD在存储系统中扮演着越来越重要的角色,同时如何保证SSD在大规模生产环境稳定可靠的运行也是一个重要的方面。SSD系统的性能优化和可靠性提升需要精确的预测算法,机器学习能够从大批复杂的数据中发现隐藏的主要特征,并用这些特征对目标问题做出预测。因此,在需要精准预测的问题上,机器学习算法有望为解决SSD性能瓶颈或提升SSD可靠性提供方案。本文将简介机器学习预测算法在以下四大方面的应用:
⊙ SSD垃圾回收
⊙ 故障预测
⊙ SSD缓存管理和数据预取
⊙ 性能预测和参数调节
02 应用方向
⊙ 垃圾回收
在SSD内部,NAND FLASH的物理特性要求在写入数据之前先擦除页面,而不能直接对未擦除的页面进行覆盖写。这种特点会导致SSD内部产生很多无效页面,需要进行垃圾回收。垃圾回收是将一个数据块中的所有有效页面进行搬移然后进行整块擦除的过程。由于有了很多额外转移数据的操作,垃圾回收会严重影响SSD的性能以及寿命[2]。为了解决垃圾回收带来的负面影响,一个潜在的办法就是将相同或者相近生命周期的数据放在SSD中的同一个块内,这样在垃圾回收的过程中就可以尽可能的减小数据的搬移。NVMe所提供的多流写技术[3]为聚类相同生命周期的数据到SSD块内提供了便捷。但是如何实现有效算法来识别生命周期相近的数据是一个非常困难的问题。机器学习[4]算法已经展现出发现并利用数据隐藏特征的能力,为解决这个问题带来了可能。一些研究已经对此进行了探索,下面是两种具有代表性的方法。
▼ PCStream
PCStream[5]是一种应用在内核中的完全自动的流管理技术,能够很好的适用于各种IO工作负载,例如append-only, write-once以及in-place update类型的工作负载。Program context(PC)[6]指的是在系统写调用前能够唯一的表示一个程序的执行路径,因此可以很好的代表主要的IO活动。PCStream其将具有相同数据生命周期的program context使用k-means机器学习算法[7]分为同组,组数由SSD所支持的流的数量确定。
PC属性包括PC签名、预期的数据生命周期和流ID。为了保证PC属性表随着工作负载的变化而更新,计算出的PC签名及其LBA信息将会被发送到生命周期管理器。每当生命周期管理器或PC到流映射器被调用时,PC属性表就会用这些模块的新输出进行更新。PC到流映射器将会使用k-Means聚类机器学习算法将具有相似生命周期的PC进行分组,然后将同一组中的PC分配给同一个流。
图1.PCStream的整体架构
最终的结果显示,PCStream实现了与经验丰富的程序员高度优化的手动分配方案有着相同的效率。PCStream减少了69%的垃圾回收开销,使IOPS比现有的自动分流技术提高了56%。图1展示PCStream的核心模块以及各个模块之间的交互。
▼ WARCIP
重写间隔即对同一LBA的两次连续写请求的时间间隔。如果SSD数据块中的页面具有相似的重写时间间隔,那么这些页面将在较小的时间窗口内都失效,垃圾回收的时候数据搬移的开销将最小。WARCIP[8]的主要思想是最小化SSD块中的页面的重写间隔方差。WARCIP会计算IO流中的每个写请求的重写间隔,然后将写请求归入到相应的SSD开放块中,该开放块的平均重写间隔应最接近于写请求的重写间隔。并且,WARCIP能够快速的根据当前IO模式改变其分组策略以适应不同的工作负载,适应性体现在它能够通过关闭和打开一些开放块以合并、分离和调整正在进行聚类簇。聚类过程同样应用了k-means算法,不同的是通过上述适应性方法k-means聚类可以动态的调节组数,而不是如PCStream一样直接设置为流的数量。因此,WARCIP通过快速准确地将有着相同重写间隔的页分组为同一个SSD的物理块内,极大地减小了垃圾分类的开销。
图2. WARCIP的系统架构
图2展示了WARCIP的系统架构。WARCIP由驱动器、调度器和奖励收集器组成。WARCIP驱动器执行k-means聚类算法,它会计算每个写请求的重写间隔,然后在NVMe写命令中通过对请求标记相应的开放块编号,将其分配给具有最接近的平均重写间隔的开放块。WARCIP调度器指导FTL根据所附的块号向相应的开放块派发写命令。WARCIP奖励收集器模块收集写放大信息(例如因为垃圾回收而被迁移到其他块的页面的LBA),然后等待WARCIP驱动器的轮询。最终的结果显示他们提出的模型可以极大的减小写放大,同时闪存擦除的次数平均减少了4.45倍,能够显著增加SSD的寿命。
⊙ 故障预测
SSD是一种没有机械部件的半导体设备,与HDD相比其更加可靠更少出现故障。然而虽然SSD有着更低的故障率,但是对于有着成千上万SSD的大规模数据中心来说,每天依然有非常多的SSD会出现故障。即使许多数据中心使用了RAID和复制技术,设备的故障也会引起瞬态恢复和修复开销,从而影响存储系统的成本和尾部延迟。因此,能够准确的提前预测SSD的故障可以帮助硬盘管理员提前预知可能的故障,使其提早采取相应的措施,避免降低数据中心提供的服务质量。然而由于特定SSD的故障原因是高度特定于设备本身以及其所使用的应用程序的,因此很难通过简单的通用数据分析技术去进行故障的预测,例如不同的SSD在出厂本身可能就包含了数量不同的坏块,再如垃圾回收和磨损均衡程序在不同的工作负载下执行的额外操作不同。因此,机器学习方法成为了故障预测任务的一个有希望的方案。
扇区故障是一种非常常见的硬盘故障,指的是硬盘上的部分扇区变得不可用。硬盘不能识别到扇区故障,因此直到被损坏的扇区被主机读取才能发现扇区的故障。因此预测扇区是一个比较困难的事情。传统上会通过操作系统周期性地主动地读取和验证数据来检测扇区故障(称为scrub)。但是过小的周期会影响硬盘性能,过大的周期又不能及时发现故障。F. Mahdisoltani等人在[9]中对SSD扇区故障的预测进行了研究,提出了利用机器学习来适应性的调节scrub的频率。其主要思想是利用机器学习模型预测扇区故障,当有较大概率发生故障时,scrub过程会被调用。他们提出的方案可以将不能识别扇区故障的概率降低了两倍,scrub的总运行时间也比以前少了2%。
J. Alter等人在[10]中希望通过对三种MLC SSD的日志中的各种错误类型进行分析,来确定这些错误类型与未来硬盘故障方面的联系。但是他们发现虽然他们能够获取到充足的数据量,但是由于数据太过复杂,很难依靠现有的统计分析方法实现高准确度预测。因此他们采用了多种机器学习模型来解决故障预测问题。通过把从日志中提取的特征数据输入机器学习模型,机器学习模型能够输出相应的提前N天的故障预测。这些机器学习模型相较于传统模型有着更高的准确率,而随机森林模型是所有这些模型中表现最好的。同时通过对机器学习模型的结果分析,他们也发现写入行为和发生率这两个特征并不像人们想象中那样是硬盘故障的主要参考依据,而硬盘的年龄可以作为一个主要参考依据。
以上内容是CQ9工程师关于机器学习算法在SSD系统中的应用的上半部分介绍,由于篇幅缘故,SSD缓存管理和数据预取与性能预测和参数调节将在下一期给大家带来分享。机器学习在SSD系统的应用属于新兴领域,是CQ9积极探索实践的前沿技术之一,该领域的潜在研究可能性非常广阔,欢迎感兴趣的读者留言交流。
参考文献:
[1] Forward Insights,SSD Insights Q4/22
[2] Hu, X.-Y. and E. Eleftheriou, R. Haas, I. Iliadis, R. Pletka. Write Amplification Analysis in Flash-Based Solid State Drives. IBM. 2009 [2010-06-02]. CiteSeerX: 10.1.1.154.8668
[3] J. Kang, J. Hyun, H. Maeng, and S. Cho, The Multistreamed Solid-State Drive, In Proceedings of the Workshop on Hot Topics in Storage and File Systems (HotStorage), 2014.
[4] Mitchell, Tom (1997). Machine Learning. New York: McGraw Hill. ISBN 0-07-042807-7. OCLC 36417892.
[5] T. Kim, D. Hong, S. Shane Hahn, M. Chun, S. Lee, J. Hwang, J. Lee, and J. Kim. 2019. Fully automatic stream management for multi-streamed SSDs using program contexts. In Proceedings of the 17th USENIX Conference on File and Storage Technologies (FAST'19). USENIX Association, USA, 295–308.
[6] T. Kim, S. Hahn, S. Lee, J. Hwang, J. Lee and J. Kim, PCStream: Automatic Stream Allocation Using Program Contexts, In Proceedings of the USENIX Workshop on Hot Topics in Storage and File Systems (HotStorage), 2018.
[7] Hartigan, J. A.; Wong, M. A. (1979). "Algorithm AS 136: A k-Means Clustering Algorithm". Journal of the Royal Statistical Society, Series C. 28 (1): 100–108. JSTOR 2346830.
[8] J. Yang, S. Pei, and Q. Yang. 2019. WARCIP: write amplification reduction by clustering I/O pages. In Proceedings of the 12th ACM International Conference on Systems and Storage (SYSTOR '19). Association for Computing Machinery, New York, NY, USA, 155–166. http://doi.org/10.1145/3319647.3325840
[9] F. Mahdisoltani, L. Stefanovici, B. Schroeder. 2017. Improving storage system reliability with proactive error prediction. In Proceedings of the 2017 USENIX Conference on Usenix Annual Technical Conference (USENIX ATC '17). USENIX Association, USA, 391–402.
[10] J. Alter, J. Xue, A. Dimnaku, E Smirni. 2019. SSD failures in the field: symptoms, causes, and prediction models. In Proceedings of the International Conference for High Performance Computing, Networking, Storage and Analysis (SC '19). Association for Computing Machinery, New York, NY, USA, Article 75, 1–14. http://doi.org/10.1145/3295500.3356172