]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
TrackedOp: optionally disable the actual tracking operations
authorGreg Farnum <greg@inktank.com>
Tue, 7 Jan 2014 18:05:57 +0000 (10:05 -0800)
committerGreg Farnum <greg@inktank.com>
Fri, 31 Jan 2014 23:54:40 +0000 (15:54 -0800)
To avoid op contention on global locks, optionally disable the
op tracking. Create an "osd_op_tracker" config to control it, then
in the OpTracker constructor set a bool. If it's set, the OpTracker
doesn't actually maintain its lists and avoids taking any locks. We
maintain the within-op tracking for now since it shouldn't contend,
but we can turn that off later on if we like.

Signed-off-by: Greg Farnum <greg@inktank.com>
src/common/TrackedOp.cc
src/common/TrackedOp.h
src/common/config_opts.h
src/osd/OSD.cc

index d1dbc1e71354cb8975b95ac182db46cda6e47355..4c940d308b1308d2f05ea8ec0d44d851f03ecc5c 100644 (file)
@@ -109,6 +109,8 @@ void OpTracker::dump_ops_in_flight(Formatter *f)
 
 void OpTracker::register_inflight_op(xlist<TrackedOp*>::item *i)
 {
+  if (!tracking_enabled)
+    return;
   Mutex::Locker locker(ops_in_flight_lock);
   ops_in_flight.push_back(i);
   ops_in_flight.back()->seq = seq++;
@@ -116,18 +118,22 @@ void OpTracker::register_inflight_op(xlist<TrackedOp*>::item *i)
 
 void OpTracker::unregister_inflight_op(TrackedOp *i)
 {
+  i->request->clear_data();
+
+  if (!tracking_enabled)
+    return;
+
   Mutex::Locker locker(ops_in_flight_lock);
   assert(i->xitem.get_list() == &ops_in_flight);
   utime_t now = ceph_clock_now(cct);
   i->xitem.remove_myself();
-  i->request->clear_data();
   history.insert(now, TrackedOpRef(i));
 }
 
 bool OpTracker::check_ops_in_flight(std::vector<string> &warning_vector)
 {
   Mutex::Locker locker(ops_in_flight_lock);
-  if (!ops_in_flight.size())
+  if (!ops_in_flight.size()) // this covers tracking_enabled, too
     return false;
 
   utime_t now = ceph_clock_now(cct);
@@ -217,6 +223,8 @@ void OpTracker::get_age_ms_histogram(pow2_hist_t *h)
 
 void OpTracker::mark_event(TrackedOp *op, const string &dest)
 {
+  if (!tracking_enabled)
+    return;
   utime_t now = ceph_clock_now(cct);
   return _mark_event(op, dest, now);
 }
@@ -232,6 +240,11 @@ void OpTracker::_mark_event(TrackedOp *op, const string &evt,
 }
 
 void OpTracker::RemoveOnDelete::operator()(TrackedOp *op) {
+  if (!tracker->tracking_enabled) {
+    op->request->clear_data();
+    delete op;
+    return;
+  }
   op->mark_event("done");
   tracker->unregister_inflight_op(op);
   // Do not delete op, unregister_inflight_op took control
index 99184821e2a3f121cfa6aebedf6af578c09fd7b9..97c657424e8b813be78185b634e6b9358a20e083 100644 (file)
@@ -67,9 +67,11 @@ class OpTracker {
   int log_threshold;
 
 public:
+  bool tracking_enabled;
   CephContext *cct;
-  OpTracker(CephContext *cct_) : seq(0), ops_in_flight_lock("OpTracker mutex"),
-      complaint_time(0), log_threshold(0), cct(cct_) {}
+  OpTracker(CephContext *cct_, bool tracking) : seq(0), ops_in_flight_lock("OpTracker mutex"),
+                                               complaint_time(0), log_threshold(0),
+                                               tracking_enabled(tracking), cct(cct_) {}
   void set_complaint_and_threshold(float time, int threshold) {
     complaint_time = time;
     log_threshold = threshold;
index 049b60d754ba11740345331a2d38eae683dff222..4cb596e9bd00e73b45205e0b37b8c60996181187 100644 (file)
@@ -501,6 +501,7 @@ OPTION(osd_debug_op_order, OPT_BOOL, false)
 OPTION(osd_debug_verify_snaps_on_info, OPT_BOOL, false)
 OPTION(osd_debug_verify_stray_on_activate, OPT_BOOL, false)
 OPTION(osd_debug_skip_full_check_in_backfill_reservation, OPT_BOOL, false)
+OPTION(osd_enable_op_tracker, OPT_BOOL, true) // enable/disable OSD op tracking
 OPTION(osd_op_history_size, OPT_U32, 20)    // Max number of completed ops to track
 OPTION(osd_op_history_duration, OPT_U32, 600) // Oldest completed op to track
 OPTION(osd_target_transaction_size, OPT_INT, 30)     // to adjust various transactions that batch smaller items
index 38bb17194a36f5ebeb87be8884fb67ff6e917849..8e870c3bc0f39c6193d716536bdf2f5f5a976c33 100644 (file)
@@ -818,7 +818,7 @@ OSD::OSD(CephContext *cct_, ObjectStore *store_,
   heartbeat_dispatcher(this),
   stat_lock("OSD::stat_lock"),
   finished_lock("OSD::finished_lock"),
-  op_tracker(cct),
+  op_tracker(cct, cct->_conf->osd_enable_op_tracker),
   test_ops_hook(NULL),
   op_wq(this, cct->_conf->osd_op_thread_timeout, &op_tp),
   peering_wq(this, cct->_conf->osd_op_thread_timeout, &op_tp),