2.6. 优化 UDS 索引
您可以配置特定的 UDS 索引设置以便在您的系统中优化它。
在创建 VDO 卷后,您无法更改 UDS 索引的属性。
2.6.1. VDO 卷的组件 复制链接链接已复制到粘贴板!
VDO 使用块设备作为后备存储,它包括由一个或多个磁盘、分区甚至平面文件组成的物理存储聚合。当存储管理工具创建 VDO 卷时,VDO 为 UDS 索引和 VDO 卷保留卷空间。UDS 索引和 VDO 卷会一起交互,以提供去重的块存储。
图 2.2. VDO 磁盘机构
VDO 解决方案包括以下组件:
kvdo
载入 Linux 设备映射器层的内核模块提供一个去重的、压缩的和精简配置的块存储卷。
kvdo
模块公开一个块设备。对于块存储,您可以直接访问块存储或通过 Linux 文件系统(如 XFS 或 ext4)呈现它。当
kvdo
收到一个读取 VDO 卷中数据的逻辑块的请求时,它会将请求的逻辑块映射到底层的物理块上,然后读取并返回请求的数据。当
kvdo
收到一个向 VDO 卷写数据块的请求时,它首先检查请求是 DISCARD 还是 TRIM 请求,或者数据是否统一为零。如果其中任何一个条件为真,则kvdo
会更新其块映射,并确认请求。否则,VDO 会处理并优化数据。uds
一个与卷上 Universal Deduplication Service(UDS)索引进行通信,并分析数据是否有重复的内核模块。对于每个新的数据,UDS 可以快速地判断该数据是否与之前存储的数据相同。如果索引发现匹配项,则存储系统可在内部引用现有项,以避免多次保存相同的信息。
UDS 索引作为
uds
内核模块运行在内核中。- 命令行工具
- 用于配置和管理优化的存储。
2.6.2. UDS 索引 复制链接链接已复制到粘贴板!
VDO 使用名为 UDS 的高性能去重索引来检测正在存储的重复的数据块。
UDS 索引提供了 VDO 产品的基础。对于每个新数据段,它会快速确定该数据段是否与之前存储的任何数据段相同。如果索引发现匹配项,则存储系统可在内部引用现有项,以避免多次保存相同的信息。
UDS 索引作为 uds
内核模块运行在内核中。
去重窗口 是索引记住的之前写入的块的数量。可配置的去重窗口的大小。对于给定的窗口大小,索引需要特定数量的 RAM 以及特定数量的磁盘空间。窗口的大小通常通过使用 --indexMem=size
选项指定索引内存的大小来决定。然后,VDO 决定自动使用的磁盘空间量。
UDS 索引由两个部分组成:
- 在内存中使用紧凑表示,每个唯一块最多包含一个条目。
- 记录在索引发生时的相关块名称的磁盘组件,按顺序记录。
UDS 在内存中平均每个条目使用 4 个字节,包括缓存。
磁盘上的组件维护传递给 UDS 的数据的相关历史记录。UDS 为属于这个去重窗口中的数据提供去重建议,其中包括最近看到的块的名称。去重窗口允许 UDS 尽可能高效地索引数据,同时限制索引大型数据存储库所需的内存量。尽管去重窗口具有局限性,但大部分具有高级去重的数据集也表现出高度的时间局部性 - 换句话说,大多数去重发生在几乎同时写入的块集合中。另外,通常要写入的数据通常可能会与最近写入的数据重复。因此,对于给定时间间隔的工作负载,去重比率通常相同,无论 UDS 仅索引了最新的数据还是所有数据。
由于重复数据往往会表现出时间局部性,因此很少需要对存储系统中的每个块进行索引。若非如此,索引内存的成本将超过去重所节省的存储成本。索引大小要求与数据刷新率紧密相关。例如,假设存储系统的总容量为 100 TB,但每周的摄取率为 1 TB 。使用 4TB 的去重窗口,UDS 可探测到上个月写入的数据的最大冗余。
2.6.3. 推荐的 UDS 索引配置 复制链接链接已复制到粘贴板!
本节介绍了根据您预期的用例,用于 UDS 索引的推荐选项。
通常,红帽建议在所有产品用例中使用 稀疏 UDS 索引。这是一个非常高效的索引数据结构,在其去重窗口中,每个块大约需要十分之一字节的 RAM 。在磁盘上,每个块大约需要 72 字节磁盘空间。这个索引的最小配置使用了 256 MB RAM,磁盘大约需要 25 GB 空间。
要使用此配置,请在 vdo create
命令中指定 --sparseIndex=enabled --indexMem=0.25
选项。这个配置会导致一个 2.5 TB 的去重窗口(也就是说它会记住 2.5 TB 的历史记录)。在大多数用例中,2.5 TB 的去重窗口适合用于大小高达 10 TB 的去重存储池。
但是,索引的默认配置是使用密度 索引。该索引在 RAM 中的效率要低得多(10 倍),但它需要最少的磁盘空间(也是 10 倍),这使其更便于在受限环境中进行评估。
通常,建议配置一个四分之一 VDO 卷物理大小的去重窗口。但这不是实际要求。即便是小的去重窗口(与物理存储量相比)也可以在许多用例中发现大量的重复数据。也可以使用较大的窗口,但多数情况下,这样做将无用。