6.3. 重新分发 VDO 线程


在处理请求时,VDO 将各种线程池用于不同的任务。最佳性能取决于在每个池中设置正确的线程数量,这因可用的存储、CPU 资源以及工作负载的类型而异。您可以将 VDO 分散到多个线程中,以提高 VDO 性能。

VDO 旨在通过并行性最大化性能。您可以根据可用 CPU 资源等因素和瓶颈的根本原因,为瓶颈任务分配更多线程来提高它。高线程利用率(bove 70-80%)可能会导致延迟。因此,在这种情况下增加线程数可能会有所帮助。但是,过量线程可能会妨碍性能,并产生额外的成本。

要获得最佳性能,请执行以下操作:

  • 测试具有各种预期工作负载的 VDO 来评估和优化其性能。
  • 为使用率超过 50% 的池增加线程数。
  • 如果总体利用率大于 50%,增加 VDO 可用的内核数,即使单个线程利用率较低。

6.3.1. 在 NUMA 节点之间对 VDO 线程进行分组

访问 NUMA 节点的内存比本地内存访问要慢。在内核共享节点中的最后一个缓存的 Intel 处理器上,当数据在节点间共享时,缓存问题会比在单一节点间共享时更显著。虽然很多 VDO 内核线程管理专用数据结构,但它们通常会交换有关 I/O 请求的消息。VDO 线程分散到多个节点上,或者调度程序在节点间重新分配线程可能会导致竞争,这是竞争同一资源的多个节点。

您可以通过在同一 NUMA 节点上对某些线程进行分组来提高 VDO 性能。

在一个 NUMA 节点上将相关的线程分组到一起
  • I/O 确认(ackQ)线程
  • 高级别 I/O 提交线程:

    • 用户模式线程处理直接 I/O
    • 内核页面缓存清除线程
优化设备访问
  • 如果设备访问时间因 NUMA 节点而异,请在最接近存储设备控制器的节点上运行 bioQ 线程
最小化竞争
  • 在与 logQphysQ 线程相同的节点上运行 I/O 提交和存储设备中断处理。
  • 在同一节点上运行其他与 VDO 相关的工作。
  • 如果一个节点无法处理所有 VDO 工作,在将线程移到其他节点时请考虑内存争用。例如,将中断处理和 bioQ 线程的设备移到另一个节点。

6.3.2. 配置 CPU 关联性

如果调整 VDO 线程的 CPU 关联性,您可以提高某些存储设备驱动程序的 VDO 性能。

当存储设备驱动程序的中断(IRQ)处理程序具有大量工作,并且驱动程序不使用线程 IRQ 处理程序时,它可能会限制系统调度程序优化 VDO 性能的能力。

要获得最佳性能,请执行以下操作:

  • 如果内核过载,则指定特定的内核到 IRQ 处理并调整 VDO 线程关联性。如果 %hi 值超过其他内核的百分比,则内核会超载。
  • 避免在忙碌的 IRQ 内核上运行单例 VDO 线程,如 kvdo:journalQ 线程。
  • 只有在单个 CPU 使用较高时,才会将其他线程类型保留为忙碌的 IRQ。
注意

配置在系统重启后不会保留。

步骤

  • 设置 CPU 关联性:

    # taskset -c <cpu-numbers> -p <process-id>

    将 &lt ;cpu-numbers > 替换为您要为其分配进程的 CPU 号的逗号分隔列表。将 <process-id > 替换为您要设置 CPU 关联性的正在运行的进程 ID。

    例 6.1. 在 CPU 内核 1 和 2 上为 kvdo 进程设置 CPU 关联性

    # for pid in `ps -eo pid,comm | grep kvdo | awk '{ print $1 }'`
    do
        taskset -c "1,2" -p $pid
    done

验证

  • 显示关联性集:

    # taskset -p <cpu-numbers> -p <process-id>

    将 &lt ;cpu-numbers > 替换为您要为其分配进程的 CPU 号的逗号分隔列表。将 <process-id > 替换为您要设置 CPU 关联性的正在运行的进程 ID。

其他资源

  • 您系统上的 taskset (1) 手册页
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.