问题
文件存储系统(FSS)非常适合存储和组织事务数据或可管理的结构化数据。一个文件请求将被转换为多个请求流,包括dentry缓存请求、inode缓存请求、页面缓存请求和映射表缓存请求。FSS通常采用由多个缓存组成的统一缓存来加速不同类型的数据访问流.
现有缓存空间分配方案包括三种:
-
全局共享策略:简单,但可能会导致性能干扰。因为一些流可能会耗尽大部分缓存空间[10,14]。
-
静态分配策略:在流之间静态地划分缓存资源,以处理性能干扰问题。然而,未充分利用缓存资源,因为工作负载的访问模式在运行时不断变化。
-
动态分配策略:基于未命中率曲线(MRC)。然而,不能很好地用于FSS,因为现有的缓存建模方法依赖于LRU算法,并且它们的应用缓存结构是非层次的[2,3,20]。而非LRU算法和分层缓存在NAS系统等存储系统中很常见[19]。
未命中率曲线(MRC):MRC是评估缓存大小权衡的最有效工具。它将缓存未命中率绘制为特定驱逐策略下给定工作负载的缓存大小的函数。如图1,显示了在LRU驱逐策略下,来自Microsoft Research(MSR)[44]的web缓存工作负载的MRC。假设高速缓存配置有50GB的内存,MRC显示内存大小可以减少到38GB,且对未命中率的影响很小;也可以增加到63GB以使未命中率再降低10%。
现有的MRC建模方法可分为两类:
-
基于重用距离的缓存建模:最早由Mattson[8]等人于1970年提出,使用了一个基于列表的堆栈,但时间和空间的复杂性很高。一些研究优化重用距离的计算性能,例如使用各种数据结构,如树[1,11]、计数器堆栈[17]和OSCA[20]。然而,现有的方法基于LRU缓存,不适用于实际系统中广泛使用的其他复杂算法(如ARC[9]、2Q[6]等)。
-
仿真法。Mini-Sim[15]通过缩小实际缓存大小及其输入数据流来模拟任何大小和任何替换算法的缓存,但会产生不可忽视的开销。
总的来说,对于非LRU算法,现有的LRU定制重用距离方法构建的MRC缺乏精度,仿真方法将产生巨大的计算开销。
除了MRC构造之外,缓存分配的另一个重要因素是如何对缓存结构进行建模。在现有的缓存分配场景中,如云块存储系统[20]、内存键值缓存[2]、末级缓存(LLC)[3]等,只考虑了同层缓存,不适合FSS中分层缓存。
本文方法
本文提出了基于学习MRC分析的FSS缓存分配(LPCA)方案,最大限度地提高读取命中率并减少总未命中次数。
-
利用数据流的特征,使用机器学习技术构建MRC。
-
对缓存层次结构进行建模,定义优化目标,并将其求解为使总未命中次数最小化。
-
为每个缓存分配适当的缓存空间。
总结
针对文件存储系统的缓存优化,现有方法不能适应非LRU算法,也不能适用于分层缓存,例如dentry缓存、inode缓存、页面缓存和映射表缓存。本文提出基于学习MRC分析的FSS缓存分配(LPCA),核心是分析访问的数据流特征,利用机器学习方法计算MRC,并进行缓存分配。