OPTION(osd_op_pq_max_tokens_per_priority, OPT_U64, 4194304)
OPTION(osd_op_pq_min_cost, OPT_U64, 65536)
OPTION(osd_disk_threads, OPT_INT, 1)
+OPTION(osd_disk_thread_ioprio_class, OPT_INT, -1) // 1 = RT, 2 = BE, 3 = IDLE
+OPTION(osd_disk_thread_ioprio_priority, OPT_INT, -1) // 0-7
OPTION(osd_recovery_threads, OPT_INT, 1)
OPTION(osd_recover_clone_overlap, OPT_BOOL, true) // preserve clone_overlap during recovery/migration
OPTION(osd_backfill_scan_min, OPT_INT, 64)
disk_tp.start();
command_tp.start();
+ set_disk_tp_priority();
+
// start the heartbeat
heartbeat_thread.create();
{
static const char* KEYS[] = {
"osd_max_backfills",
+ "osd_disk_thread_ioprio_class",
+ "osd_disk_thread_ioprio_priority",
NULL
};
return KEYS;
service.local_reserver.set_max(g_conf->osd_max_backfills);
service.remote_reserver.set_max(g_conf->osd_max_backfills);
}
+ if (changed.count("osd_disk_thread_ioprio_class") ||
+ changed.count("osd_disk_thread_ioprio_priority")) {
+ set_disk_tp_priority();
+ }
+}
+
+void OSD::set_disk_tp_priority()
+{
+ dout(10) << __func__
+ << " class " << cct->_conf->osd_disk_thread_ioprio_class
+ << " priority " << cct->_conf->osd_disk_thread_ioprio_priority
+ << dendl;
+ disk_tp.set_ioprio(cct->_conf->osd_disk_thread_ioprio_class,
+ cct->_conf->osd_disk_thread_ioprio_priority);
}
// --------------------------------