]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
src/OSD: add more useful perf counters for performance tuning. 15915/head
authorPan Liu <wanjun.lp@alibaba-inc.com>
Mon, 26 Jun 2017 15:43:23 +0000 (23:43 +0800)
committerPan Liu <wanjun.lp@alibaba-inc.com>
Mon, 26 Jun 2017 15:43:23 +0000 (23:43 +0800)
Signed-off-by: Pan Liu <wanjun.lp@alibaba-inc.com>
src/os/filestore/FileStore.cc
src/os/filestore/FileStore.h
src/osd/OSD.cc
src/osd/OSD.h

index 1fb4839455ee6d7eb2e61598dc983f4cbf3c53e4..39caf0a25a6d357f7f710a90a58c7470c3c6c45f 100644 (file)
@@ -629,6 +629,7 @@ FileStore::FileStore(CephContext* cct, const std::string &base,
   plb.add_time_avg(l_filestore_commitcycle_latency, "commitcycle_latency", "Average latency of commit");
   plb.add_u64_counter(l_filestore_journal_full, "journal_full", "Journal writes while full");
   plb.add_time_avg(l_filestore_queue_transaction_latency_avg, "queue_transaction_latency_avg", "Store operation queue latency");
+  plb.add_time(l_filestore_sync_pause_max_lat, "sync_pause_max_latency", "Max latency of op_wq pause before syncfs");
 
   logger = plb.create_perf_counters();
 
@@ -4010,8 +4011,7 @@ void FileStore::sync_entry()
          }
          dout(20) << " done waiting for checkpoint " << cid << " to complete" << dendl;
        }
-      } else
-      {
+      } else {
        apply_manager.commit_started();
        op_tp.unpause();
 
@@ -4043,6 +4043,10 @@ void FileStore::sync_entry()
       utime_t lat = done - start;
       utime_t dur = done - startwait;
       dout(10) << __FUNC__ << ": commit took " << lat << ", interval was " << dur << dendl;
+      utime_t max_pause_lat = logger->tget(l_filestore_sync_pause_max_lat);
+      if (max_pause_lat == utime_t() || max_pause_lat < dur - lat) {
+        logger->tinc(l_filestore_sync_pause_max_lat, dur - lat);
+      }
 
       logger->inc(l_filestore_commitcycle);
       logger->tinc(l_filestore_commitcycle_latency, lat);
index 88a1d3170d08bb0e0fd3dad151117406b6f147a6..b99316f78d54b64ac0b0f12f462065d1be03663b 100644 (file)
@@ -94,6 +94,7 @@ enum {
   l_filestore_bytes,
   l_filestore_apply_latency,
   l_filestore_queue_transaction_latency_avg,
+  l_filestore_sync_pause_max_lat,
   l_filestore_last,
 };
 
index 8e860a37e31cf488656e26efcfc4ed598cab19c6..6f7a61e882ef9ca13d1baad01c5eff694f8856c4 100644 (file)
@@ -2964,6 +2964,11 @@ void OSD::create_logger()
     l_osd_op_rw_prepare_lat, "op_rw_prepare_latency",
     "Latency of read-modify-write operations (excluding queue time and wait for finished)");
 
+  osd_plb.add_time_avg(l_osd_op_before_queue_op_lat, "op_before_queue_op_lat",
+    "Latency of IO before calling queue(before really queue into ShardedOpWq)"); // client io before queue op_wq latency
+  osd_plb.add_time_avg(l_osd_op_before_dequeue_op_lat, "op_before_dequeue_op_lat",
+    "Latency of IO before calling dequeue_op(already dequeued and get PG lock)"); // client io before dequeue_op latency
+
   osd_plb.add_u64_counter(
     l_osd_sop, "subop", "Suboperations");
   osd_plb.add_u64_counter(
@@ -9211,6 +9216,7 @@ void OSD::enqueue_op(spg_t pg, OpRequestRef& op, epoch_t epoch)
   op->osd_trace.keyval("priority", op->get_req()->get_priority());
   op->osd_trace.keyval("cost", op->get_req()->get_cost());
   op->mark_queued_for_pg();
+  logger->tinc(l_osd_op_before_queue_op_lat, latency);
   op_shardedwq.queue(make_pair(pg, PGQueueable(op, epoch)));
 }
 
@@ -9235,6 +9241,8 @@ void OSD::dequeue_op(
           << " " << *(op->get_req())
           << " pg " << *pg << dendl;
 
+  logger->tinc(l_osd_op_before_dequeue_op_lat, latency);
+
   Session *session = static_cast<Session *>(
     op->get_req()->get_connection()->get_priv());
   if (session) {
index 12a9d774c75e08e061be8a6ab819db7704a91aee..4a866f190f2d983879f5dceac6cbbc10ec78c1f5 100644 (file)
@@ -90,6 +90,9 @@ enum {
   l_osd_op_rw_process_lat,
   l_osd_op_rw_prepare_lat,
 
+  l_osd_op_before_queue_op_lat,
+  l_osd_op_before_dequeue_op_lat,
+
   l_osd_sop,
   l_osd_sop_inb,
   l_osd_sop_lat,