1 介绍
自2013以来,SSD 已经成为移动平台,笔记本,甚至企业服务器中的主要存储设备。
除了没有机械部件而表现出的低延迟以外,NAND闪存还在几个关键方面与动态随机存取存储器(DRAM)和硬盘驱动器(HDD)区别开来:
(i) 读写延迟的不对称性
(ii) 存在擦除操作(即无法覆盖)
(iii) 有限的擦除/写入周期。
基于NAND的SSD包含一个称为闪存转换层(FTL)的软件实体,用于隐藏底层NAND设备的缺点并将逻辑块阵列导出到文件系统。 FTL算法的精心设计,以最大程度地提高IO性能(延迟和带宽)并延长NAND单元的使用寿命。
SSD硬件(例如,内部并行性和缓冲区大小)和软件(例如,地址映射[6]-[10],损耗均衡[11]-[13]和垃圾回收算法[13],[14]的高效设计 ])要求对底层I/O工作负载有扎实的了解。 但是,HDD和虚拟内存的现有表征工作无法满足基于NAND的存储设备的表征要求。 在过去的几十年中,IO特性已经在操作系统和存储系统社区中进行了深入研究,在基于HDD的存储方面已经达到足够的成熟度有关系统[15]-[19]。
工程师精心选择了表征的属性,适当地结合了硬盘的物理特征。 对于HDD,工作负载的空间特性是首要考虑的问题,因为磁头移动开销是IO延迟和性能的主要部分。 因此,用于HDD的IO表征研究集中于确定块访问序列的空间特征(例如,随机性)。 对于内存子系统(例如缓冲区缓存和虚拟内存),它是关键在于表征存储器访问的时间方面(例如工作集),因为这决定了缓存未命中的行为。
基于NAND的SSD进一步使我们考虑了三维空间中IO特性的概念:空间特性(即访问位置:随机与顺序),时间特性(即给定数据的访问频率:热与冷)以及大小特征(即访问大小:单个块与多个块)。 根据传入工作负载的特征,SSD 控制器可以调整用于关键内务处理任务的参数,例如日志块管理[20],映射粒度决策[21]和垃圾回收的收集者选择[13],[14]。
一些方法提出了在分析IO工作负载时检查IO内容(例如,用于在SSD 控制器中执行重复数据删除[22]-[24]和用于设计缓存[25]-[27])。 尽管局部性值可广泛用于确定缓存和重复数据删除方案,但“值”本身高度依赖于上下文。
本文 工作:
将重点放在分类工作负载的通用框架上,仅包括IO的空间,时间和大小方面,而无需实际检查IO的内容就可以对其进行分析。 在内容检查可行的情况下,在工作负载表征和分类中考虑内容局部性可能会产生更好的结果。
具有与基于硬盘的存储设备不同的物理特性的基于NAND的存储设备的进步,要求一种全新的表征IO工作负载的方式。在本文中,我们将从新兴的基于NAND的存储设备的角度重新审视了解和确定现代IO工作负载的基本组成的问题。我们尤其致力于解决以下特定问题:
(i) 为了表征IO工作负载,正确的群集算法是什么?
(ii) 有效表征IO工作负载的最少特征集是什么?
(iii)我们应该如何验证既定课程的有效性?
这些问题是紧密相关的,应该整体解决。为此,我们采用了一种数据挖掘方法。我们对结果的全面性进行了相当广泛的研究:我们检查了11种集群算法和20种具有数万个IO跟踪的工作负载功能。我们以简化的方式应用无监督和有监督的学习方法。特别是,我们首先应用无监督学习,以使现有的领域知识不会对建立一组流量类别产生任何偏见。
对于固态硬盘,我们可以将所提出的方法应用于混合映射中的智能日志块管理,垃圾回收中的收集目标者选择以及多粒度映射中的映射粒度决策,尽管本文并未介绍此类应用的详细信息。 我们进一步相信,所提出的方法可以应用于IO优化的其他类型的存储设备。
2 研究背景
2.1 相关工作
数据挖掘已用于分析和评估计算机系统的各个方面。 Lakhina 等使用基于熵的无监督学习来检测网络流量中的异常[28]。 Won等应用AdaBoost技术[29]对软实时IO流量进行分类[30]。 Park等运用Plackett-Burgman设计来提取文件系统基准测试中的主要特征[31]。
关于IO工作负载的表征,已经进行了有关表征文件系统访问模式和活动轨迹的经验研究[32],[33]-[35]。 针对Web服务器[36],[37],决策支持系统[38]和个人计算机[39],存在特定于应用程序的工作负载表征工作。
这些方法对有限的属性集(例如,读/写比,IO大小分布,IO的随机性)进行简单的统计,因此常常无法正确地表征不同属性之间的相关性。
工作负载分析和分类可用于IO堆栈的不同层:
在块设备驱动中使用数据挖掘算法进行磁盘调度,数据布局和预取
将分析功能嵌入文件系统层内部,该功能允许通过检查工作负载访问模式来推断文件系统元数据区域的位置
将分析功能嵌入存储设备的固件中,并旨在利用工作负载特性来控制存储设备的内部行为(例如,块分配,重试次数和纠错编码)。
已经提出了复杂的工作量生成器和测量工具来设计模式丰富的微基准。 这些工具对于以相当全面的方式产生任意工作负载模式很有用。 但是,如果不了解实际工作负载中的基本模式,就很难生成合适的IO工作负载以进行准确的性能评估。
IO工作负载表征的所有先前方法中,最重要的限制可能是这些方法仅将HDD视为存储设备。 旋转媒体的工作负载表征相对简单,因为有关设备性能的主要因素是搜寻开销。 因此,根据顺序性和随机性来表征工作负载已经提供了足够的要素,即使不是很完整,也可以评估文件和存储堆栈的性能。
既然基于NAND 的SSD逐渐成为替换HDD的有力候选者,则有必要根据更丰富的属性来表征工作负载,以准确地测量文件和存储堆栈的性能。 最近,提出了一种称为uFlip [47],[48]的工作负载生成器,它可以生成更多种类的工作负载,这些工作负载专门用于检查基于NAND的SSD的性能。 但是,uFlip中使用的基本IO模式并非来自实际工作负载。 因此,尚不知道这些模式对于SSD来说是否健全且完整。
这项工作的目的是从NAND 存储的角度找到IO工作负载的典型模式。 在设计基于NAND的存储设备的各种组件时(例如,地址映射,损耗均衡,垃圾回收,写缓冲区管理和其他关键要素),将利用这些模式。
2.2 FTL
与DRAM和HDD相比,NAND 闪存具有独特的特性。 特别是,闪存转换层(FTL)[6]-[10]在基于NAND的SSD的操作中起着关键作用。 FTL的主要目标是让现有软件将SSD识别为传统的,类似于HDD的块设备。 FTL执行三个主要任务:
FTL 维护从逻辑地址到物理地址的转换表(即地址映射)
FTL 将有效页面合并为一个块,从而使无效页面可以重置和重用页面(即垃圾回收)
FTL 通过适当选择物理块来平衡块的磨损(即磨损均衡)。
为了最大程度地提高IO性能(延迟和带宽)并延 长NAND 寿命,FTL设计人员应精心设计算法,以选择用于写入的目标块,确定用于页面合并的剔除块以及确定何时执行此类合并。
FTL 的成功在于正确识别传入流量并有效优化其行为。结果,在FTL 算法的上下文中,已经有各种方法来利用IO工作负载的空间,时间和大小方面。
通过为顺序工作负载和随机工作负载分配单独的日志块并进行不同的管理,我们可以显着减少混合映射中合并日志块的开销[6]。
根据[7],可以根据数据的热度维护单独的日志块区域,从而显着提高日志块利用率和整体系统性能。
可以通过采用不同的映射粒度来减小映射表的大小,从而利用传入工作负载的IO大小分布[49]。
尽管这些方法是开创性的,但它们在对工作负载进行分类时表现出不令人满意的性能,通常会导致频繁的错误分类。我们可以得出结论,显然需要更精细的IO特性描述框架来进一步推进SSD 技术。
2.3 工作负载分析在SSD 中的应用
我们可以通过多种方式利用IO工作负载分析结果来优化基于NAND 的SSD 的性能。 我们在这里提出一些想法:提高写入性能,减少FTL映射信息以及改善垃圾回收。 这些想法的实际实施将是我们未来工作的一部分。
如第4.2节所述,我们以写缓冲区的大小为单位查看和收集IO trace,因为该大小对应于FTL 可以直接管理以有效执行闪存写操作的最大大小。 如果发现某些写模式适合快速写操作(例如,完全顺序模式),则FTL可以重新排序并合并临时存储在写缓冲区中的IO数据页,将其转换为可以改善写操作的模式之一 性能。
此外,我们可以通过工作负载模式分析显著减少FTL映射信息的数量(映射表的大小)。 鉴于SSD 的容量在不断增长,因此对于TB级SSD使用传统的页面映射方案将需要千兆级映射信息。 我们可以使用粗粒度映射,例如块映射,但这会大大降低随机写入性能。 对于很少发生随机写入的数据(例如,多媒体数据),我们最好使用粗粒度映射;对于频繁发生随机写入的数据(例如,文件系统元数据),我们最好依靠细粒度映射,例如 作为页面映射。 如果FTL可以自动区分和分类不同的数据类型,则它可以为每种数据类型确定最佳的映射粒度,并最大程度地减少映射信息的数量,同时最大程度地降低IO性能的下降。
除此,我们可以通过将IO工作负载分析发现的模式应用于数据分发来提高垃圾收集的性能。 在最新的SSD中,NAND 闪存芯片通常配置为多个通道,每个通道都由多种方式组成。 为了利用这种多通道/多路架构,SSD 控制器通过多个通道和方式分配写请求。这样会将数据分散在不同的芯片上。 如果以后修改这些数据,则无效数据最终将存在于多个芯片中,这将严重降低垃圾回收性能。 为了缓解这个问题,我们需要将局部性数据保存在同一芯片中,以利用方式交错。
一种解决方案是利用我们的方法发现的顺序随机(SR)模式(请参见表3和图6)。 我们将顺序IO写入单个芯片,从而保持局部性,将随机IO并行写入其余芯片,从而实现方式交错的效果。 更进一步,我们可以将顺序IO分为NAND 块大小的块,然后将它们并行写入不同的芯片。 这将使我们能够在保持局部性的同时达到交织效果(回想一下,擦除单位是一个NAND块)。 这种类型的数据分发可以通过保持局部性的作用,使有效和无效页面存在于不同的块中,并最终对垃圾回收产生积极的影响。
3 总览
图1显示了我们方法的总体流程。
我们的目标是 :查找一组可以表征IO工作负载的代表性模式,并提出一个模型,该模型以后可用于对IO trace进行分类,以进行类优化处理。
在本文中,我们首先专注于定义IO跟踪的这种模式,并基于这些模式构建模型(在图1中标有DESIGN TIME的点划线框内显示)。 然后,我们展示如何基于此模型构造一个简单但准确的分类器。 我们可以将此分类器包括在存储设备的固件中,并在运行时使用它(在标有“运行时间”的框中显示)。
我们首先收集许多IO trace样本,然后将它们数学上表示为各种特征的向量。 然后,在我们方法的第一阶段,我们通过聚类分析矢量化的IO轨迹。 我们的希望是,通过应用无监督学习方法,除了重新发现已知的IO trace之外,我们还可以找到新颖的IO trace模式。 我们将从第一阶段得到的群集称为初始IO trace模式。
基于上一步的聚类结果,我们构建了一个可以表示IO trace特征的基于树的模型。 尽管集群可以使我们了解当今的IO工作负载中会出现哪些类型的模式,但我们发现某些初步模式是多余的或几乎没有实用价值。 我们简化了初步的集群,并定义了一组新的IO类。 然后,由于IO模式类别的分层性质,我们用树结构表示它们。
我们可以应用提出的模型和模式类别来有效地分类传入的工作负载。 我们可以针对每一类IO工作负载优化各种SSD控制器算法,以便控制器根据传入IO的特性(例如,随机与顺序,热与冷,IO访问之间的相关程度,垃圾回收算法[13],[14],日志块合并算法[6]-[9]和损耗均衡[11]- [13]) 进行动态分类。
1 介绍
自2013以来,SSD 已经成为移动平台,笔记本,甚至企业服务器中的主要存储设备。
除了没有机械部件而表现出的低延迟以外,NAND闪存还在几个关键方面与动态随机存取存储器(DRAM)和硬盘驱动器(HDD)区别开来:
(i) 读写延迟的不对称性
(ii) 存在擦除操作(即无法覆盖)
(iii) 有限的擦除/写入周期。
基于NAND的SSD包含一个称为闪存转换层(FTL)的软件实体,用于隐藏底层NAND设备的缺点并将逻辑块阵列导出到文件系统。 FTL算法的精心设计,以最大程度地提高IO性能(延迟和带宽)并延长NAND单元的使用寿命。
SSD硬件(例如,内部并行性和缓冲区大小)和软件(例如,地址映射[6]-[10],损耗均衡[11]-[13]和垃圾回收算法[13],[14]的高效设计 ])要求对底层I/O工作负载有扎实的了解。 但是,HDD和虚拟内存的现有表征工作无法满足基于NAND的存储设备的表征要求。 在过去的几十年中,IO特性已经在操作系统和存储系统社区中进行了深入研究,在基于HDD的存储方面已经达到足够的成熟度有关系统[15]-[19]。
工程师精心选择了表征的属性,适当地结合了硬盘的物理特征。 对于HDD,工作负载的空间特性是首要考虑的问题,因为磁头移动开销是IO延迟和性能的主要部分。 因此,用于HDD的IO表征研究集中于确定块访问序列的空间特征(例如,随机性)。 对于内存子系统(例如缓冲区缓存和虚拟内存),它是关键在于表征存储器访问的时间方面(例如工作集),因为这决定了缓存未命中的行为。
基于NAND的SSD进一步使我们考虑了三维空间中IO特性的概念:空间特性(即访问位置:随机与顺序),时间特性(即给定数据的访问频率:热与冷)以及大小特征(即访问大小:单个块与多个块)。 根据传入工作负载的特征,SSD 控制器可以调整用于关键内务处理任务的参数,例如日志块管理[20],映射粒度决策[21]和垃圾回收的收集者选择[13],[14]。
一些方法提出了在分析IO工作负载时检查IO内容(例如,用于在SSD 控制器中执行重复数据删除[22]-[24]和用于设计缓存[25]-[27])。 尽管局部性值可广泛用于确定缓存和重复数据删除方案,但“值”本身高度依赖于上下文。
本文 工作:
将重点放在分类工作负载的通用框架上,仅包括IO的空间,时间和大小方面,而无需实际检查IO的内容就可以对其进行分析。 在内容检查可行的情况下,在工作负载表征和分类中考虑内容局部性可能会产生更好的结果。
具有与基于硬盘的存储设备不同的物理特性的基于NAND的存储设备的进步,要求一种全新的表征IO工作负载的方式。在本文中,我们将从新兴的基于NAND的存储设备的角度重新审视了解和确定现代IO工作负载的基本组成的问题。我们尤其致力于解决以下特定问题:
(i) 为了表征IO工作负载,正确的群集算法是什么?
(ii) 有效表征IO工作负载的最少特征集是什么?
(iii)我们应该如何验证既定课程的有效性?
这些问题是紧密相关的,应该整体解决。为此,我们采用了一种数据挖掘方法。我们对结果的全面性进行了相当广泛的研究:我们检查了11种集群算法和20种具有数万个IO跟踪的工作负载功能。我们以简化的方式应用无监督和有监督的学习方法。特别是,我们首先应用无监督学习,以使现有的领域知识不会对建立一组流量类别产生任何偏见。
对于固态硬盘,我们可以将所提出的方法应用于混合映射中的智能日志块管理,垃圾回收中的收集目标者选择以及多粒度映射中的映射粒度决策,尽管本文并未介绍此类应用的详细信息。 我们进一步相信,所提出的方法可以应用于IO优化的其他类型的存储设备。
2 研究背景
2.1 相关工作
数据挖掘已用于分析和评估计算机系统的各个方面。 Lakhina 等使用基于熵的无监督学习来检测网络流量中的异常[28]。 Won等应用AdaBoost技术[29]对软实时IO流量进行分类[30]。 Park等运用Plackett-Burgman设计来提取文件系统基准测试中的主要特征[31]。
关于IO工作负载的表征,已经进行了有关表征文件系统访问模式和活动轨迹的经验研究[32],[33]-[35]。 针对Web服务器[36],[37],决策支持系统[38]和个人计算机[39],存在特定于应用程序的工作负载表征工作。
这些方法对有限的属性集(例如,读/写比,IO大小分布,IO的随机性)进行简单的统计,因此常常无法正确地表征不同属性之间的相关性。
工作负载分析和分类可用于IO堆栈的不同层:
在块设备驱动中使用数据挖掘算法进行磁盘调度,数据布局和预取
将分析功能嵌入文件系统层内部,该功能允许通过检查工作负载访问模式来推断文件系统元数据区域的位置
将分析功能嵌入存储设备的固件中,并旨在利用工作负载特性来控制存储设备的内部行为(例如,块分配,重试次数和纠错编码)。
已经提出了复杂的工作量生成器和测量工具来设计模式丰富的微基准。 这些工具对于以相当全面的方式产生任意工作负载模式很有用。 但是,如果不了解实际工作负载中的基本模式,就很难生成合适的IO工作负载以进行准确的性能评估。
IO工作负载表征的所有先前方法中,最重要的限制可能是这些方法仅将HDD视为存储设备。 旋转媒体的工作负载表征相对简单,因为有关设备性能的主要因素是搜寻开销。 因此,根据顺序性和随机性来表征工作负载已经提供了足够的要素,即使不是很完整,也可以评估文件和存储堆栈的性能。
既然基于NAND 的SSD逐渐成为替换HDD的有力候选者,则有必要根据更丰富的属性来表征工作负载,以准确地测量文件和存储堆栈的性能。 最近,提出了一种称为uFlip [47],[48]的工作负载生成器,它可以生成更多种类的工作负载,这些工作负载专门用于检查基于NAND的SSD的性能。 但是,uFlip中使用的基本IO模式并非来自实际工作负载。 因此,尚不知道这些模式对于SSD来说是否健全且完整。
这项工作的目的是从NAND 存储的角度找到IO工作负载的典型模式。 在设计基于NAND的存储设备的各种组件时(例如,地址映射,损耗均衡,垃圾回收,写缓冲区管理和其他关键要素),将利用这些模式。
2.2 FTL
与DRAM和HDD相比,NAND 闪存具有独特的特性。 特别是,闪存转换层(FTL)[6]-[10]在基于NAND的SSD的操作中起着关键作用。 FTL的主要目标是让现有软件将SSD识别为传统的,类似于HDD的块设备。 FTL执行三个主要任务:
FTL 维护从逻辑地址到物理地址的转换表(即地址映射)
FTL 将有效页面合并为一个块,从而使无效页面可以重置和重用页面(即垃圾回收)
FTL 通过适当选择物理块来平衡块的磨损(即磨损均衡)。
为了最大程度地提高IO性能(延迟和带宽)并延 长NAND 寿命,FTL设计人员应精心设计算法,以选择用于写入的目标块,确定用于页面合并的剔除块以及确定何时执行此类合并。
FTL 的成功在于正确识别传入流量并有效优化其行为。结果,在FTL 算法的上下文中,已经有各种方法来利用IO工作负载的空间,时间和大小方面。
通过为顺序工作负载和随机工作负载分配单独的日志块并进行不同的管理,我们可以显着减少混合映射中合并日志块的开销[6]。
根据[7],可以根据数据的热度维护单独的日志块区域,从而显着提高日志块利用率和整体系统性能。
可以通过采用不同的映射粒度来减小映射表的大小,从而利用传入工作负载的IO大小分布[49]。
尽管这些方法是开创性的,但它们在对工作负载进行分类时表现出不令人满意的性能,通常会导致频繁的错误分类。我们可以得出结论,显然需要更精细的IO特性描述框架来进一步推进SSD 技术。
2.3 工作负载分析在SSD 中的应用
我们可以通过多种方式利用IO工作负载分析结果来优化基于NAND 的SSD 的性能。 我们在这里提出一些想法:提高写入性能,减少FTL映射信息以及改善垃圾回收。 这些想法的实际实施将是我们未来工作的一部分。
如第4.2节所述,我们以写缓冲区的大小为单位查看和收集IO trace,因为该大小对应于FTL 可以直接管理以有效执行闪存写操作的最大大小。 如果发现某些写模式适合快速写操作(例如,完全顺序模式),则FTL可以重新排序并合并临时存储在写缓冲区中的IO数据页,将其转换为可以改善写操作的模式之一 性能。
此外,我们可以通过工作负载模式分析显著减少FTL映射信息的数量(映射表的大小)。 鉴于SSD 的容量在不断增长,因此对于TB级SSD使用传统的页面映射方案将需要千兆级映射信息。 我们可以使用粗粒度映射,例如块映射,但这会大大降低随机写入性能。 对于很少发生随机写入的数据(例如,多媒体数据),我们最好使用粗粒度映射;对于频繁发生随机写入的数据(例如,文件系统元数据),我们最好依靠细粒度映射,例如 作为页面映射。 如果FTL可以自动区分和分类不同的数据类型,则它可以为每种数据类型确定最佳的映射粒度,并最大程度地减少映射信息的数量,同时最大程度地降低IO性能的下降。
除此,我们可以通过将IO工作负载分析发现的模式应用于数据分发来提高垃圾收集的性能。 在最新的SSD中,NAND 闪存芯片通常配置为多个通道,每个通道都由多种方式组成。 为了利用这种多通道/多路架构,SSD 控制器通过多个通道和方式分配写请求。这样会将数据分散在不同的芯片上。 如果以后修改这些数据,则无效数据最终将存在于多个芯片中,这将严重降低垃圾回收性能。 为了缓解这个问题,我们需要将局部性数据保存在同一芯片中,以利用方式交错。
一种解决方案是利用我们的方法发现的顺序随机(SR)模式(请参见表3和图6)。 我们将顺序IO写入单个芯片,从而保持局部性,将随机IO并行写入其余芯片,从而实现方式交错的效果。 更进一步,我们可以将顺序IO分为NAND 块大小的块,然后将它们并行写入不同的芯片。 这将使我们能够在保持局部性的同时达到交织效果(回想一下,擦除单位是一个NAND块)。 这种类型的数据分发可以通过保持局部性的作用,使有效和无效页面存在于不同的块中,并最终对垃圾回收产生积极的影响。
3 总览
图1显示了我们方法的总体流程。
我们的目标是 :查找一组可以表征IO工作负载的代表性模式,并提出一个模型,该模型以后可用于对IO trace进行分类,以进行类优化处理。
在本文中,我们首先专注于定义IO跟踪的这种模式,并基于这些模式构建模型(在图1中标有DESIGN TIME的点划线框内显示)。 然后,我们展示如何基于此模型构造一个简单但准确的分类器。 我们可以将此分类器包括在存储设备的固件中,并在运行时使用它(在标有“运行时间”的框中显示)。
我们首先收集许多IO trace样本,然后将它们数学上表示为各种特征的向量。 然后,在我们方法的第一阶段,我们通过聚类分析矢量化的IO轨迹。 我们的希望是,通过应用无监督学习方法,除了重新发现已知的IO trace之外,我们还可以找到新颖的IO trace模式。 我们将从第一阶段得到的群集称为初始IO trace模式。
基于上一步的聚类结果,我们构建了一个可以表示IO trace特征的基于树的模型。 尽管集群可以使我们了解当今的IO工作负载中会出现哪些类型的模式,但我们发现某些初步模式是多余的或几乎没有实用价值。 我们简化了初步的集群,并定义了一组新的IO类。 然后,由于IO模式类别的分层性质,我们用树结构表示它们。
我们可以应用提出的模型和模式类别来有效地分类传入的工作负载。 我们可以针对每一类IO工作负载优化各种SSD控制器算法,以便控制器根据传入IO的特性(例如,随机与顺序,热与冷,IO访问之间的相关程度,垃圾回收算法[13],[14],日志块合并算法[6]-[9]和损耗均衡[11]- [13]) 进行动态分类。
举报