]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
Merge pull request #5793 from yuyuyu101/impl-perf
authorSage Weil <sage@redhat.com>
Thu, 26 Nov 2015 22:26:05 +0000 (17:26 -0500)
committerSage Weil <sage@redhat.com>
Thu, 26 Nov 2015 22:26:05 +0000 (17:26 -0500)
osd: add osd op queue latency perfcounter

Reviewed-by: Sage Weil <sage@redhat.com>
1  2 
src/msg/Messenger.h
src/os/FileStore.cc
src/os/KeyValueStore.cc
src/osd/OSD.cc
src/osd/OSD.h
src/osd/ReplicatedPG.cc

Simple merge
index 3cfb13f1cefea371cfb43a3f19b30fec182ada29,736bccf6accc4d9035558fb40ba05559aed5903e..4134c0d4b81d8d2059e843084a5256c7175e0e6e
@@@ -1960,18 -1927,19 +1956,19 @@@ int FileStore::queue_transactions(Seque
      return 0;
    }
  
+   utime_t start = ceph_clock_now(g_ceph_context);
    // set up the sequencer
    OpSequencer *osr;
 -  if (!posr)
 -    posr = &default_osr;
 +  assert(posr);
    if (posr->p) {
      osr = static_cast<OpSequencer *>(posr->p.get());
 -    dout(5) << "queue_transactions existing " << *osr << "/" << osr->parent << dendl; //<< " w/ q " << osr->q << dendl;
 +    dout(5) << "queue_transactions existing " << osr << " " << *osr << dendl;
    } else {
 -    osr = new OpSequencer;
 +    osr = new OpSequencer(next_osr_id.inc());
 +    osr->set_cct(g_ceph_context);
      osr->parent = posr;
      posr->p = osr;
 -    dout(5) << "queue_transactions new " << *osr << "/" << osr->parent << dendl;
 +    dout(5) << "queue_transactions new " << osr << " " << *osr << dendl;
    }
  
    // used to include osr information in tracepoints during transaction apply
Simple merge
diff --cc src/osd/OSD.cc
Simple merge
diff --cc src/osd/OSD.h
Simple merge
index 64c77a4850b7e0d651c22e1d2798588f0bac715e,9f875e8704f22c85c4905906c44e4caf9f163933..92201d0d6a97100b2bfda16bfb1086d4c0bb4b32
@@@ -2015,30 -1916,28 +2015,40 @@@ void ReplicatedPG::do_op(OpRequestRef& 
    ctx->src_obc.swap(src_obc);
  
    execute_ctx(ctx);
+   utime_t prepare_latency = ceph_clock_now(cct);
+   prepare_latency -= op->get_dequeued_time();
+   osd->logger->tinc(l_osd_op_prepare_lat, prepare_latency);
+   if (op->may_read() && op->may_write()) {
+     osd->logger->tinc(l_osd_op_rw_prepare_lat, prepare_latency);
+   } else if (op->may_read()) {
+     osd->logger->tinc(l_osd_op_r_prepare_lat, prepare_latency);
+   } else if (op->may_write() || op->may_cache()) {
+     osd->logger->tinc(l_osd_op_w_prepare_lat, prepare_latency);
+   }
  }
  
 -bool ReplicatedPG::maybe_handle_cache(OpRequestRef op,
 -                                    bool write_ordered,
 -                                    ObjectContextRef obc,
 -                                      int r, const hobject_t& missing_oid,
 -                                    bool must_promote,
 -                                    bool in_hit_set)
 -{
 +ReplicatedPG::cache_result_t ReplicatedPG::maybe_handle_cache_detail(
 +  OpRequestRef op,
 +  bool write_ordered,
 +  ObjectContextRef obc,
 +  int r, hobject_t missing_oid,
 +  bool must_promote,
 +  bool in_hit_set,
 +  ObjectContextRef *promote_obc)
 +{
 +  if (op &&
 +      op->get_req() &&
 +      op->get_req()->get_type() == CEPH_MSG_OSD_OP &&
 +      (static_cast<MOSDOp *>(op->get_req())->get_flags() &
 +       CEPH_OSD_FLAG_IGNORE_CACHE)) {
 +    dout(20) << __func__ << ": ignoring cache due to flag" << dendl;
 +    return cache_result_t::NOOP;
 +  }
    // return quickly if caching is not enabled
    if (pool.info.cache_mode == pg_pool_t::CACHEMODE_NONE)
 -    return false;
 +    return cache_result_t::NOOP;
 +
 +  must_promote = must_promote || op->need_promote();
  
    if (obc)
      dout(25) << __func__ << " " << obc->obs.oi << " "