RHEL 中逻辑卷的重复数据删除和压缩。
大约 31 分钟
RHEL 中逻辑卷的重复数据删除和压缩。
来源:官方文档 原始多页入口:RHEL 中逻辑卷的重复数据删除和压缩。 内容规模:约 24,505 字符,38 个章节标题,72 个命令/代码块,17 条提示框
阅读提要
- 副标题:在 LVM 上部署 VDO 以增加存储容量
- 摘要:使用逻辑卷管理器(LVM)中的 Virtual Data Optimizer (VDO)功能来管理去重和压缩的逻辑卷。您可以将 VDO 作为 LVM 逻辑卷(LV)一种类型(类似于 LVM 精简配置的卷)来管理。 您可以在 LVM (LVM-VDO)上部署 VDO,来为块访问、文件访问、本地存储和远程存储提供去重的存储。您还可以配置精简配置的 VDO 卷,以避免 VDO 卷的物理空间被 100% 使用。
- 主要章节:在 LVM 上部署 VDO 以增加存储容量;对红帽文档提供反馈;第 1 章 LVM 的 VDO 介绍;第 2 章 LVM-VDO 要求;第 3 章 创建重复数据删除和压缩的逻辑卷;第 4 章 在 LVM-VDO 卷中修剪选项;第 5 章 优化 LVM-VDO 性能
- 推荐阅读顺序:先看“阅读提要”和目录,再按章节查看“关键点/命令/注意”;需要原文细节时点击来源链接。
章节笔记
概览
- 该章节主要为下一级主题的入口。
在 LVM 上部署 VDO 以增加存储容量
- 要点:摘要
对红帽文档提供反馈
- 要点:我们致力于为您提供高质量的文档,您的反馈将对我们有很大帮助。为帮助我们改进,您可以通过 Red Hat Jira 跟踪系统提交建议或报告错误。
- 要点:流程
- 列表:登录到 Jira 网站。 如果您还没有帐户,请创建一个。
- 列表:单击顶部导航栏中的 Create。
- 列表:在 Summary 字段中输入描述性标题。
- 列表:在 Description 字段中输入您对改进的建议。包括文档相关部分的链接。
- 列表:点窗口底部的 Create。
第 1 章 LVM 的 VDO 介绍
- 要点:Virtual Data Optimizer(VDO)为存储提供内联块级的重复数据删除(deduplication)、压缩和精简置备。您可以将 VDO 作为逻辑卷管理器(LVM)逻辑卷(LVM)的一种类型(类似于 LVM 精简配置的卷)来管理。
- 要点:LVM (LVM-VDO)上的 VDO 卷包含以下组件:
- 列表:这是用于 VDO LV 存储、重复数据删除和压缩的后端物理设备。VDO 池 LV 设置 VDO 卷的物理大小。它是 VDO 可以在磁盘上存储的数据量。
- 列表:目前,每个 VDO 池 LV 只能有一个 VDO LV。因此,VDO 会单独去重和压缩每个 VDO LV。存储在单独 LV 上的重复数据不会从同一 VDO 卷的数据优化中受益。
- 列表:这是 VDO 池 LV 上的虚拟置备设备。VDO LV 设置 VDO 卷的置备、逻辑大小。它是应用程序可在重复数据删除和压缩发生前写入卷的数据量。
- 列表:dm-vdo 模块是一个 Linux 设备映射器目标,它提供一个去重的、压缩的和精简配置的块存储卷。
- 列表:dm-vdo 模块公开一个 VDO 池 LV 用来创建 VDO LV 的块设备。然后,系统将使用 VDO LV。
- 列表:当 dm-vdo 收到从 VDO 卷读取数据的逻辑块的请求时,它会响应。它将请求的逻辑块映射到底层的物理块。然后,它会读取并返回请求的数据。
- 表格样本(共 3 行):
- 物理设备 | 置备的设备
- LVM 上的 VDO | VDO 池 LV | VDO LV
- LVM 精简配置 | 精简池(thin poll) | 精简卷(thin volume)
第 2 章 LVM-VDO 要求
- 要点:LVM 上的 VDO 具有特定的放置和系统资源要求。
2.1. VDO 内存要求
- 要点:VDO 卷的 RAM 要求包括 VDO 模块的内存分配和通用重复数据删除服务(UDS)来优化存储效率。
- 要点:每个 VDO 卷有不同的内存要求:
- 列表:配置的每 1 MB 的块映射缓存需要 1.15 MB 的 RAM。块映射缓存至少需要 150 MB RAM。
- 列表:每 1 TB 的逻辑空间需要 1.6 MB 的 RAM。
- 列表:卷管理的每 1 TB 的物理存储需要 268 MB 的 RAM。
- 列表:按物理大小的 VDO 要求示例
- 注意:注意 使用默认的 2 GB slab 和 0.25 dense 索引设置的最小 VDO 卷磁盘用量大约需要 4.7 GB。这以 0% 去重或压缩比率提供了略低于 2 GB 的物理数据的写入。 这里,最小的磁盘使用量是默认 slab 大小和密度索引的总和。
- 表格样本(共 3 行):
- 索引类型 | 重复数据删除窗口
- 密度 | 每 1 GB RAM 为 1 TB
- 稀疏 | 每 1 GB RAM 为 10 TB
2.2. 稀疏索引和密集索引之间的区别
- 要点:UDS 稀疏和密度索引类型在内存用量、重复数据删除窗口覆盖和物理空间要求上有所不同,影响最佳工作负载选择策略。
- 要点:UDS 稀疏索引功能依赖于数据的时序位置。它尝试只在内存中保留最重要的索引条目。使用稀疏索引时,UDS 可以维护一个 deduplication 窗口,超过密度索引,同时使用相同的内存大小。对于元数据,稀疏索引需要十倍的物理空间。
2.3. VDO 存储空间要求
- 要点:您可以将 VDO 卷配置为使用最多 256TB 物理存储。只有物理存储的某个部分可用来存储数据。
- 要点:VDO 需要用于两种类型 VDO 元数据和 UDS 索引的存储。使用以下计算来确定 VDO 管理的卷的可用大小:
- 列表:第一类 VDO 元数据对于每 4 GB 物理存储使用大约 1 MB。它还为每个 slab 使用额外的 1 MB。
- 列表:第二类 VDO 元数据每 1 GB 逻辑存储消耗大约 1.25 MB。这会舍入到最接近的 slab。
- 列表:UDS 索引所需的存储量取决于索引类型。它还取决于分配给索引的 RAM 量。对于每个 1 GB RAM,密度 UDS 索引使用 17 GB 存储。稀疏 UDS 索引使用 170 GB 存储。
- 列表:按物理大小划分的 VDO 要求示例
- 列表:VDO 中的 Lab 大小
2.4. 按物理大小划分的 VDO 要求示例
- 要点:VDO 系统要求因物理卷大小和部署类型而异。特定的 RAM 和磁盘用量示例涵盖了主存储和备份存储场景。
- 要点:下表根据基础卷的物理大小提供 VDO 的最大系统要求。每个表列出了适合预期部署的需求,如主存储或备份存储。
- 表格样本(共 7 行):
- 物理大小 | RAM 使用情况:UDS | RAM 使用情况:VDO | 磁盘使用情况 | 索引类型
- 1 TB | 250 MB | 472 MB | 2.5 GB | 密度
- 10 TB | 1 GB | 3 GB | 10 GB | 密度
- 250 MB | 22 GB | 稀疏
2.5. 在存储堆栈中放置 LVM-VDO
- 要点:您必须将某些存储层放在 VDO 逻辑卷之下,并将其他存储层放在其之上。
- 要点:您可以将厚置备的层放在 VDO 之上,但在这种情况下,您不能依赖厚置备的保证。因为 VDO 层是精简置备的,精简置备的效果适用于所有层。如果没有监控 VDO 卷,您可能在 VDO 之上的厚置备卷上耗尽物理空间。
- 列表:DM Multipath
- 列表:DM Crypt
- 列表:软件 RAID(LVM 或 MD RAID)
- 列表:VDO 位于回送设备之上
- 列表:加密的卷位于 VDO 之上
- 列表:VDO 卷中的分区
2.6. LVM-VDO 部署情况
- 要点:虚拟数据优化器(VDO)可以部署到逻辑卷管理器(LVM)上,以提供重复数据删除存储解决方案。场景包括基于内核的虚拟机(KVM)、文件系统、互联网小型计算机系统接口(iSCSI)目标和加密配置。
- 要点:您可以以不同的方式部署 VDO on LVM(LVM-VDO)以提供重复数据删除的存储:
- 列表:块访问
- 列表:文件访问
- 列表:本地存储
- 列表:远程存储
- 注意:重要 如果对数据进行了重复数据删除,则在应用 VDO LV 上面应用加密层不会产生太大效果。在 VDO 可以对它们进行重复数据删除前,加密会使重复数据块不同。 始终将加密层放在 VDO LV 下。
第 3 章 创建重复数据删除和压缩的逻辑卷
- 要点:您可以创建使用 VDO 功能的 LVM 逻辑卷来重复数据删除和压缩数据。
3.1. LVM-VDO 卷的物理和逻辑大小
- 要点:VDO 计算 LVM-VDO 卷的物理、可用物理和逻辑大小,划分大小关系、存储效率、配置最佳实践和容量限制。
- 要点:VDO 使用不同的大小定义:
- 列表:用户数据可以是去重的和压缩的
- 列表:VDO 元数据,如 UDS 索引
- 列表:按物理大小划分的 VDO 要求示例
3.2. VDO 中的 Lab 大小
- 要点:VDO 卷的物理存储被分为几个 slab。每个 slab 都是物理空间的连续区域。给定卷的所有 slab 的大小相同。这可以是 2 个 128 MB 的倍数,最多 32 GB。
- 要点:默认的 slab 大小为 2 GB,以便于在较小的测试系统上评估 VDO。单个 VDO 卷最多可有 8192 个 slabs。因此,在使用 2GB slab 的默认配置中,允许的最大物理存储为 16 TB。当使用 32GB 的 slab 时,允许的最大物理存储为 256 TB。
- 表格样本(共 4 行):
- 物理卷大小 | 推荐的 slab 大小
- 10-99 GB | 1 GB
- 100 GB - 1 TB | 2 GB
- 2-256 TB | 32 GB
3.3. 安装 VDO
- 要点:您可以安装创建、挂载和管理 VDO 卷所需的 VDO 软件。
- 要点:流程
- 列表:安装 VDO 软件: # dnf install lvm2 vdo
- 命令/配置摘录:
# dnf install lvm2 vdo3.4. 创建并挂载 LVM-VDO 卷
- 要点:您可以使用 lvcreate 命令在 VDO 池 LV 上创建 VDO 逻辑卷(LV)。为您的 LVM-VDO 选择一个名称,如 vdo1。您必须对系统上的每个 LVM-VDO 使用不同的名称和设备。
- 要点:先决条件
- 列表:安装 VDO 软件。如需更多信息,请参阅安装 VDO。
- 列表:在您的系统中有一个有可用存储容量的 LVM 卷组。
- 列表:创建 LVM-VDO: # lvcreate --type vdo \ --name vdo1 \ --size 1T \ --virtualsize 10T \ <vg_name> 使用实际物理大小替换 1T。如果物理大小超过 16 TiB,请添加以下选项以将卷的 slab 大小增加到 32 GiB: --vdosettings 'vdo_slab_size_mb=32768' 如果您在物理大小大于 16 TiB 的卷上使用 2 GiB 的默认 slab 大小,则 lvcreate 命令会失败并显示以下错误: ERROR - vdoformat: formatVDO failed on '/dev/<device>': …
- 列表:在 LVM-VDO 上创建文件系统: 对于 XFS 文件系统: # mkfs.xfs -K /dev/<vg_name>/<vdo_name> 对于 ext4 文件系统: # mkfs.ext4 -E nodiscard /dev/<vg_name>/<vdo_name>
- 列表:对于 XFS 文件系统: # mkfs.xfs -K /dev/<vg_name>/<vdo_name>
- 列表:对于 ext4 文件系统: # mkfs.ext4 -E nodiscard /dev/<vg_name>/<vdo_name>
- 命令/配置摘录:
# lvcreate --type vdo \ --name vdo1 \ --size 1T \ --virtualsize 10T \ <vg_name>
--vdosettings 'vdo_slab_size_mb=32768'- 注意:重要 如果 LVM-VDO 卷创建失败,请使用 lvremove & lt;vg_name > 删除卷。根据故障的原因,您可能还需要添加两个强制选项(-ff)。
3.5. 使用 storage RHEL 系统角色配置 LVM-VDO 卷
- 要点:您可以使用 storage RHEL 系统角色在启用了压缩和去重的 LVM (LVM-VDO)上创建一个 VDO 卷。
- 要点:先决条件
- 列表:您已准备好控制节点和受管节点。
- 列表:以可在受管主机上运行 playbook 的用户登录到控制节点。
- 列表:用于连接到受管节点的帐户具有这些节点的 sudo 权限。
- 列表:创建一个包含以下内容的 playbook 文件,如 ~/playbook.yml : --- - name: Manage local storage hosts: managed-node-01.example.com tasks: - name: Create LVM-VDO volume under volume group 'myvg' ansible.builtin.include_role: name: redhat.rhel_system_roles.storage vars: storage_pools: - name: myvg disks: - /dev/sdb volumes: - n…
- 列表:验证 playbook 语法: $ ansible-playbook --syntax-check ~/playbook.yml 请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
- 列表:运行 playbook: $ ansible-playbook ~/playbook.yml
- 命令/配置摘录:
--- - name: Manage local storage hosts: managed-node-01.example.com tasks: - name: Create LVM-VDO volume under volume group 'myvg' ansible.builtin.include_role: name: redhat.rhel_system_roles.storage vars: storage_pools: - name: myvg disks: - /dev/sdb volumes: - name: mylv1 compression: true deduplication: true vdo_pool_size: 10 GiB size: 30 GiB mount_point: /mnt/app/shared
$ ansible-playbook --syntax-check ~/playbook.yml- 注意:注意 由于 storage 系统角色使用 LVM-VDO,因此每个池只能创建一个卷。
3.6. 在 web 控制台中创建 LVM-VDO 卷
- 要点:您可以在 RHEL web 控制台中创建 LVM-VDO 卷,以便在逻辑存储中使用重复数据删除和压缩。
- 要点:先决条件
- 列表:您已安装了 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:您已在系统上安装了 cockpit-storaged 软件包。
- 列表:您已创建了要从中创建 LVM-VDO 卷的 LVM2 组。
- 列表:登录到 RHEL 10 web 控制台。
- 列表:在面板中,单击 Storage。
- 列表:点击您要在其中创建 LVM-VDO 卷的 LVM2 组的菜单按钮 [⋮],然后点击 Create new logical volume。
3.7. 在 web 控制台中格式化 LVM-VDO 卷
- 要点:LVM-VDO 卷充当物理驱动器。要使用它们,您必须使用文件系统格式化它们。
- 要点:先决条件
- 列表:您已安装了 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:您已在系统上安装了 cockpit-storaged 软件包。
- 列表:您已创建了一个 LVM-VDO 卷。
- 列表:登录 RHEL 10 web 控制台,并在面板中单击 Storage。点击有您要格式化的 LVM-VDO 卷的 LVM2 卷组,然后点击 LVM-VDO 卷的菜单按钮 [⋮] 。
- 列表:在下拉菜单中,单击 Format。
- 列表:在 Name 字段输入逻辑卷名称。
- 注意:警告 格式化会清除卷上的所有数据。创建文件系统可能需要很长时间。
3.8. 在 web 控制台中扩展 LVM-VDO 卷
- 要点:在 RHEL 10 web 控制台中扩展 LVM-VDO 卷。
- 要点:先决条件
- 列表:您已安装了 RHEL 10 web 控制台。 具体步骤请参阅安装并启用 Web 控制台。
- 列表:您已在系统上安装了 cockpit-storaged 软件包。
- 列表:您已创建了一个 LVM-VDO 卷。
- 列表:登录到 RHEL 10 web 控制台。
- 列表:在面板中,单击 Storage。
- 列表:在 VDO Devices 框中点 LVM-VDO 卷。
3.9. 更改 LVM-VDO 卷上的压缩设置
- 要点:默认启用了 VDO 池逻辑卷(LV)的压缩。要保存 CPU 使用量,您可以禁用它。使用 lvchange 命令启用或禁用压缩。
- 要点:先决条件
- 列表:您的系统中有 LVM-VDO 卷。
- 列表:检查逻辑卷的压缩状态: # lvs -o+vdo_compression,vdo_compression_state LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert VDOCompression VDOCompressionState <vdo_name> <vg_name> vwi-a-v--- 1.00t vpool0 0.00 enabled online vpool0 <vg_name> dwi------- <15.00g 20.03 enabled online
- 列表:禁用 VDOPoolLV 的压缩: # lvchange --compression n <vg_name>/<vdo_pool_name> 如果要启用压缩,请使用 y 选项,而不是 n。
- 列表:查看当前的压缩状态: # lvs -o+vdo_compression,vdo_compression_state LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert VDOCompression VDOCompressionState <vdo_name> <vg_name> vwi-a-v--- 1.00t vpool0 0.00 offline vpool0 <vg_name> dwi------- <15.00g 20.03 offline
- 命令/配置摘录:
# lvs -o+vdo_compression,vdo_compression_state
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert VDOCompression VDOCompressionState <vdo_name> <vg_name> vwi-a-v--- 1.00t vpool0 0.00 enabled online vpool0 <vg_name> dwi------- <15.00g 20.03 enabled online3.10. 在 LVM-VDO 卷中更改去重设置
- 要点:默认启用了 VDO 池逻辑卷(LV)的去重。要保存内存,您可以禁用去重。使用 lvchange 命令启用或禁用去重。
- 要点:先决条件
- 列表:您的系统中有 LVM-VDO 卷。
- 列表:检查逻辑卷的去重状态: # lvs -o+vdo_deduplication,vdo_index_state LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert VDODeduplication VDOIndexState <vdo_name> <vg_name> vwi-a-v--- 1.00t vpool0 0.00 enabled online vpool0 <vg_name> dwi------- <15.00g 20.03 enabled online
- 列表:禁用 VDOPoolLV 的去重: # lvchange --deduplication n <vg_name>/<vdo_pool_name> 如果要启用去重,请使用 y 选项而不是 n。
- 列表:查看当前的去重状态: # lvs -o+vdo_deduplication,vdo_index_state LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert VDODeduplication VDOIndexState <vdo_name> <vg_name> vwi-a-v--- 1.00t vpool0 0.00 closed vpool0 <vg_name> dwi------- <15.00g 20.03 closed
- 命令/配置摘录:
# lvs -o+vdo_deduplication,vdo_index_state
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert VDODeduplication VDOIndexState <vdo_name> <vg_name> vwi-a-v--- 1.00t vpool0 0.00 enabled online vpool0 <vg_name> dwi------- <15.00g 20.03 enabled online- 注意:注意 由于 VDO 处理正在进行的并行 I/O 操作的方式,VDO 卷将继续识别这些操作中的重复数据。例如,虚拟机克隆操作可能会处理,带有大量重复块的 VDO 卷(关闭了很多重复块)。该卷仍可使用重复数据删除来节省大量空间。卷的索引状态不会影响进程。
3.11. 管理精简配置的 LVM-VDO 卷
- 要点:您可以配置精简配置的 LVM-VDO 卷,以便为将来的物理空间扩展做准备。这可在物理使用方法 100% 时提供帮助。在 lvcreate 中,不使用 100%FREE,而是使用 95%FREE 为恢复保留空间。
- 要点:在精简置备的 LVM-VDO 卷中维护保留的可用空间有助于防止完整卷、只读文件系统和 ENOSPC 错误。
- 列表:安装 VDO 软件。如需更多信息,请参阅安装 VDO。
- 列表:在您的系统中有一个有可用存储容量的 LVM 卷组。
- 列表:使用 lvcreate --type vdo --name myvdo myvg -l < percentage_of_free_space_in_vg>--virtualsize <virtual_ size_ of_vdo> 命令的精简配置的 LVM-VDO 卷。如需更多信息,请参阅 创建和挂载 LVM-VDO 卷。
- 列表:确定精简配置的 LVM-VDO 卷的最佳逻辑大小: # vdostats myvg-vpool0-vpool Device 1K-blocks Used Available Use% Space saving% myvg-vpool0-vpool 104856576 29664088 75192488 28% 69% 要计算空间节省率,请使用以下公式: Savings ratio = 1 / (1 - Space saving%) 在本例中, 大约有 3.22:1 个空间节省率(大约 80 GB)。 如果写入具有类似空间节省的数据,则按比例划分数据集大小乘以 256 GB。 如果节省相同的空间,将这个数字调整到 200 GB 时会…
- 列表:大约有 3.22:1 个空间节省率(大约 80 GB)。
- 列表:如果写入具有类似空间节省的数据,则按比例划分数据集大小乘以 256 GB。
- 命令/配置摘录:
# vdostats myvg-vpool0-vpool
Device 1K-blocks Used Available Use% Space saving% myvg-vpool0-vpool 104856576 29664088 75192488 28% 69%- 注意:注意 解决 LVM-VDO 卷中高物理空间使用的最佳方法是删除未使用的文件。另外,使用在线丢弃或 fstrim 程序丢弃这些未使用的文件所使用的块。LVM-VDO 卷的物理空间只能增加到 8192 slab。对于默认 slab 大小为 2 GB 的 LVM-VDO 卷,其为 16 TB,maximal slab 大小为 32 GB。
- 注意:注意 卸载或释放带有缓存数据的文件系统会导致缓存数据的写入。这可能会填充 LVM-VDO 卷的物理空间。当为 LVM-VDO 卷上的空闲物理空间设置监控阈值时,请考虑缓存的文件系统数据的最大量。
第 4 章 在 LVM-VDO 卷中修剪选项
- 要点:LVM-VDO 卷提供两个修剪选项。丢弃 执行在线块丢弃,以自动释放未使用的块(使用 mount -o discard 立即生效)。fstrim 定期丢弃需要 admin 调度和监控进程。
- 注意:注意 使用 fstrim 应用丢弃未使用的块,而不是 discard 挂载选项。这个选项的性能影响可能非常严重。因此,nodiscard 是默认值。
4.1. 在 LVM-VDO 卷上启用 discard 挂载选项
- 要点:您可以在 LVM-VDO 卷中启用 discard 选项。
- 要点:先决条件
- 列表:您的系统中有 LVM-VDO 卷。
- 列表:在卷上启用 discard 选项: # mount -o discard /dev/<vg_name>/<vdo_name> <mount_point>
- 命令/配置摘录:
# mount -o discard /dev/<vg_name>/<vdo_name> <mount_point>4.2. 配置定期 TRIM 操作
- 要点:您可以在系统上启用调度的修剪操作。
- 要点:先决条件
- 列表:您的系统中有 LVM-VDO 卷。
- 列表:启用并启动计时器: # systemctl enable --now fstrim.timer
- 列表:验证计时器是否已启用: # systemctl list-timers fstrim.timer NEXT LEFT LAST PASSED UNIT ACTIVATES Mon 2021-05-10 00:00:00 EDT 5 days left n/a n/a fstrim.timer fstrim.service 注意 您将看不到对 VDO 卷的任何引用,因为 fstrim.timer 在所有挂载的文件系统上运行。
- 命令/配置摘录:
# systemctl enable --now fstrim.timer
# systemctl list-timers fstrim.timer- 注意:注意 您将看不到对 VDO 卷的任何引用,因为 fstrim.timer 在所有挂载的文件系统上运行。
第 5 章 优化 LVM-VDO 性能
- 要点:VDO 内核驱动程序使用多个线程加快任务。它将 I/O 请求分为较小的部分,这些部分由不同的线程处理,这些部分相互通信。这允许一个线程在没有频繁锁定和解锁的情况下有效地管理共享数据。
- 要点:当一个线程完成一个任务时,VDO 已经为其准备好了另一项任务。这会保持线程忙碌,并减少了切换任务所花费的时间。VDO 还对较慢的任务使用单独的线程。这包括在队列或处理消息到重复数据删除索引中添加 I/O 操作。
5.1. VDO 线程类型
- 要点:VDO 使用各种线程类型来处理特定的操作,包括 I/O 处理、压缩、重复数据删除和其他存储管理任务。
- 要点:以下是 VDO 使用的线程类型:
5.2. 识别性能瓶颈
- 要点:识别 VDO 性能中的瓶颈对于优化系统效率至关重要。其中一个主要步骤是确定瓶颈是否位于 CPU、内存或后备存储的速度。
- 要点:在找出最慢的组件后,您可以开发策略来增强性能。为确保低性能的根本原因不是硬件问题,请运行测试。在存储堆栈中使用和不使用 VDO。
5.2.1. 使用 top 分析 VDO 性能
- 要点:您可以使用 top 工具检查 VDO 线程的性能。
- 要点:流程
- 列表:显示单个线程: $ top -H
- 列表:按 f 键显示字段管理器。
- 列表:使用 (↓) 键导航到 P = Last Used Cpu (SMP) 字段。
- 列表:按空格选择 P = Last Used Cpu (SMP) 字段。
- 列表:按 q 键关闭字段管理器。top 工具现在显示单个核的 CPU 负载,并指示每个进程或线程最近使用了哪个 CPU。您可以通过按 1 切换到每个 CPU 统计信息。
- 列表:top 结果的解释
- 命令/配置摘录:
$ top -H- 注意:注意 top 等工具无法区分生产 CPU 周期和因缓存或内存延迟而停滞的周期。这些工具将缓存争用和内存访问解释为实际工作。在节点间移动线程可能会减少 CPU 使用率,同时增加每秒的操作。
5.2.2. top 结果的解释
- 要点:解释顶级实用程序结果有助于通过了解 CPU 用量阈值并应用适当的故障排除建议来帮助分析 VDO 线程性能。
- 要点:在分析 VDO 线程的性能时,请使用下表来解释 top 工具的结果。
- 表格样本(共 8 行):
- 值 | 描述 | 建议
- 线程或 CPU 使用率超过 70% | 线程或 CPU 过载。高使用率可能导致 VDO 线程调度到没有实际工作的 CPU 上。这可能是由于大量的硬件中断、内存冲突或资源竞争而造成的。 | 增加运行此核的线程类型的数量。
- 低 %id 和 %wa 值 | 核正在积极处理任务。 | 不需要任何操作。
- 低 %hi 值 | 核正在执行标准的处理工作。 | 添加更多的核来提高性能。避免 NUMA 冲突。
5.2.3. 使用 perf 分析 VDO 性能
- 要点:您可以使用 perf 工具检查 VDO 的 CPU 性能。
- 要点:先决条件
- 列表:perf 软件包已安装。
- 列表:显示性能配置文件: # perf top
- 列表:通过解释 perf 结果来分析 CPU 性能: Expand 表 5.2. 解释 perf 结果 值 描述 建议 vdo:bioQ 线程花费大量的周期来获取自旋锁 在 VDO 下的设备驱动程序中可能会发生太多竞争 减少 vdo:bioQ 线程的数量 高 CPU 使用率 NUMA 节点之间的争用。 如果处理器支持,请检查 stalled-cycles-backend、cache-misses 和 node-load-misses 等计数器。高丢失率可能导致停滞,类似于其他工具中的高 CPU 使用率,表示可能的争用。 为 VDO 内核线程实现 CPU 亲和性或为中断处理程序实现 IRQ 亲和性,来将处理工作限制到单个节…
- 命令/配置摘录:
# perf top- 表格样本(共 3 行):
- 值 | 描述 | 建议
- vdo:bioQ 线程花费大量的周期来获取自旋锁 | 在 VDO 下的设备驱动程序中可能会发生太多竞争 | 减少 vdo:bioQ 线程的数量
- 高 CPU 使用率 | NUMA 节点之间的争用。 如果处理器支持,请检查 stalled-cycles-backend、cache-misses 和 node-load-misses 等计数器。高丢失率可能导致停滞,类似于其他工具中的高 CPU 使用率,表示可能的争用。 | 为 VDO 内核线程实现 CPU 亲和性或为中断处理程序实现 IRQ 亲和性,来将处理工作限制到单个节点。
5.2.4. 使用 sar 分析 VDO 性能
- 要点:您可以使用 sar 工具创建有关 VDO 性能的定期报告。
- 要点:先决条件
- 列表:安装 sysstat 工具: # dnf install sysstat
- 列表:以 1 秒的间隔显示磁盘 I/O 统计信息: $ sar -d 1
- 列表:通过解释 sar 结果分析 VDO 性能: Expand 表 5.3. 解释 sar 结果 值 描述 建议 底层存储设备的 %util 值远低于 100% 。 VDO 处于 100% 繁忙状态。 bioQ 线程在使用大量 CPU 时间。 对于快速设备,VDO 有太少的 bioQ 线程。 添加更多的 bioQ 线程。 请注意,当由于自旋锁争用而添加 bioQ 线程时,某些存储驱动程序可能会减慢。 Show more
- 命令/配置摘录:
# dnf install sysstat
$ sar -d 1- 注意:注意 并非所有块设备驱动程序都可以提供 sar 工具所需的数据。例如:MD RAID 等设备不报告 %util 值。
- 表格样本(共 2 行):
- 值 | 描述 | 建议
- 底层存储设备的 %util 值远低于 100% 。 VDO 处于 100% 繁忙状态。 bioQ 线程在使用大量 CPU 时间。 | 对于快速设备,VDO 有太少的 bioQ 线程。 | 添加更多的 bioQ 线程。 请注意,当由于自旋锁争用而添加 bioQ 线程时,某些存储驱动程序可能会减慢。
5.3. 重新分发 VDO 线程
- 要点:在处理请求时,VDO 对不同的任务使用各种线程池。最佳性能取决于在每个池中设置正确的线程数量。这根据可用的存储、CPU 资源和工作负载的类型而有所不同。
- 要点:您可以在多个线程之间分发 VDO 工作,以提高 VDO 性能。VDO 旨在通过并行性最大化性能。您可以通过为瓶颈的任务分配更多线程来改进它。它可以依赖于可用 CPU 资源以及瓶颈的根本原因等因素。高线程利用率(70-80% 以上)可能会导致延迟。因此,在这种情况下增加线程数可能会有所帮助。但是,过量的线程可能会妨碍性能,并产生额外的成本。
- 列表:测试具有各种预期工作负载的 VDO 来评估和优化其性能。
- 列表:为利用率超过 50% 的池增加线程数。
- 列表:如果总体利用率超过 50%,则增加 VDO 可用的内核数,即使单独的线程利用率较低。
5.3.1. 在 NUMA 节点中对 VDO 线程进行分组
- 要点:访问跨非统一内存访问(NUMA)节点的内存比本地访问要慢,并可能会引入缓存争用。在同一个 NUMA 节点上对相关的 VDO 线程进行分组可最小化延迟和资源争用,从而提高了系统性能。
- 要点:当 VDO 内核线程分布到 NUMA 节点或由调度程序重新分配时,可能会出现竞争。这源自与共享数据结构竞争或交换 I/O 请求消息的节点。这会减慢访问速度,并可能会降低整体性能。
- 列表:I/O 确认(ackQ)线程
- 列表:高级 I/O 提交线程: 用户模式线程处理直接 I/O 内核页缓存刷新线程
- 列表:用户模式线程处理直接 I/O
- 列表:内核页缓存刷新线程
- 列表:如果设备访问时间因 NUMA 节点而异,请在最接近存储设备控制器的节点上运行 bioQ 线程
- 列表:在与 logQ 或 physQ 线程相同的节点上运行 I/O 提交和存储设备中断处理。
5.3.2. 配置 CPU 亲和性
- 要点:如果调整 VDO 线程的 CPU 亲和性,您可以提高某些存储设备驱动程序上的 VDO 性能。当存储设备驱动程序的中断(IRQ)处理器在没有线程 IRQ 处理程序的情况下进行大量工作时,会造成限制。
- 要点:要在 IRQ 处理影响 CPU 调度时优化 VDO 性能,请执行以下操作:
- 列表:如果核过载,将特定的核专用于 IRQ 处理,并调整 VDO 线程亲和性。如果 %hi 值比其它核高出几个百分点,则核过载。
- 列表:避免运行单例 VDO 线程,例如,在忙碌的 IRQ 内核上运行 vdo:journalQ。
- 列表:只有在单个 CPU 使用率很高时,才会使其他线程类型远离忙于 IRQ 的核。
- 列表:设置 CPU 亲和性: # taskset -cp <cpu_numbers> <process_id> 将 < ;cpu_numbers > 替换为您要为其分配该进程的 CPU 号列表。将 <process_id > 替换为您要设置 CPU 关联性的正在运行的进程的 ID。 例如,要在 CPU 核 1 和 2 上为 dm-vdo 进程设置 CPU 关联性: # for pid in $(ps -eo pid,comm | awk '/vdo/ {print $1}'); do taskset -cp "1,2" "$pid"; done
- 列表:显示亲和性集合: # taskset -cp <cpu_numbers> <process_id> 将 <process_id > 替换为您要显示 CPU 关联性的正在运行的进程 ID。
- 命令/配置摘录:
# taskset -cp <cpu_numbers> <process_id>
# for pid in $(ps -eo pid,comm | awk '/vdo/ {print $1}'); do taskset -cp "1,2" "$pid"; done- 注意:注意 配置在系统重启后不会保留。
5.4. 增加块映射缓存大小以增强性能
- 要点:您可以通过增加 LVM-VDO 卷的缓存大小来提高读写性能。如果您扩展了读取和写入延迟或显著数据从与应用程序要求不匹配的存储读取,则需要操作。您可能需要调整缓存大小。
- 要点:以下示例演示了如何将系统中的缓存大小从 128 MB 更改为 640 MB。
- 列表:检查当前 LVM-VDO 卷的缓存大小: # lvs -o vdo_block_map_cache_size VDOBlockMapCacheSize 128.00m 128.00m
- 列表:停用 LVM-VDO 卷: # lvchange -an <vg_name>/<vdo_volume>
- 列表:更改 LVM-VDO 设置: # lvchange --vdosettings "block_map_cache_size_mb=640" <vg_name>/<vdo_volume> 将 640 替换为您的新缓存大小,单位为 MB 。 注意 缓存大小必须是 4096 的倍数,范围为 128 MB 到 16 TB。每个逻辑线程至少需要 16 MB。更改在下次 LVM-VDO 设备启动时生效。已在运行的设备不受影响。
- 列表:激活 LVM-VDO 卷: # lvchange -ay <vg_name>/<vdo_volume>
- 列表:检查当前的 LVM-VDO 卷配置: # lvs -o vdo_block_map_cache_size <vg_name>/<vdo_volume> VDOBlockMapCacheSize 640.00m
- 命令/配置摘录:
# lvs -o vdo_block_map_cache_size
VDOBlockMapCacheSize 128.00m 128.00m- 注意:警告 当您增加块映射缓存时,缓存会使用您指定的内存大小,再加上额外的 15% 内存。较大的缓存大小使用更多的 RAM,并影响整体系统稳定性。
- 注意:注意 缓存大小必须是 4096 的倍数,范围为 128 MB 到 16 TB。每个逻辑线程至少需要 16 MB。更改在下次 LVM-VDO 设备启动时生效。已在运行的设备不受影响。
5.5. 加快丢弃操作
- 要点:VDO 为 DISCARD (TRIM)操作设置最大大小,用于通知 LVM-VDO 设备上未使用的块的底层存储。默认大小为 1,等于 8 个扇区或 4KB。增加 DISCARD 大小可以提高丢弃操作速度。
- 要点:增加 DISCARD 大小涉及快速丢弃处理,降低其他写入操作的性能。
- 列表:停用 LVM-VDO 卷: # lvchange -an <vg_name>/<vdo_volume>
- 列表:为 DISCARD 扇区设置新的最大大小: # lvchange --vdosettings "vdo_max_discard=<value>" <vg_name>/<vdo_volume>
- 列表:激活 LVM-VDO 卷: # lvchange -ay <vg_name>/<vdo_volume>
- 列表:验证 discard 值是否已成功更改: # lvs -o vdo_max_discard <vg_name>/<vdo_volume>
- 命令/配置摘录:
# lvchange -an <vg_name>/<vdo_volume>
# lvchange --vdosettings "vdo_max_discard=<value>" <vg_name>/<vdo_volume>5.6. 优化 CPU 频率缩放
- 要点:默认情况下,RHEL 使用 CPU 频率扩展来省电,并在低负载下降低 heat。要优先选择性能,请将 CPU 设置为最大时钟速度。这有助于 LVM-VDO 更快地运行 deduplication 和压缩。
- 要点:以更高的频率运行 CPU 可让资源密集型操作更快地完成。这可提高整体系统吞吐量和存储优化结果。
- 列表:显示可用的 CPU 调控器: $ cpupower frequency-info -g
- 列表:更改缩放调控器,以优先选择性能: # cpupower frequency-set -g performance 此设置会一直保留,直到重启为止。
- 列表:可选:要使扩展管理中的更改持久,请创建一个自定义 systemd 服务: 使用以下内容创建一个新的 /etc/systemd/system/cpufreq.service 文件: [Unit] Description=Set CPU scaling governor to performance [Service] ExecStart=/usr/bin/cpupower frequency-set -g performance [Install] WantedBy=multi-user.target 保存文件并退出。 重新载入服务文件: # systemctl daemon-reload 启用新服务: # systemctl en…
- 列表:使用以下内容创建一个新的 /etc/systemd/system/cpufreq.service 文件: [Unit] Description=Set CPU scaling governor to performance [Service] ExecStart=/usr/bin/cpupower frequency-set -g performance [Install] WantedBy=multi-user.target
- 列表:保存文件并退出。
- 列表:重新载入服务文件: # systemctl daemon-reload
- 命令/配置摘录:
$ cpupower frequency-info -g
# cpupower frequency-set -g performance- 注意:警告 为更高的性能调整 CPU 频率扩展可以提高功耗和热量产生。在冷却不足的系统中,这可能导致过热,并可能导致热节流,这限制了性能提升。
完整目录
- 在 LVM 上部署 VDO 以增加存储容量
- 对红帽文档提供反馈
- 第 1 章 LVM 的 VDO 介绍
- 第 2 章 LVM-VDO 要求
- 2.1. VDO 内存要求
- 2.2. 稀疏索引和密集索引之间的区别
- 2.3. VDO 存储空间要求
- 2.4. 按物理大小划分的 VDO 要求示例
- 2.5. 在存储堆栈中放置 LVM-VDO
- 2.6. LVM-VDO 部署情况
- 第 3 章 创建重复数据删除和压缩的逻辑卷
- 3.1. LVM-VDO 卷的物理和逻辑大小
- 3.2. VDO 中的 Lab 大小
- 3.3. 安装 VDO
- 3.4. 创建并挂载 LVM-VDO 卷
- 3.5. 使用 storage RHEL 系统角色配置 LVM-VDO 卷
- 3.6. 在 web 控制台中创建 LVM-VDO 卷
- 3.7. 在 web 控制台中格式化 LVM-VDO 卷
- 3.8. 在 web 控制台中扩展 LVM-VDO 卷
- 3.9. 更改 LVM-VDO 卷上的压缩设置
- 3.10. 在 LVM-VDO 卷中更改去重设置
- 3.11. 管理精简配置的 LVM-VDO 卷
- 第 4 章 在 LVM-VDO 卷中修剪选项
- 4.1. 在 LVM-VDO 卷上启用 discard 挂载选项
- 4.2. 配置定期 TRIM 操作
- 第 5 章 优化 LVM-VDO 性能
- 5.1. VDO 线程类型
- 5.2. 识别性能瓶颈
- 5.2.1. 使用 top 分析 VDO 性能
- 5.2.2. top 结果的解释
- 5.2.3. 使用 perf 分析 VDO 性能
- 5.2.4. 使用 sar 分析 VDO 性能
- 5.3. 重新分发 VDO 线程
- 5.3.1. 在 NUMA 节点中对 VDO 线程进行分组
- 5.3.2. 配置 CPU 亲和性
- 5.4. 增加块映射缓存大小以增强性能
- 5.5. 加快丢弃操作
- 5.6. 优化 CPU 频率缩放
