Unity 存储上的 FAST VP:工作原理

今天我们将讨论在 Unity/Unity XT 存储系统中实现的一项有趣的技术 - FAST VP。 如果这是您第一次听说 Unity,那么您可以使用本文末尾的链接查看系统特性。 我在 Dell EMC 项目团队的 FAST VP 工作了一年多。 今天我想更详细地谈谈这项技术,并揭示其实现的一些细节。 当然,只有那些被允许透露的。 如果您对高效数据存储问题感兴趣或者只是没有完全理解文档,那么本文肯定会很有用且有趣。

Unity 存储上的 FAST VP:工作原理

我会立即告诉您材料中不会包含哪些内容。 不会寻找竞争对手并与他们进行比较。 我也不打算谈论开源中的类似技术,因为好奇的读者已经了解它们。 当然,我不会做任何广告。

存储分层。 FAST VP 的目的和目标

FAST VP 代表虚拟池全自动存储分层。 有点难? 没问题,我们现在就解决这个问题。 分层是一种组织数据存储的方式,其中有多个级别(层)存储数据。 每个都有自己的特点。 最重要的是:存储单位信息的性能、容量和价格。 当然,他们之间是有关系的。

分层的一个重要特征是,无论数据当前位于哪个存储级别,都统一提供对数据的访问,并且池的大小等于其中包含的资源大小的总和。 这就是与缓存的不同之处:缓存的大小不会添加到资源(本例中为池)的总容量中,并且缓存数据会复制主媒体数据的某些片段(或者如果缓存中的数据尚未写入)。 此外,数据按级别的分布对用户是隐藏的。 也就是说,他并不能准确地看到每个级别上的数据是什么,尽管他可以通过设置策略来间接影响这一点(稍后会详细介绍)。

现在我们来看看Unity中实现存储分层的特点。 Unity 有 3 个级别或层:

  • 极致性能 (SSD)
  • 性能(SAS HDD 10k/15k RPM)
  • 容量(NL-SAS HDD 7200 RPM)

它们按性能和价格的降序排列。 极致性能仅包括固态硬盘 (SSD)。 另外两层包括磁盘驱动器,它们的转速不同,相应的性能也不同。

将同一级别、相同大小的存储介质组合成RAID阵列,形成RAID组(RAID组,缩写为RG); 您可以在官方文档中了解可用和推荐的 RAID 级别。 存储池由一级或多级的 RAID 组构成,然后从中分配可用空间。 并从池中为文件系统和 LUN 分配空间。

Unity 存储上的 FAST VP:工作原理

为什么我需要分层?

简而言之,抽象地说: 用最少的资源取得更大的成果。 更具体地说,结果通常被理解为一组存储系统特征 - 速度和访问时间、存储成本等。 最少的资源意味着最少的支出:金钱、能源等等。 FAST VP 实现了在 Unity/Unity XT 存储系统中不同级别之间重新分配数据的机制。 如果你相信我,那么你可以跳过下一段。 其余的,我会告诉你更多一些。

在存储层之间正确分配数据可以让您通过牺牲一些很少使用的信息的访问速度来节省总体存储成本,并通过将常用数据移动到更快的介质来提高性能。 在这里,有人可能会争辩说,即使没有分层,普通管理员也知道在哪里放置哪些数据,存储系统适合其任务的特性是什么,等等。 这无疑是正确的,但手动分发数据也有其缺点:

  • 需要管理员的时间和注意力;
  • “重绘”存储资源以适应不断变化的条件并不总是可能的;
  • 一个重要的优势消失了:对位于不同存储级别的资源的统一访问。

为了让存储管理员减少对工作安全的担忧,我要补充一点,有效的资源规划在这里也是必要的。 现在已经简要概述了分层的任务,让我们看看您可以从 FAST VP 中获得什么。 现在是回到定义的时候了。 前两个词——Fully Automated——直译为“完全自动化”,意味着级别之间的分配自动发生。 虚拟池是一个数据池,包含来自不同存储级别的资源。 它看起来是这样的:

Unity 存储上的 FAST VP:工作原理

展望未来,我会说 FAST VP 仅在一个池内移动数据,而不是在多个池之间移动数据。

FAST VP 解决的问题

我们先抽象地说一下。 我们有一个池和一些可以在该池内重新分配数据的机制。 请记住,我们的目标是实现生产力最大化,让我们问问自己:我们可以通过哪些方式来实现这一目标? 可能有几个,FAST VP 可以为用户提供一些东西,因为该技术不仅仅是存储分层。 以下是 FAST VP 提高池性能的一些方法:

  • 数据分布在不同类型的磁盘、级别上
  • 在同一类型的磁盘之间分配数据
  • 扩容池时的数据分布

在了解如何解决这些任务之前,我们需要了解有关 FAST VP 工作原理的一些必要事实。 FAST VP 使用特定大小(256 兆字节)的块进行操作。 这是可以移动的最小连续数据“块”。 在文档中,他们称之为:切片。 从 FAST VP 的角度来看,所有 RAID 组都由一组这样的“片段”组成。 因此,所有 I/O 统计数据都会针对此类数据块进行累积。 为什么选择这个块大小以及它会减小吗? 块相当大,但这是数据粒度(较小的块大小意味着更准确的分布)和可用计算资源之间的折衷:考虑到现有对 RAM 的严格限制和大量的块,统计数据可能会占用太多了,计算量也会成比例增加。

FAST VP 如何将数据分配到池。 政治家

要控制启用 FAST VP 的池中数据的放置,存在以下策略:

  • 最高可用层
  • 自动分层
  • 从高开始,然后自动分层(默认)
  • 最低可用层

它们影响初始块分配(首先写入的数据)和随后的重新分配。 当数据已经位于磁盘上时,将根据计划或手动启动重新分配。

最高可用层尝试将新块放置在最高性能层。 如果没有足够的空间,则会将其放置在下一个最高效的级别,但随后可以将数据移动到更高效的级别(如果有空间或通过替换其他数据)。 自动分层根据可用空间量将新数据放置在不同级别,并根据需求和可用空间重新分配。 “从高开始,然后自动分层”是默认策略,也是推荐的策略。 最初放置时,它作为最高可用层,然后根据其使用统计数据移动数据。 最低可用层策略旨在将数据放置在效率最低的层中。

数据传输以低优先级进行,以免干扰存储系统的有用操作,但是,有一个“数据重定位率”设置可以更改优先级。 这里有一个特点:并非所有数据块都具有相同的重新分配顺序。 例如,标记为元数据的块将首先移动到更快的级别。 元数据可以说是“关于数据的数据”,一些附加信息,不是用户数据,而是存储其描述。 例如,文件系统中有关特定文件位于哪个块的信息。 这意味着访问数据的速度取决于访问元数据的速度。 鉴于元数据的大小通常要小得多,因此将其移动到性能更高的磁盘的好处预计会更大。

Fast VP 在工作中使用的标准

每个块的主要标准,非常粗略地说,是数据的“需求”特性,这取决于数据片段的读写操作次数。 我们将这种特性称为“温度”。 有需求的(热)数据比无人认领的数据“更热”。 它定期计算,默认情况下每隔一小时计算一次。

温度计算函数具有以下性质:

  • 在没有 I/O 的情况下,数据会随着时间的推移而“冷却”。
  • 随着时间的推移,在大致相等的负载下,温度首先升高,然后稳定在一定范围内。

接下来,考虑上述策略和每层的可用空间。 为了清楚起见,我将提供文档中的图片。 这里红色、黄色和蓝色分别表示高温、中度和低温的块。

Unity 存储上的 FAST VP:工作原理

但让我们回到任务上来。 因此,我们可以开始分析正在采取哪些措施来解决 FAST VP 问题。

A. 数据在不同类型磁盘、级别上的分布

实际上,这就是FAST VP 的主要任务。 从某种意义上说,其余的都是它的衍生物。 根据所选策略,数据将分布在不同的存储级别上。 首先,考虑放置策略,然后考虑块温度和 RAID 组的大小/速度。

对于最高/最低可用层保单,一切都非常简单。 对于另外两个来说,情况就是如此。 考虑到 RAID 组的大小和性能,数据分布在不同的级别上:因此块的总“温度”与每个 RAID 组的“条件最大性能”的比率大致相同。 因此,负载或多或少均匀地分布。 更多需要的数据被移动到快速介质,而很少使用的数据被移动到较慢的介质。 理想情况下,分布应如下所示:

Unity 存储上的 FAST VP:工作原理

B. 数据在同类型磁盘之间的分布

请记住,一开始我写的存储介质来自 一个或多个 级别合并到一个池中? 在单一级别的情况下,FAST VP 也有工作要做。 为了在任何级别实现最大性能,建议在磁盘之间均匀分布数据。 这(理论上)会让您获得最大的 IOPS。 RAID 组内的数据可以被视为均匀分布在磁盘上,但 RAID 组之间的情况并不总是如此。 如果发生不平衡,FAST VP 将根据数据量和“条件性能”(以数字形式)的比例在 RAID 组之间移动数据。 为了清楚起见,我将展示三个 RAID 组之间的重新平衡方案:

Unity 存储上的 FAST VP:工作原理

B. 扩池时的数据分布

此任务是前一个任务的特例,在将 RAID 组添加到池中时执行。 为了确保新添加的 RAID 组不会保持空闲状态,部分数据将转移到该组,这意味着负载将在所有 RAID 组之间重新分配。

SSD磨损均衡

通过使用磨损均衡,FAST VP 可以延长 SSD 的使用寿命,尽管此功能与存储分层没有直接关系。 由于温度数据已经可用,写入操作的数量也被考虑在内,并且我们知道如何移动数据块,因此 FAST VP 解决这个问题是合乎逻辑的。

如果一个 RAID 组中的条目数明显超过另一 RAID 组中的条目数,FAST VP 将根据写入操作的数量重新分配数据。 一方面,这减轻了负载并节省了一些磁盘的资源,另一方面,它为负载较少的磁盘增加了“工作”,从而提高了整体性能。

通过这种方式,FAST VP 应对了存储分层的传统挑战,并且做得比这更多。 所有这些都允许您在 Unity 存储系统中非常高效地存储数据。

一些技巧

  1. 不要忽视阅读文档。 有一些最佳实践,而且效果很好。 如果你遵循它们,那么通常不会出现严重的问题。 其余的建议基本上是重复或补充。
  2. 如果您已配置并启用 FAST VP,最好将其保持启用状态。 让它在规定的时间内分发数据,每年一次,这会对其他任务的性能产生严重影响。 在这种情况下,数据重新分配可能需要很长时间。
  3. 选择搬迁窗口时要小心。 尽管这是显而易见的,但请尽量选择 Unity 负载最小的时间并分配足够的时间。
  4. 计划扩展您的存储系统,按时完成。 这是一般性建议,对于 FAST VP 也很重要。 如果可用空间量非常小,则数据移动将会减慢或变得不可能。 特别是如果你忽略了第2点。
  5. 在启用 FAST VP 的情况下扩展池时,不应从最慢的磁盘开始。 也就是说,我们要么一次性添加所有计划的 RAID 组,要么首先添加最快的磁盘。 在这种情况下,将数据重新分配到新的“快速”磁盘将提高池的整体速度。 否则,从“慢”磁盘开始可能会导致非常不愉快的情况。 首先,数据将被传输到新的、相对较慢的磁盘,然后,当添加更快的磁盘时,则以相反的方向传输。 这里存在与不同 FAST VP 策略相关的细微差别,但一般来说,类似的情况是可能的。

如果您正在查看此产品,可以通过下载 Unity VSA 虚拟设备免费试用 Unity。

Unity 存储上的 FAST VP:工作原理

在材料的最后,我分享了几个有用的链接:

结论

我想写很多内容,但我知道并非所有细节都会引起读者的兴趣。 例如,您可以更详细地讨论 FAST VP 做出数据传输决策的标准以及分析 I/O 统计数据的过程。 另外,互动的话题 动态池,这值得单独写一篇文章。 你甚至可以幻想这项技术的发展。 我希望这并不无聊,我也没有让你感到无聊。 再见!

来源: habr.com

添加评论