From 739d7e462f3a03c4e188fcfa48eb05c0063970c9 Mon Sep 17 00:00:00 2001 From: Byungsu Park Date: Wed, 1 Nov 2017 15:51:01 +0900 Subject: [PATCH] osd: Include the dmclock request parameters when the op is enqueued on mclock queue. Signed-off-by: Byungsu Park --- src/common/mClockPriorityQueue.h | 6 ++++++ src/osd/OpQueueItem.h | 15 ++++++++++++++- src/osd/mClockClientQueue.cc | 5 +++-- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/common/mClockPriorityQueue.h b/src/common/mClockPriorityQueue.h index 7618118b59d..f51c22b53b4 100644 --- a/src/common/mClockPriorityQueue.h +++ b/src/common/mClockPriorityQueue.h @@ -309,6 +309,12 @@ namespace ceph { queue.add_request(std::move(item), cl, cost); } + void enqueue_distributed(K cl, unsigned priority, unsigned cost, T&& item, + const dmc::ReqParams& req_params) { + // priority is ignored + queue.add_request(std::move(item), cl, req_params, cost); + } + void enqueue_front(K cl, unsigned priority, unsigned cost, diff --git a/src/osd/OpQueueItem.h b/src/osd/OpQueueItem.h index e768fea1396..43a544da5e8 100644 --- a/src/osd/OpQueueItem.h +++ b/src/osd/OpQueueItem.h @@ -21,6 +21,8 @@ #include "include/utime.h" #include "osd/OpRequest.h" #include "osd/PG.h" +#include "common/mClockCommon.h" +#include "messages/MOSDOp.h" class OSD; @@ -73,6 +75,7 @@ public: private: OpQueueable::Ref qitem; int cost; + dmc::ReqParams qos_params; unsigned priority; utime_t start_time; uint64_t owner; ///< global id (e.g., client.XXX) @@ -92,7 +95,15 @@ public: start_time(start_time), owner(owner), map_epoch(e) - {} + { + if (auto op = maybe_get_op()) { + auto req = (*op)->get_req(); + if (req->get_type() == CEPH_MSG_OSD_OP) { + const MOSDOp *m = static_cast(req); + qos_params = m->get_qos_params(); + } + } + } OpQueueItem(OpQueueItem &&) = default; OpQueueItem(const OpQueueItem &) = delete; OpQueueItem &operator=(OpQueueItem &&) = default; @@ -125,6 +136,8 @@ public: utime_t get_start_time() const { return start_time; } uint64_t get_owner() const { return owner; } epoch_t get_map_epoch() const { return map_epoch; } + dmc::ReqParams get_qos_params() const { return qos_params; } + void set_qos_params(dmc::ReqParams qparams) { qos_params = qparams; } friend ostream& operator<<(ostream& out, const OpQueueItem& item) { return out << "OpQueueItem(" diff --git a/src/osd/mClockClientQueue.cc b/src/osd/mClockClientQueue.cc index b30ddb8c8b3..47f86a50e05 100644 --- a/src/osd/mClockClientQueue.cc +++ b/src/osd/mClockClientQueue.cc @@ -77,8 +77,9 @@ namespace ceph { unsigned priority, unsigned cost, Request&& item) { - queue.enqueue(get_inner_client(cl, item), priority, cost, - std::move(item)); + auto qos_params = item.get_qos_params(); + queue.enqueue_distributed(get_inner_client(cl, item), priority, cost, + std::move(item), qos_params); } // Enqueue the op in the front of the regular queue -- 2.39.5