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_STR, "") // rt realtime be besteffort best effort 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
#include "common/ceph_argparse.h"
#include "common/version.h"
+#include "common/io_priority.h"
#include "os/ObjectStore.h"
disk_tp.start();
command_tp.start();
+ set_disk_tp_priority();
+
// start the heartbeat
heartbeat_thread.create();
"osd_map_cache_size",
"osd_map_max_advance",
"osd_pg_epoch_persisted_max_stale",
+ "osd_disk_thread_ioprio_class",
+ "osd_disk_thread_ioprio_priority",
NULL
};
return KEYS;
op_tracker.set_history_size_and_duration(cct->_conf->osd_op_history_size,
cct->_conf->osd_op_history_duration);
}
+ if (changed.count("osd_disk_thread_ioprio_class") ||
+ changed.count("osd_disk_thread_ioprio_priority")) {
+ set_disk_tp_priority();
+ }
check_config();
}
}
}
+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;
+ int cls =
+ ceph_ioprio_string_to_class(cct->_conf->osd_disk_thread_ioprio_class);
+ disk_tp.set_ioprio(cls, cct->_conf->osd_disk_thread_ioprio_priority);
+}
+
// --------------------------------
int OSD::init_op_flags(OpRequestRef op)