SC 2021 Paper 元数据论文阅读汇总
问题
CephFS采用动态子树分区方法,将分层命名空间划分并将子树分布到多个元数据服务器上。然而,这种方法存在严重的不平衡问题,由于其不准确的不平衡预测、对工作负载特性的忽视以及不必要/无效的迁移活动而导致性能不佳。
挑战
性能问题主要是由以下两个原因造成的:1)不准确的负载模型与忽视良性不平衡:负载监控模块未能准确模拟每个MDS的负载和集群负载,同时也不能容忍良性不平衡,其中负载不平衡水平保持在安全区间;2)无效的子树迁移候选选择:迁移决策模块不适当地选择了子树迁移候选项,没有考虑这些子树的访问模式和未来的负载变化。
现有方法局限性
Mantle [35]将负载统计收集和迁移决策步骤与CephFS的其他元数据管理分离,并提供可编程的API,允许用户指定确定何时以及迁移多少的函数。然而,这些API有限,不涵盖重要的子树选择功能。而且,得出准确的负载模型和合理的元数据迁移和负载平衡启发式仍然是一个挑战。
本文方法
我们提出了Lunule,基于CephFS动态子树分区的新型元数据负载平衡器。
-
为了在需要时进行重新平衡,Lunule由一个分析模型驱动,该模型准确捕捉整个MDS集群的工作负荷强度水平。与使用平均负载统计不同,该模型使用变异系数来计算MDS集群的实时不平衡因子,以最小化噪声对迁移决策的负面影响。我们引入了一个紧急参数,用于量化不平衡情况是否对未来减少不必要的迁移安全或有害。基于该模型,Lunule确定了出口MDS和进口MDS。出口MDS的需要将一些负载迁移到其他对等节点。进口MDS具有多余的容量来容纳负载,并根据MDS未来的负载变化,计算应该在两个MDS之间迁移多少数据。
-
Lunule选择在每个出口MDS上要移动的子树集,准确预测不同子树的未来访问频率(分配为它们的迁移索引),并选择具有较高值的迁移子树候选是至关重要的。我们提出了一个统一的公式来估计子树过去访问活动的时间和空间局部性对其未来负载的影响。对于时间局部性,我们考虑最近的时间间隔内元数据访问的重复性,而不是依赖于当前CephFS中使用的简单累积的流行度计数器。对于空间局部性,我们考虑目标子树的元数据访问的均匀分布,并考虑兄弟子树之间的访问相关性。
与基准相比,Lunule实现了更好的负载均衡,在五种真实工作负载及其混合情况下,分别将元数据吞吐量提高了高达315.8%,并将尾部作业完成时间缩短了高达64.6%。此外,Lunule能够处理元数据集群的扩展和客户端工作负载的增长,并在16个MDS的集群上呈线性扩展。
实验环境
测试平台:实验在一个本地集群上运行,该集群有16个裸金属服务器,通过56Gb/s IPoIB网络连接。每台服务器有2个Intel(R)Xeon(R)E5-2650 V4 CPU、64 GB内存和1.6TB NVMe SSD(Intel P4610),运行的是CentOS版本7.3.10.0862.14.4.el7.x86_64。
数据集:
实验对比:负载不平衡情况、元数据吞吐量、作业完成时间、如何适应工作负载和集群扩展的变 化
总结
对Ceph的元数据负载均衡机制进行优化,原始方法由于对未来负载预测的不准确和无效迁移导致性能低。作者通过变异系数计算不平衡因子模型,减小噪声影响,准确确定何时触发重新平衡;通过紧急参数,容忍良性的不平衡情况;感知工作负载时间局部性(最近时间间隔内元数据访问的重复性)和空间局部性(目标子树元数据访问的均匀分布,并考虑兄弟子树间的访问相关性),以选择子树迁移候选项。