From: Haomai Wang Date: Thu, 3 Sep 2015 15:04:57 +0000 (+0800) Subject: OSD: Add perf counter to count osd thread prepare latency X-Git-Tag: v10.0.2~175^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=834842c27cb36da8ae141fbadde11bbe6fdcc128;p=ceph.git OSD: Add perf counter to count osd thread prepare latency Signed-off-by: Haomai Wang --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index a98db3401d04..9a38bb085cb1 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -2116,6 +2116,8 @@ void OSD::create_logger() "Latency of client operations (including queue time)", "lat"); // client op latency osd_plb.add_time_avg(l_osd_op_process_lat, "op_process_latency", "Latency of client operations (excluding queue time)"); // client op process latency + osd_plb.add_time_avg(l_osd_op_prepare_lat, "op_prepare_latency", + "Latency of client operations (excluding queue time and wait for finished)"); // client op prepare latency osd_plb.add_u64_counter(l_osd_op_r, "op_r", "Client read operations"); // client reads @@ -2125,6 +2127,8 @@ void OSD::create_logger() "Latency of read operation (including queue time)"); // client read latency osd_plb.add_time_avg(l_osd_op_r_process_lat, "op_r_process_latency", "Latency of read operation (excluding queue time)"); // client read process latency + osd_plb.add_time_avg(l_osd_op_r_prepare_lat, "op_r_prepare_latency", + "Latency of read operations (excluding queue time and wait for finished)"); // client read prepare latency osd_plb.add_u64_counter(l_osd_op_w, "op_w", "Client write operations"); // client writes osd_plb.add_u64_counter(l_osd_op_w_inb, "op_w_in_bytes", @@ -2135,6 +2139,8 @@ void OSD::create_logger() "Latency of write operation (including queue time)"); // client write latency osd_plb.add_time_avg(l_osd_op_w_process_lat, "op_w_process_latency", "Latency of write operation (excluding queue time)"); // client write process latency + osd_plb.add_time_avg(l_osd_op_w_prepare_lat, "op_w_prepare_latency", + "Latency of write operations (excluding queue time and wait for finished)"); // client write prepare latency osd_plb.add_u64_counter(l_osd_op_rw, "op_rw", "Client read-modify-write operations"); // client rmw osd_plb.add_u64_counter(l_osd_op_rw_inb, "op_rw_in_bytes", @@ -2147,6 +2153,8 @@ void OSD::create_logger() "Latency of read-modify-write operation (including queue time)"); // client rmw latency osd_plb.add_time_avg(l_osd_op_rw_process_lat, "op_rw_process_latency", "Latency of read-modify-write operation (excluding queue time)"); // client rmw process latency + osd_plb.add_time_avg(l_osd_op_rw_prepare_lat, "op_rw_prepare_latency", + "Latency of read-modify-write operations (excluding queue time and wait for finished)"); // client rmw prepare latency osd_plb.add_u64_counter(l_osd_sop, "subop", "Suboperations"); // subops osd_plb.add_u64_counter(l_osd_sop_inb, "subop_in_bytes", "Suboperations total size"); // subop in bytes diff --git a/src/osd/OSD.h b/src/osd/OSD.h index 35cf7d1b6ece..f3546f682fec 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -66,21 +66,25 @@ enum { l_osd_op_outb, l_osd_op_lat, l_osd_op_process_lat, + l_osd_op_prepare_lat, l_osd_op_r, l_osd_op_r_outb, l_osd_op_r_lat, l_osd_op_r_process_lat, + l_osd_op_r_prepare_lat, l_osd_op_w, l_osd_op_w_inb, l_osd_op_w_rlat, l_osd_op_w_lat, l_osd_op_w_process_lat, + l_osd_op_w_prepare_lat, l_osd_op_rw, l_osd_op_rw_inb, l_osd_op_rw_outb, l_osd_op_rw_rlat, l_osd_op_rw_lat, l_osd_op_rw_process_lat, + l_osd_op_rw_prepare_lat, l_osd_sop, l_osd_sop_inb, diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 9485f0eae157..9f875e8704f2 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -1916,6 +1916,16 @@ void ReplicatedPG::do_op(OpRequestRef& op) 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,