Lunule: An Agile and Judicious Metadata Load Balancer for CephFS——论文阅读

SC 2021 Paper 分布式元数据论文阅读笔记

问题

CephFS采用动态子树分区方法,将分层命名空间划分并将子树分布到多个元数据服务器上。然而,这种方法存在严重的不平衡问题,由于其不准确的不平衡预测、对工作负载特性的忽视以及不必要/无效的迁移活动而导致性能不佳。

挑战

性能问题主要是由以下两个原因造成的:1)不准确的负载模型与忽视良性不平衡:负载监控模块未能准确模拟每个MDS的负载和集群负载,同时也不能容忍良性不平衡,其中负载不平衡水平保持在安全区间;2)无效的子树迁移候选选择:迁移决策模块不适当地选择了子树迁移候选项,没有考虑这些子树的访问模式和未来的负载变化。

现有方法局限性

Mantle [35]将负载统计收集和迁移决策步骤与CephFS的其他元数据管理分离,并提供可编程的API,允许用户指定确定何时以及迁移多少的函数。然而,这些API有限,不涵盖重要的子树选择功能。而且,得出准确的负载模型和合理的元数据迁移和负载平衡启发式仍然是一个挑战。

背景

负载均衡流程:

  • MDS节点参与收集元数据负载统计信息,以确定MDS集群是否经历了不平衡以及是否应该触发平衡。

  • 将集群划分为源MDS和目标MDS,并计算出从源MDS到目标MDS之一的本地负载量。

  • 每个源MDS选择一组子树或目录碎片,并将它们放入导出任务队列中,以完成计划的迁移负载,可能在需要时执行进一步的细粒度分区。

  • 通过标准的两阶段提交协议,执行分区从源MDS到目标MDS的迁移。

现有负载均衡算法仍存在负载不均衡问题,而且存在无效迁移:

本文方法

我们提出了Lunule,基于CephFS动态子树分区的新型元数据负载平衡器。

  • 为了在需要时进行重新平衡,Lunule由一个分析模型驱动,该模型准确捕捉整个MDS集群的工作负荷强度水平。与使用平均负载统计不同,该模型使用变异系数来计算MDS集群的实时不平衡因子,以最小化噪声对迁移决策的负面影响。我们引入了一个紧急参数,用于量化不平衡情况是否对未来减少不必要的迁移安全或有害。基于该模型,Lunule确定了源MDS和目标MDS,根据MDS未来的负载变化,计算应该在两个MDS之间迁移多少数据。

  • Lunule选择在每个源MDS上要移动的子树集,准确预测不同子树的未来访问频率(分配为它们的迁移索引),并选择具有较高值的迁移子树候选是至关重要的。我们提出了一个统一的公式来估计子树过去访问活动的时间和空间局部性对其未来负载的影响。对于时间局部性,我们考虑最近的时间间隔内元数据访问的重复性,而不是依赖于当前CephFS中使用的简单累积的流行度计数器。对于空间局部性,我们考虑目标子树的元数据访问的均匀分布,并考虑兄弟子树之间的访问相关性。

开源代码:GitHub - mdbal-lunule/lunule

与基准相比,Lunule实现了更好的负载均衡,在五种真实工作负载及其混合情况下,分别将元数据吞吐量提高了高达315.8%,并将尾部作业完成时间缩短了高达64.6%。此外,Lunule能够处理元数据集群的扩展和客户端工作负载的增长,并在16个MDS的集群上呈线性扩展。

设计细节

概述

如图5所示,Lunule在称为Epoch的固定时间间隔内做出迁移决策。在每个epoch中,每个Load Monitor都会将观测到的元数据吞吐量发送给Migration Initiator(1)。当元数据集群的不平衡程度(由IF值表示)超过预定义阈值时,迁移启动器触发负载重新平衡过程,并生成迁移计划,将源MDS和目标MDS分配给MDS,并将目标MDS的需求和源MDS的能力配对。然后,每个源MDS上的Workload-aware Migration Planner将被通知其分配的迁移任务(2)。迁移任务到达后,子树选择器会选择一个合适的子树分区列表(3),然后将其输入到现有的Migrator中,并从负载较重的MDS迁移到负载较轻的MDSs(4)。

IF模型驱动的再平衡

采用变异系数(CoV)[20,46]作为我们模型的基本构建块。给定一个元数据集群,该集群由n服务器,其负载CoV值可以如下计算(标准差/平均值),li表示MDSi的当前负载,使用IOPS作为负载指标。

直接使用CoV有两个问题:

  • CoV的结果范围是不固定的 $ \left ( 0 , \sqrt{n}\right)$ ,因此将CoV标准化到(0, 1)

  • 并非所有不平衡的情况都需要执行重新平衡过程,例如,尽管存在负载差异,但所有MDS都远低于其最大吞吐量。因此引入了一个紧迫性参数U,该值越高,就越迫切需要执行迁移。U计算如下:C表示单个MDS理论上可以实现的最大IOPS,S范围为(0, 1),这里设为0.2。

最终通过下式计算IF因子

随后在迁移启动器应用上述模型来计算MDS集群在每个epoch中的IF值,如果负载不平衡程度超过预定义的阈值,则计算迁移角色和迁移量,如算法1所示,从每个MDS收集的负载统计信息,并计算矩阵E,其中Eij对应于需要从MDSi迁移到MDSj的负载数量。

  • 考虑到迁移的开销,对MDS迁出/迁入设定了上限(𝑒𝑙𝑑 或𝑖𝑙𝑑),设置为在一个epoch内的最大容量(第8、12行)。该容量是一个常数值,可以计算为MDS理论上可以发送或接收的最大索引节点数。

  • 进一步考虑未来负载变化的影响。对收集的历史负载统计数据(𝑐𝑙𝑑)应用线性回归模型,预测下一个epoch可能的负载(𝑓𝑙𝑑)。如果未来的负载增加无法满足缺口,则分配目标MDS角色,并计算其预期迁移负载量(第10-12行)。

  • 考虑了源MDS和目标MDS的双向需求。对于源MDS和目标MDS对,检查源MDS是否有迁出需求,同时目标MDS是否需要迁入。如果是,使迁移量等于迁出和迁入的最小值,并减少迁移量。最后,该算法迭代运行,并在检查所有对时完成。

【几个需要预设的参数,S = 0.2、C、IF阈值 = 0.075、负载均衡阈值 L】

工作负载感知的子树选择

CephFS中的内置迁移策略依赖于运行时测量的文件元数据访问热度。但无法为各种场景提供良好的性能:(1)基于热度的解决方案忽略了空间局部性的影响;(2)尽管子树的热量可以累积和衰减,但无法对未来负载的方差进行建模。

提出方法:不维护子树的热计数器,而是为它们分配一个迁移索引(mIndex),该索引对应于目标子树随时间推移的预测未来负载。迁移指数越大,相应子树被迁移的概率就越高,从而消除无效但昂贵的迁移。

迁移指数需要联合考虑工作负载的时间局部性和空间局部性。引入𝛼和𝛽分别作为时间和空间局部性的影响因素,表明子树上最近的工作负载倾向于两种访问模式中的任何一种。为了估计这两个变量的值,在每个MDS上维护历史元数据访问跟踪,并将其分解为固定大小的短序列(也称为剪切窗口)。在子树基础上,定期计算𝛼为最近剪切窗口的重复访问率,该比率等于重复访问的索引节点数量除以总访问索引节点数量。定期计算𝛽为最近剪切窗口未访问率,该比率等于未访问的索引节点数量除以元数据访问总数。

预测未来访问次数lt和ls。通过最近 N 个剪切窗口中子树的元数据访问次数来计算 𝑙𝑡 的值。对于子树,如果其未访问的 inode 在当前剪切窗口中被访问,则将 𝑙𝑠 加1。还将以一定的概率选择其中一个兄弟子树,并将所选子树的 𝑙𝑠 值增加 1。

开销

开销较低。在每个epoch内,除了迁移启动器所在的主MDS之外,其他MDS的外部网络使用量增加了0.94 KB。在16-MDS集群中,主MDS在每个epoch仅产生14.1 KB的额外网络。此外,当将epoch时间设置为10秒时,每个MDS仅多消耗1.37%的内存空间来维护用于存储负载信息的数据结构。同时在启用Lunule时没有明显的CPU利用率差异。

实现细节

统计记录:用mIndex替代原本的计数器。每个inode都有一个长度为nlength的布尔队列,记录是否在最后n个epoch中访问。每当访问元数据时,其父目录都会检查队列并修改其𝑙𝑡或𝑙𝑠值。为了减少CPU开销,每个epoch仅更新一次,而不是在每次请求处理之后立即更新。

统计数据收集:为了减少大规模条件下的通信开销,采用中心化N-1负载监视器模块。在大多数情况下,将迁移启动器分配给级别最低的MDS,例如MDS-0。其它MDS首先将其状态发送给启动器,启动器在做出决定后与所有其他服务器进行通信。为此,在CephFS中引入了一种新的消息类型,即由MDS等级ID和元数据请求率组成的不平衡状态消息,以取代原始的心跳消息。

迁移触发和分配:启动器在收集集群统计数据后计算不平衡因子,并决定是否迁移。Lunule引入了另一种消息类型Migration Decision来调度决策。每个决策消息指定一个源MDS需要迁移到目标MDS的负载量。启动器将迁移负载消息发送给源MDS,在收到消息后继续下一步选择子树。

子树选择:使用简单的递归算法,通过以下三条搜索路径从根目录开始选择迁移子树:(1)确定是否有mIndex近似等于迁移的子树amount, 允许10%的差异;(2) 搜索mIndex大于迁移量的子树,并将其拆分为两个子树,其中一个子树的结果mIndex接近amount; (3) 选择一组小的子树,它们的mIndex值之和大致满足迁移需求。

实验环境

测试平台:实验在一个本地集群上运行,该集群有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。

数据集:

实验对比:负载不平衡情况、元数据吞吐量、作业完成时间

实验参数:数据集、混合负载、动态增加MDS和Workload

总结

对Ceph的元数据负载均衡机制进行优化,原始方法由于对未来负载预测的不准确和无效迁移导致性能低。作者通过变异系数计算不平衡因子模型,减小噪声影响,准确确定何时触发重新平衡;通过紧急参数,容忍良性的不平衡情况;感知工作负载时间局部性(最近时间间隔内元数据访问的重复性)和空间局部性(目标子树元数据访问的均匀分布,并考虑兄弟子树间的访问相关性),以选择子树迁移候选项。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/484210.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解码新时代内存架构:探秘数据在内存中的灵动驻足

欢迎来到白刘的领域 Miracle_86.-CSDN博客 系列专栏 C语言知识 先赞后看,已成习惯 创作不易,多多支持! 随着信息技术的飞速发展,我们身处一个数据爆炸的时代。数据的处理和存储方式正日益成为技术革新的重要领域。在新时代的…

【Java】高级篇2:多线程

一、相关概念 注意: 1、不同进程之间不共享内存 2、进程之间的数据交换和通信成本很高 线程调度: 单核CPU与多核CPU: 并行与并发: 二、创建和启动线程 1、概述 2、方式 2.1 方式一:继承Thread类 2.2 方式二&#xf…

Fantasy RPG Spell Pack 2

介绍奇幻角色扮演游戏魔法包VFX,这是为您的Unity奇幻角色扮演游戏提供的终极视觉效果解决方案!这个包包含30个独特的VFX,将为您的法术和能力带来生命,让您的玩家沉浸在魔法和奇迹的世界中。 从令人惊叹的彩虹盾和闪电到旋转门户和召唤圈,这个包有你需要的一切来创造一个真…

GETSHELL方法总结上

渗透的总步骤 1.信息收集找到弱漏洞 2.漏洞挖掘 漏洞验证 3.有一定权限 getshell 4.提权后---渗透 5.内网渗透】 前后台拿shell方法汇总 接下来我们实操一波dedecms也就是织梦cms 如果你们的靶场是空白的 可能是php版本 我们修改为5.2 可能是源码问题 我们不要急着上传…

ChatGPT论文指南|揭秘8大ChatGPT提示词研究技巧提升写作效率【建议收藏】

点击下方▼▼▼▼链接直达AIPaperPass ! AIPaperPass - AI论文写作指导平台 公众号原文▼▼▼▼: ChatGPT论文指南|揭秘8大ChatGPT提示词研究技巧提升写作效率【建议收藏】 目录 1.写作方法 2.方法设计 3.研究结果 4.讨论写作 5.总结结论 6.书…

MySQL--select count(*)、count(1)、count(列名) 的区别你知道吗?

MySQL select count(*)、count(1)、count(列名) 的区别? 这里我们先给出正确结论: count(*),包含了所有的列,会计算所有的行数,在统计结果时候,不会忽略列值为空的情况。count(1),忽略所有的列…

Axure RP 9 for mac中文版密钥激活版下载

Axure RP 9是一款专业的快速原型设计工具,它可以帮助产品设计师、交互设计师和用户体验设计师等创建高保真度、交互性强的原型,以便在产品开发之前进行测试和用户验证。 软件下载:Axure RP 9 for mac中文版密钥激活版下载 该工具具有丰富的功…

2023蓝桥杯C/C++A组省赛 B题: 有奖问答|DFS搜索 、线性dp

题目链接: 1.有奖问答 - 蓝桥云课 (lanqiao.cn) 说明: DFS做法: 因为是填空题,不用考虑超时,首先先考虑暴力做法DFS来做,根据题意,30道题,有一个答题的先后顺序,上一…

【算法篇】逐步理解动态规划1(斐波那契数列模型)

目录 斐波那契数列模型 1. 第N个泰波那契数 2.使用最小花费爬楼梯 3.解码方法 学过算法的应该知道,动态规划一直都是一个非常难的模块,无论是状态转移方程的定义还是dp表的填表,都非常难找到思路。在这个算法的支线专题中我会结合很多力…

Java学习笔记 | Java基础语法 | 03 | 流程控制语句

文章目录 0 前言1.流程控制语句1.1 流程控制语句分类1.2 顺序结构 2.判断语句2.1 if语句1. if语句格式1练习1:老丈人选女婿练习2:考试奖励 2. if语句格式2练习1:吃饭练习2:影院选座 3. if语句格式3练习1:考试奖励 2.2 …

Vue使用font-face自定义字体详解

目录 1 介绍2 使用2.1 语法2.2 属性说明2.3 Vue使用案例2.3.1 全局定义字体2.3.2 在页面使用 3 注意事项 1 介绍 font-face 是 CSS 中的一个规则,它允许你加载服务器上的字体文件(远程或者本地),并在网页中使用这些字体。这样&am…

使用 STL 容器发生异常的常见原因分析与总结

目录 1、概述 2、使用STL列表中的元素越界 3、遍历STL列表删除元素时对迭代器自加处理有问题引发越界 4、更隐蔽的遍历STL列表删除元素时引发越界的场景 5、多线程同时操作STL列表时没有加锁导致冲突 6、对包含STL列表对象的结构体进行memset操作导致STL列表对象内存出异…

大学教材《C语言程序设计》(浙大版)课后习题解析 | 第一、二章

概述 本文主要提供《C语言程序设计》(浙大版) 第一、二章课后习题解析,以方便同学们完成题目后作为参考对照。后续将写出三、四章节课后习题解析,如想了解更多,请持续关注该专栏。 专栏直达链接:《C语言程序设计》(浙大版)_孟俊宇…

Hive SQL必刷练习题:复购率问题(*****)

是说这个数据表中,找到最后一天 ,也就是今天的日期,max(date) over()S today 【借助开窗函数】 截至最后一天位置,也就是“今天“,表中的最新的一天 去看90天内“某商品复购率 近90天内购买它至少两次的人数 购买它…

c++常考基础知识(2)

二.c关键字 关键字汇总 c中共有63个关键字,其中包括int,char,double等类型关键字,if,else,while,do,等语法关键字,还有sizeof等函数关键字。 三.数据结构 1.数组&#x…

常见的OOM 问题的 6 种场景

今天跟大家一起聊聊线上服务出现 OOM 问题的 6 种场景,希望对你会有所帮助。 一、堆内存 OOM 堆内存 OOM 是最常见的 OOM 了。 出现堆内存 OOM 问题的异常信息如下: java.lang.OutOfMemoryError: Java heap space此 OOM 是由于 JVM 中 heap 的最大值,已经不能满足需求了…

Git的原理和使用(四)

目录 远程操作 理解分布式版本控制系统 远程仓库 新建远程仓库 克隆远程仓库 向远程仓库推送 拉取远程仓库 配置Git 忽略特殊文件 为命令配置别名 标签管理 理解标签 创建标签 操作标签 远程操作 理解分布式版本控制系统 1、每个人的电脑上都是一个完整的版本库…

批量重命名文件名,批量管理文件,复制后轻松删除原文件

在现代工作中,我们经常需要处理大量的文件,无论是工作文档、图片还是视频资料。对于很多人来说,文件管理是一项繁琐且耗时的任务。不过,现在有一种高效的文件管理方法,可以帮助你轻松复制文件后删除原文件夹&#xff0…

2024.03.24 exam

2024.03.24 exam 据说是事业单位考试例题,娱乐一下脑子

zabbix安装及使用(错误及解决方案)

安装zabbix 常见错误: Zabbix下载错误 6.0与5.0版本冲突 解决方法 yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-get --skip-broken zabbix6.0-web 自己有数据库,使用以下命令 pid找不到 /var/log/zabbix/zabbix_server.log 错误&a…