第 5 章 优化 LVM-VDO 性能


VDO 内核驱动程序通过使用多个线程来加快任务。不是一个线程对 I/O 请求做所有的事情,而是将工作分成较小的部分来分配给不同的线程。这些线程在处理请求时相互通信。这样,一个线程就可以处理共享数据,而不需要不断地锁定和解锁。

当一个线程完成一个任务时,VDO 已经为其准备好了另一项任务。这会保持线程忙碌,并减少了切换任务所花费的时间。VDO 还对较慢的任务使用单独的线程,如将 I/O 操作添加到队列中,或处理到去重索引的消息。

5.1. VDO 线程类型

VDO 使用各种线程类型来处理特定的操作:

逻辑区域线程(vdo:logQ)
维护呈现给 VDO 设备的用户的逻辑块数(LBN)和底层存储系统中的物理块数(PBN)之间的映射。它们还阻止对同一块的并发写。逻辑线程在读和写操作过程中处于活动状态。处理通常是平均分布的,但特定的访问模式偶尔可能会将工作集中在一个线程上。例如,频繁访问特定块映射页中的 LBN 可能会导致一个逻辑线程处理所有这些操作。
物理区域线程(vdo:physQ)
在写操作过程中处理数据块分配和引用计数。
I/O 提交线程(vdo:bioQ)
处理从 VDO 到存储系统的块 I/O (bio)操作的传输。它们处理来自其他 VDO 线程的 I/O 请求,并将它们传递给底层设备驱动程序。这些线程与设备相关的数据结构交互,为设备驱动程序内核线程创建请求,并防止 I/O 请求因为设备请求队列满了而被阻止时的延迟。
CPU 处理线程(vdo:cpuQ)
处理不阻止或需要对其他线程类型管理的数据结构进行独占访问的 CPU 密集型任务。这些任务包括计算哈希值和压缩数据块。
I/O 确认线程(vdo:ackQ)
表示到更高级别组件的 I/O 请求完成,如内核页缓存或应用程序线程执行直接 I/O。其 CPU 使用率和对内存争用的影响受到内核级代码的影响。
哈希区域线程(vdo:hashQ)
将 I/O 请求与匹配哈希进行协调,以处理潜在的去重任务。虽然它们创建并管理去重请求,但它们不会执行大量计算。单个哈希区线程通常就足够了。
去重线程 (vdo:dupeQ)
处理 I/O 请求并与去重索引进行通信。这个工作在单独的线程上执行,以防止阻塞。如果索引没有快速响应,它还有一个跳过去重的超时机制。每个 VDO 设备只有一个去重线程。
日志线程(vdo:journalQ)
更新恢复日志并为写调度日志块。此任务不能划分到多个线程中。每个 VDO 设备只有一个日志线程。
封装器线程 (vdo:packerQ)
启用压缩时,写操作过程中的工作。它从 CPU 线程收集压缩的数据块,以减少浪费的空间。每个 VDO 设备只有一个 packer 线程。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat