]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/osd/scheduler/mClockScheduler.cc
import quincy beta 17.1.0
[ceph.git] / ceph / src / osd / scheduler / mClockScheduler.cc
index f2f0ffc3dbd4635430f213ed1b12912fcfc2113e..8487127138287a3f28bca8534516f05830ffb032 100644 (file)
@@ -23,7 +23,7 @@ namespace dmc = crimson::dmclock;
 using namespace std::placeholders;
 
 #define dout_context cct
-#define dout_subsys ceph_subsys_osd
+#define dout_subsys ceph_subsys_mclock
 #undef dout_prefix
 #define dout_prefix *_dout << "mClockScheduler: "
 
@@ -351,6 +351,9 @@ void mClockScheduler::set_profile_config()
     std::to_string(client.wgt));
   cct->_conf.set_val("osd_mclock_scheduler_client_lim",
     std::to_string(client.lim));
+  dout(10) << __func__ << " client QoS params: " << "["
+           << client.res << "," << client.wgt << "," << client.lim
+           << "]" << dendl;
 
   // Set background recovery client params
   cct->_conf.set_val("osd_mclock_scheduler_background_recovery_res",
@@ -359,6 +362,9 @@ void mClockScheduler::set_profile_config()
     std::to_string(rec.wgt));
   cct->_conf.set_val("osd_mclock_scheduler_background_recovery_lim",
     std::to_string(rec.lim));
+  dout(10) << __func__ << " Recovery QoS params: " << "["
+           << rec.res << "," << rec.wgt << "," << rec.lim
+           << "]" << dendl;
 
   // Set background best effort client params
   cct->_conf.set_val("osd_mclock_scheduler_background_best_effort_res",
@@ -367,6 +373,9 @@ void mClockScheduler::set_profile_config()
     std::to_string(best_effort.wgt));
   cct->_conf.set_val("osd_mclock_scheduler_background_best_effort_lim",
     std::to_string(best_effort.lim));
+  dout(10) << __func__ << " Best effort QoS params: " << "["
+    << best_effort.res << "," << best_effort.wgt << "," << best_effort.lim
+    << "]" << dendl;
 }
 
 int mClockScheduler::calc_scaled_cost(int item_cost)
@@ -387,6 +396,24 @@ void mClockScheduler::update_configuration()
 
 void mClockScheduler::dump(ceph::Formatter &f) const
 {
+  // Display queue sizes
+  f.open_object_section("queue_sizes");
+  f.dump_int("immediate", immediate.size());
+  f.dump_int("scheduler", scheduler.request_count());
+  f.close_section();
+
+  // client map and queue tops (res, wgt, lim)
+  std::ostringstream out;
+  f.open_object_section("mClockClients");
+  f.dump_int("client_count", scheduler.client_count());
+  out << scheduler;
+  f.dump_string("clients", out.str());
+  f.close_section();
+
+  // Display sorted queues (res, wgt, lim)
+  f.open_object_section("mClockQueues");
+  f.dump_string("queues", display_queues());
+  f.close_section();
 }
 
 void mClockScheduler::enqueue(OpSchedulerItem&& item)
@@ -398,12 +425,29 @@ void mClockScheduler::enqueue(OpSchedulerItem&& item)
     immediate.push_front(std::move(item));
   } else {
     int cost = calc_scaled_cost(item.get_cost());
+    item.set_qos_cost(cost);
+    dout(20) << __func__ << " " << id
+             << " item_cost: " << item.get_cost()
+             << " scaled_cost: " << cost
+             << dendl;
+
     // Add item to scheduler queue
     scheduler.add_request(
       std::move(item),
       id,
       cost);
   }
+
+ dout(20) << __func__ << " client_count: " << scheduler.client_count()
+          << " queue_sizes: [ imm: " << immediate.size()
+          << " sched: " << scheduler.request_count() << " ]"
+          << dendl;
+ dout(30) << __func__ << " mClockClients: "
+          << scheduler
+          << dendl;
+ dout(30) << __func__ << " mClockQueues: { "
+          << display_queues() << " }"
+          << dendl;
 }
 
 void mClockScheduler::enqueue_front(OpSchedulerItem&& item)
@@ -436,6 +480,13 @@ WorkItem mClockScheduler::dequeue()
   }
 }
 
+std::string mClockScheduler::display_queues() const
+{
+  std::ostringstream out;
+  scheduler.display_queues(out);
+  return out.str();
+}
+
 const char** mClockScheduler::get_tracked_conf_keys() const
 {
   static const char* KEYS[] = {