From: Sage Weil Date: Thu, 26 Nov 2015 22:26:05 +0000 (-0500) Subject: Merge pull request #5793 from yuyuyu101/impl-perf X-Git-Tag: v10.0.2~175 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b7eb16786156a37f185315234bea4e51379d0343;p=ceph.git Merge pull request #5793 from yuyuyu101/impl-perf osd: add osd op queue latency perfcounter Reviewed-by: Sage Weil --- b7eb16786156a37f185315234bea4e51379d0343 diff --cc src/os/FileStore.cc index 3cfb13f1cefe,736bccf6accc..4134c0d4b81d --- a/src/os/FileStore.cc +++ b/src/os/FileStore.cc @@@ -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(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 diff --cc src/osd/ReplicatedPG.cc index 64c77a4850b7,9f875e8704f2..92201d0d6a97 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@@ -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(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 << " "