Ceph/OSD 请求队列

在前台 I/O 与后台恢复间分配服务

Ceph OSD 的 mClock 用保留份额、权重与上限协调客户端请求、后台恢复和后台尽力服务。

v19.2.0调度与资源分配核验 2026-10-08
相关概念

工程问题#

故障恢复需要资源,但抢占太多会拖慢前台业务;只设置优先级难以同时表达最低服务、余量分配与最高限额。

实际实现#

不同服务类由 reservation、weight、limit 约束调度,内置 profile 给出不同资源侧重;参数与 OSD 能力估计共同影响服务分配。

处理流程#

  1. 把操作归入对应服务类
  2. 读取所选 profile 的参数
  3. 按保留份额和上限约束调度
  4. 用权重竞争剩余能力

源码片段#

固定版本 · 原文摘录
src/osd/scheduler/mClockScheduler.ccv19.2.0 · L97–L107
查看原文件
97  // Set external client infos98  double res = conf.get_val<double>(99    "osd_mclock_scheduler_client_res");100  double lim = conf.get_val<double>(101    "osd_mclock_scheduler_client_lim");102  uint64_t wgt = conf.get_val<uint64_t>(103    "osd_mclock_scheduler_client_wgt");104  default_external_client_info.update(105    get_res(res),106    wgt,107    get_lim(lim));
mClockScheduler::ClientRegistry::update_from_config

客户端服务类分别读取 reservation、limit、weight,再更新 dmClock ClientInfo。get_res/get_lim 在前文把比例乘以每个 shard 的估算能力,weight 无量纲;这段是工程参数接入,实际请求排序由 dmClock 调度队列完成。

收益与取舍#

工程分析

带来的收益

  • 分别表达最低保障、竞争权重和限额
  • 可以调整业务延迟与恢复进度的侧重

付出的代价

  • 工程分析:能力估计不准会影响参数效果
  • 单个 OSD 的队列控制不等于端到端延迟保证

可比较的选择

严格优先级队列规则直接,但持续高优先级流量可能挤压低优先级服务。

版本与适用范围#

对应 Ceph Squid / v19.2.0 OSD 的 mClock 调度。普通操作按 OSD shard 进入队列;immediate、优先级达到 cutoff 的操作及部分前插请求走独立高优先级队列,并非所有操作都受相同 mClock 约束。

参考来源#

源码、官方文档与原始论文
01
Ceph · mClock Config Reference

rados/configuration/mclock-config-ref · mClock Profiles

官方文档Squid
11 个匹配案例