第 14 章 存储
DM rebase 到版本 4.2
设备映射器(DM)已升级到上游版本 4.2,与之前的版本相比,它提供了很多程序错误修复和增强,包括大量 DM 加密性能更新和 DM 内核更新来支持多队列块 I/O 队列机制(blk-mq)。
使用 blk-mq 进行多队列 I/O 调度
Red Hat Enterprise Linux 7.2 包含用于块设备的新多队列 I/O 调度机制,称为 blk-mq。它可以通过允许某些设备驱动程序将 I/O 请求映射到多个硬件或软件队列来提高性能。当多次执行 I/O 线程到单个设备时,性能提高了性能会减少锁争用。由于对多个硬件提交和完成队列的原生支持及其低延迟的性能特性,较新的设备(如 Non-Volatile Memory Express (NVMe))是最佳选择。如始终一样,性能将取决于具体的硬件和工作负载。
目前在以下驱动程序中实施 blk-mq 功能并启用:virtio-blk、mtip32xx、nvme 和 rbd。
相关的功能 scsi-mq 允许小型计算机系统接口(SCSI)设备驱动程序使用 blk-mq 基础架构。scsi-mq 功能在 Red Hat Enterprise Linux 7.2 中作为技术预览提供。要启用 scsi-mq,请在内核命令行中指定 scsi_mod.use_blk_mq=y。默认值为 n (禁用)。
如果指定了 dm_mod.use_blk_mq=y 内核选项,也可以将设备映射器(DM)多路径目标配置为使用基于请求的 DM。默认值为 n (禁用)。
如果底层 SCSI 设备也正在使用 blk-mq,则设置 dm_mod.use_blk_mq=y 可能很有用,因为这会降低 DM 层中的锁定开销。
要确定 DM 多路径是否在系统中使用 blk-mq,请 cat 文件 /sys/block/dm-X/dm/use_blk_mq,其中 dm-X 被感兴趣的 DM 多路径设备替代。此文件是只读的,反映 /sys/module/dm_mod/parameters/use_blk_mq 中的全局值在创建基于请求的 DM 多路径设备时。
multipath.conf 文件中的新的 delay_watch_checks 和 delay_wait_checks 选项
如果路径不可靠,就像连接频繁丢弃时,multipathd 仍会持续尝试使用该路径。multipathd 认为路径无法再访问前的超时时间为 300 秒,这可能会给出 multipathd 已停滞的外观。
要解决这个问题,添加了两个新的配置选项: delay_watch_checks 和 delay_wait_checks。将 delay_watch_checks 设置为在在线后监视路径的循环 multipathd 数。如果路径在该分配的值下失败,multipathd 将不使用它。multipathd 将依赖于 delay_wait_checks 选项告知它必须传递多少连续周期,直到路径再次有效。这可防止在重新上线后立即使用不可靠路径。
multipath.conf 文件中的新 config_dir 选项
用户无法在 /etc/multipath.conf 和其他配置文件之间分割其配置。这导致用户无法为所有机器设置一个主要配置文件,并将机器特定配置信息保留在每个虚拟机的独立配置文件中。
要解决这个问题,在 multipath.config 文件中添加一个新的 config_dir 选项。用户必须将 config_dir 选项更改为空字符串或完全限定的目录路径名称。当设置为空字符串以外的任何内容时,多路径会按照字母顺序读取所有 .conf 文件。然后,它将应用配置,就像它们添加到 /etc/multipath.conf 中一样。如果没有进行此更改,config_dir 默认为 /etc/multipath/conf.d。
新的 dmstats 命令来显示和管理使用设备映射器驱动程序的设备区域的 I/O 统计信息
dmstats
命令提供对设备映射器 I/O 统计的用户空间支持。这样,用户可以为用户定义的设备映射器设备创建、管理和报告 I/O 计数器、指标和延迟直方数据。现在,dmsetup 报告中提供了统计字段,dmstats
命令添加新的专用报告模式,用于统计信息。
有关 dmstats
命令的详情,请查看 dmstats (8)手册页。
LVM 缓存
从 Red Hat Enterprise Linux 7.1 开始完全支持 LVM 缓存。此功能允许用户使用小快速设备创建逻辑卷(LV),作为较慢的设备缓存。有关创建缓存逻辑卷的详情,请参考 lvmcache (7)手册页。
请注意,对使用缓存 LV 的以下限制:
cache LV 必须是顶层设备。它不能用作精简池 LV、RAID LV 镜像或其他子LV 类型。
缓存 LV 子大小(原始 LV、元数据 LV 和数据 LV)只能是线性、条带或 RAID 类型。
创建后无法更改 cache LV 的属性。要更改缓存属性,请删除缓存,如 lvmcache (7)所述,并使用所需属性重新创建它。
新的 LVM/DM 缓存策略
已编写一个新的
smq
dm-cache 策略,以减少内存消耗并提高了大多数用例的性能。现在,它是新 LVM 缓存逻辑卷的默认缓存策略。希望使用旧的 mq
缓存策略的用户仍可通过在创建缓存逻辑卷时提供 -cachepolicy
参数来实现。
LVM systemID
LVM 卷组现在可以分配一个所有者。卷组所有者是主机的系统 ID。只有具有给定系统 ID 的主机才能使用 VG。这可能会受益于共享设备上存在的卷组,对多个主机可见,否则不受多个主机的并发使用的影响。分配系统 ID 的共享设备上的 LVM 卷组归一个主机所有,并不受其他主机的保护。
新的 lvmpolld
守护进程
lvmpolld
守护进程为长时间运行的 LVM 命令提供了一个轮询方法。启用后,长时间运行的 LVM 命令的控制将从原始 LVM 命令传输到 lvmpolld
守护进程。这允许操作独立于原始 LVM 命令。lvmpolld
守护进程默认启用。
在引入
lvmpolld
守护进程前,如果主服务(主服务)在 cgroup
中退出的主进程(主服务)中,则源自 lvm2 命令的任何后台轮询进程都会被终止。这可能导致预先终止 lvm2 轮询过程。此外,lvmpolld
有助于防止多次生成 lvm2 轮询进程在同一任务上查询进度,因为它跟踪正在进行中的所有轮询任务的进度。
有关
lvmpolld
守护进程的详情,请参考 lvm.conf
配置文件。
LVM 选择标准的改进
Red Hat Enterprise Linux 7.2 发行版本支持多个 LVM 选择标准的改进。在以前的版本中,只能对报告命令使用选择条件 ; LVM 现在支持几个 LVM 处理命令的选择标准。另外,这个版本有几个更改来更好地支持时间报告字段和选择。
有关这些新功能实现的详情,请参考逻辑卷管理手册中的 LVM 选择标准 附录。
增加了默认 SCSI LUN 的最大数量
max_report_luns
参数的默认值已从 511 增加到 16393。这个参数指定系统使用 Report LUN 机制扫描 SCSI 互连时可以配置的最大逻辑单元数。