ceph: add metadata perf metric support
Add a new "r_ended" field to struct ceph_mds_request and use that to maintain the average latency of MDS requests. URL: https://tracker.ceph.com/issues/43215 Signed-off-by: Xiubo Li <xiubli@redhat.com> Reviewed-by: Jeff Layton <jlayton@kernel.org> Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
This commit is contained in:
@@ -10,6 +10,7 @@
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/ratelimit.h>
|
||||
#include <linux/bits.h>
|
||||
#include <linux/ktime.h>
|
||||
|
||||
#include "super.h"
|
||||
#include "mds_client.h"
|
||||
@@ -2201,6 +2202,7 @@ ceph_mdsc_create_request(struct ceph_mds_client *mdsc, int op, int mode)
|
||||
mutex_init(&req->r_fill_mutex);
|
||||
req->r_mdsc = mdsc;
|
||||
req->r_started = jiffies;
|
||||
req->r_start_latency = ktime_get();
|
||||
req->r_resend_mds = -1;
|
||||
INIT_LIST_HEAD(&req->r_unsafe_dir_item);
|
||||
INIT_LIST_HEAD(&req->r_unsafe_target_item);
|
||||
@@ -2547,6 +2549,8 @@ out:
|
||||
static void complete_request(struct ceph_mds_client *mdsc,
|
||||
struct ceph_mds_request *req)
|
||||
{
|
||||
req->r_end_latency = ktime_get();
|
||||
|
||||
if (req->r_callback)
|
||||
req->r_callback(mdsc, req);
|
||||
complete_all(&req->r_completion);
|
||||
@@ -3155,6 +3159,9 @@ out_err:
|
||||
|
||||
/* kick calling process */
|
||||
complete_request(mdsc, req);
|
||||
|
||||
ceph_update_metadata_latency(&mdsc->metric, req->r_start_latency,
|
||||
req->r_end_latency, err);
|
||||
out:
|
||||
ceph_mdsc_put_request(req);
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user