Merge PR #18849 into master

* refs/pull/18849/head:
	mds:improve mds perf counters can statistics filesystem operations number and latency

Reviewed-by: Patrick Donnelly <pdonnell@redhat.com>
This commit is contained in:
Patrick Donnelly 2017-12-05 22:35:57 -08:00
commit b50e9b8187
No known key found for this signature in database
GPG Key ID: 3A2A7E25BEA8AADB
2 changed files with 181 additions and 171 deletions

View File

@ -116,62 +116,62 @@ void Server::create_logger()
"Client session messages", "hcs", PerfCountersBuilder::PRIO_INTERESTING);
plb.add_u64_counter(l_mdss_dispatch_client_request, "dispatch_client_request", "Client requests dispatched");
plb.add_u64_counter(l_mdss_dispatch_slave_request, "dispatch_server_request", "Server requests dispatched");
plb.add_u64_counter(l_mdss_req_lookuphash, "req_lookuphash",
"Request type lookup hash of inode");
plb.add_u64_counter(l_mdss_req_lookupino, "req_lookupino",
"Request type lookup inode");
plb.add_u64_counter(l_mdss_req_lookupparent, "req_lookupparent",
"Request type lookup parent");
plb.add_u64_counter(l_mdss_req_lookupname, "req_lookupname",
"Request type lookup name");
plb.add_u64_counter(l_mdss_req_lookup, "req_lookup",
"Request type lookup");
plb.add_u64_counter(l_mdss_req_lookupsnap, "req_lookupsnap",
"Request type lookup snapshot");
plb.add_u64_counter(l_mdss_req_getattr, "req_getattr",
"Request type get attribute");
plb.add_u64_counter(l_mdss_req_setattr, "req_setattr",
"Request type set attribute");
plb.add_u64_counter(l_mdss_req_setlayout, "req_setlayout",
"Request type set file layout");
plb.add_u64_counter(l_mdss_req_setdirlayout, "req_setdirlayout",
"Request type set directory layout");
plb.add_u64_counter(l_mdss_req_setxattr, "req_setxattr",
"Request type set extended attribute");
plb.add_u64_counter(l_mdss_req_rmxattr, "req_rmxattr",
"Request type remove extended attribute");
plb.add_u64_counter(l_mdss_req_readdir, "req_readdir",
"Request type read directory");
plb.add_u64_counter(l_mdss_req_setfilelock, "req_setfilelock",
"Request type set file lock");
plb.add_u64_counter(l_mdss_req_getfilelock, "req_getfilelock",
"Request type get file lock");
plb.add_u64_counter(l_mdss_req_create, "req_create",
"Request type create");
plb.add_u64_counter(l_mdss_req_open, "req_open",
"Request type open");
plb.add_u64_counter(l_mdss_req_mknod, "req_mknod",
"Request type make node");
plb.add_u64_counter(l_mdss_req_link, "req_link",
"Request type link");
plb.add_u64_counter(l_mdss_req_unlink, "req_unlink",
"Request type unlink");
plb.add_u64_counter(l_mdss_req_rmdir, "req_rmdir",
"Request type remove directory");
plb.add_u64_counter(l_mdss_req_rename, "req_rename",
"Request type rename");
plb.add_u64_counter(l_mdss_req_mkdir, "req_mkdir",
"Request type make directory");
plb.add_u64_counter(l_mdss_req_symlink, "req_symlink",
"Request type symbolic link");
plb.add_u64_counter(l_mdss_req_lssnap, "req_lssnap",
"Request type list snapshot");
plb.add_u64_counter(l_mdss_req_mksnap, "req_mksnap",
"Request type make snapshot");
plb.add_u64_counter(l_mdss_req_rmsnap, "req_rmsnap",
"Request type remove snapshot");
plb.add_u64_counter(l_mdss_req_renamesnap, "req_renamesnap",
"Request type rename snapshot");
plb.add_time_avg(l_mdss_req_lookuphash_latency, "req_lookuphash_latency",
"Request type lookup hash of inode latency");
plb.add_time_avg(l_mdss_req_lookupino_latency, "req_lookupino_latency",
"Request type lookup inode latency");
plb.add_time_avg(l_mdss_req_lookupparent_latency, "req_lookupparent_latency",
"Request type lookup parent latency");
plb.add_time_avg(l_mdss_req_lookupname_latency, "req_lookupname_latency",
"Request type lookup name latency");
plb.add_time_avg(l_mdss_req_lookup_latency, "req_lookup_latency",
"Request type lookup latency");
plb.add_time_avg(l_mdss_req_lookupsnap_latency, "req_lookupsnap_latency",
"Request type lookup snapshot latency");
plb.add_time_avg(l_mdss_req_getattr_latency, "req_getattr_latency",
"Request type get attribute latency");
plb.add_time_avg(l_mdss_req_setattr_latency, "req_setattr_latency",
"Request type set attribute latency");
plb.add_time_avg(l_mdss_req_setlayout_latency, "req_setlayout_latency",
"Request type set file layout latency");
plb.add_time_avg(l_mdss_req_setdirlayout_latency, "req_setdirlayout_latency",
"Request type set directory layout latency");
plb.add_time_avg(l_mdss_req_setxattr_latency, "req_setxattr_latency",
"Request type set extended attribute latency");
plb.add_time_avg(l_mdss_req_rmxattr_latency, "req_rmxattr_latency",
"Request type remove extended attribute latency");
plb.add_time_avg(l_mdss_req_readdir_latency, "req_readdir_latency",
"Request type read directory latency");
plb.add_time_avg(l_mdss_req_setfilelock_latency, "req_setfilelock_latency",
"Request type set file lock latency");
plb.add_time_avg(l_mdss_req_getfilelock_latency, "req_getfilelock_latency",
"Request type get file lock latency");
plb.add_time_avg(l_mdss_req_create_latency, "req_create_latency",
"Request type create latency");
plb.add_time_avg(l_mdss_req_open_latency, "req_open_latency",
"Request type open latency");
plb.add_time_avg(l_mdss_req_mknod_latency, "req_mknod_latency",
"Request type make node latency");
plb.add_time_avg(l_mdss_req_link_latency, "req_link_latency",
"Request type link latency");
plb.add_time_avg(l_mdss_req_unlink_latency, "req_unlink_latency",
"Request type unlink latency");
plb.add_time_avg(l_mdss_req_rmdir_latency, "req_rmdir_latency",
"Request type remove directory latency");
plb.add_time_avg(l_mdss_req_rename_latency, "req_rename_latency",
"Request type rename latency");
plb.add_time_avg(l_mdss_req_mkdir_latency, "req_mkdir_latency",
"Request type make directory latency");
plb.add_time_avg(l_mdss_req_symlink_latency, "req_symlink_latency",
"Request type symbolic link latency");
plb.add_time_avg(l_mdss_req_lssnap_latency, "req_lssnap_latency",
"Request type list snapshot latency");
plb.add_time_avg(l_mdss_req_mksnap_latency, "req_mksnap_latency",
"Request type make snapshot latency");
plb.add_time_avg(l_mdss_req_rmsnap_latency, "req_rmsnap_latency",
"Request type remove snapshot latency");
plb.add_time_avg(l_mdss_req_renamesnap_latency, "req_renamesnap_latency",
"Request type rename snapshot latency");
logger = plb.create_perf_counters();
g_ceph_context->get_perfcounters_collection()->add(logger);
}
@ -1194,93 +1194,6 @@ void Server::respond_to_request(MDRequestRef& mdr, int r)
{
if (mdr->client_request) {
reply_client_request(mdr, new MClientReply(mdr->client_request, r));
// add here to avoid counting ops multiple times (e.g., locks, loading)
switch(mdr->client_request->get_op()) {
case CEPH_MDS_OP_LOOKUPHASH:
logger->inc(l_mdss_req_lookuphash);
break;
case CEPH_MDS_OP_LOOKUPINO:
logger->inc(l_mdss_req_lookupino);
break;
case CEPH_MDS_OP_LOOKUPPARENT:
logger->inc(l_mdss_req_lookupparent);
break;
case CEPH_MDS_OP_LOOKUPNAME:
logger->inc(l_mdss_req_lookupname);
break;
case CEPH_MDS_OP_LOOKUP:
logger->inc(l_mdss_req_lookup);
break;
case CEPH_MDS_OP_LOOKUPSNAP:
logger->inc(l_mdss_req_lookupsnap);
break;
case CEPH_MDS_OP_GETATTR:
logger->inc(l_mdss_req_getattr);
break;
case CEPH_MDS_OP_SETATTR:
logger->inc(l_mdss_req_setattr);
break;
case CEPH_MDS_OP_SETLAYOUT:
logger->inc(l_mdss_req_setlayout);
break;
case CEPH_MDS_OP_SETDIRLAYOUT:
logger->inc(l_mdss_req_setdirlayout);
break;
case CEPH_MDS_OP_SETXATTR:
logger->inc(l_mdss_req_setxattr);
break;
case CEPH_MDS_OP_RMXATTR:
logger->inc(l_mdss_req_rmxattr);
break;
case CEPH_MDS_OP_READDIR:
logger->inc(l_mdss_req_readdir);
break;
case CEPH_MDS_OP_SETFILELOCK:
logger->inc(l_mdss_req_setfilelock);
break;
case CEPH_MDS_OP_GETFILELOCK:
logger->inc(l_mdss_req_getfilelock);
break;
case CEPH_MDS_OP_CREATE:
logger->inc(l_mdss_req_create);
case CEPH_MDS_OP_OPEN:
logger->inc(l_mdss_req_open);
break;
case CEPH_MDS_OP_MKNOD:
logger->inc(l_mdss_req_mknod);
break;
case CEPH_MDS_OP_LINK:
logger->inc(l_mdss_req_link);
break;
case CEPH_MDS_OP_UNLINK:
logger->inc(l_mdss_req_unlink);
break;
case CEPH_MDS_OP_RMDIR:
logger->inc(l_mdss_req_rmdir);
break;
case CEPH_MDS_OP_RENAME:
logger->inc(l_mdss_req_rename);
break;
case CEPH_MDS_OP_MKDIR:
logger->inc(l_mdss_req_mkdir);
break;
case CEPH_MDS_OP_SYMLINK:
logger->inc(l_mdss_req_symlink);
break;
case CEPH_MDS_OP_LSSNAP:
logger->inc(l_mdss_req_lssnap);
break;
case CEPH_MDS_OP_MKSNAP:
logger->inc(l_mdss_req_mksnap);
break;
case CEPH_MDS_OP_RMSNAP:
logger->inc(l_mdss_req_rmsnap);
break;
case CEPH_MDS_OP_RENAMESNAP:
logger->inc(l_mdss_req_renamesnap);
break;
}
} else if (mdr->internal_op > -1) {
dout(10) << "respond_to_request on internal request " << mdr << dendl;
if (!mdr->internal_op_finish)
@ -1290,6 +1203,100 @@ void Server::respond_to_request(MDRequestRef& mdr, int r)
}
}
// statistics mds req op number and latency
void Server::perf_gather_op_latency(const MClientRequest* req, utime_t lat)
{
int code = l_mdss_first;
switch(req->get_op()) {
case CEPH_MDS_OP_LOOKUPHASH:
code = l_mdss_req_lookuphash_latency;
break;
case CEPH_MDS_OP_LOOKUPINO:
code = l_mdss_req_lookupino_latency;
break;
case CEPH_MDS_OP_LOOKUPPARENT:
code = l_mdss_req_lookupparent_latency;
break;
case CEPH_MDS_OP_LOOKUPNAME:
code = l_mdss_req_lookupname_latency;
break;
case CEPH_MDS_OP_LOOKUP:
code = l_mdss_req_lookup_latency;
break;
case CEPH_MDS_OP_LOOKUPSNAP:
code = l_mdss_req_lookupsnap_latency;
break;
case CEPH_MDS_OP_GETATTR:
code = l_mdss_req_getattr_latency;
break;
case CEPH_MDS_OP_SETATTR:
code = l_mdss_req_setattr_latency;
break;
case CEPH_MDS_OP_SETLAYOUT:
code = l_mdss_req_setlayout_latency;
break;
case CEPH_MDS_OP_SETDIRLAYOUT:
code = l_mdss_req_setdirlayout_latency;
break;
case CEPH_MDS_OP_SETXATTR:
code = l_mdss_req_setxattr_latency;
break;
case CEPH_MDS_OP_RMXATTR:
code = l_mdss_req_rmxattr_latency;
break;
case CEPH_MDS_OP_READDIR:
code = l_mdss_req_readdir_latency;
break;
case CEPH_MDS_OP_SETFILELOCK:
code = l_mdss_req_setfilelock_latency;
break;
case CEPH_MDS_OP_GETFILELOCK:
code = l_mdss_req_getfilelock_latency;
break;
case CEPH_MDS_OP_CREATE:
code = l_mdss_req_create_latency;
break;
case CEPH_MDS_OP_OPEN:
code = l_mdss_req_open_latency;
break;
case CEPH_MDS_OP_MKNOD:
code = l_mdss_req_mknod_latency;
break;
case CEPH_MDS_OP_LINK:
code = l_mdss_req_link_latency;
break;
case CEPH_MDS_OP_UNLINK:
code = l_mdss_req_unlink_latency;
break;
case CEPH_MDS_OP_RMDIR:
code = l_mdss_req_rmdir_latency;
break;
case CEPH_MDS_OP_RENAME:
code = l_mdss_req_rename_latency;
break;
case CEPH_MDS_OP_MKDIR:
code = l_mdss_req_mkdir_latency;
break;
case CEPH_MDS_OP_SYMLINK:
code = l_mdss_req_symlink_latency;
break;
case CEPH_MDS_OP_LSSNAP:
code = l_mdss_req_lssnap_latency;
break;
case CEPH_MDS_OP_MKSNAP:
code = l_mdss_req_mksnap_latency;
break;
case CEPH_MDS_OP_RMSNAP:
code = l_mdss_req_rmsnap_latency;
break;
case CEPH_MDS_OP_RENAMESNAP:
code = l_mdss_req_renamesnap_latency;
break;
default: ceph_abort();
}
logger->tinc(code, lat);
}
void Server::early_reply(MDRequestRef& mdr, CInode *tracei, CDentry *tracedn)
{
if (!g_conf->mds_early_reply)
@ -1353,6 +1360,7 @@ void Server::early_reply(MDRequestRef& mdr, CInode *tracei, CDentry *tracedn)
mds->logger->inc(l_mds_reply);
utime_t lat = ceph_clock_now() - req->get_recv_stamp();
mds->logger->tinc(l_mds_reply_latency, lat);
perf_gather_op_latency(req, lat);
dout(20) << "lat " << lat << dendl;
mdr->mark_event("early_replied");
@ -1409,6 +1417,7 @@ void Server::reply_client_request(MDRequestRef& mdr, MClientReply *reply)
mds->logger->inc(l_mds_reply);
utime_t lat = ceph_clock_now() - mdr->client_request->get_recv_stamp();
mds->logger->tinc(l_mds_reply_latency, lat);
perf_gather_op_latency(req, lat);
dout(20) << "lat " << lat << dendl;
if (tracei)

View File

@ -36,34 +36,34 @@ enum {
l_mdss_handle_client_request,
l_mdss_handle_client_session,
l_mdss_handle_slave_request,
l_mdss_req_create,
l_mdss_req_getattr,
l_mdss_req_getfilelock,
l_mdss_req_link,
l_mdss_req_lookup,
l_mdss_req_lookuphash,
l_mdss_req_lookupino,
l_mdss_req_lookupname,
l_mdss_req_lookupparent,
l_mdss_req_lookupsnap,
l_mdss_req_lssnap,
l_mdss_req_mkdir,
l_mdss_req_mknod,
l_mdss_req_mksnap,
l_mdss_req_open,
l_mdss_req_readdir,
l_mdss_req_rename,
l_mdss_req_renamesnap,
l_mdss_req_rmdir,
l_mdss_req_rmsnap,
l_mdss_req_rmxattr,
l_mdss_req_setattr,
l_mdss_req_setdirlayout,
l_mdss_req_setfilelock,
l_mdss_req_setlayout,
l_mdss_req_setxattr,
l_mdss_req_symlink,
l_mdss_req_unlink,
l_mdss_req_create_latency,
l_mdss_req_getattr_latency,
l_mdss_req_getfilelock_latency,
l_mdss_req_link_latency,
l_mdss_req_lookup_latency,
l_mdss_req_lookuphash_latency,
l_mdss_req_lookupino_latency,
l_mdss_req_lookupname_latency,
l_mdss_req_lookupparent_latency,
l_mdss_req_lookupsnap_latency,
l_mdss_req_lssnap_latency,
l_mdss_req_mkdir_latency,
l_mdss_req_mknod_latency,
l_mdss_req_mksnap_latency,
l_mdss_req_open_latency,
l_mdss_req_readdir_latency,
l_mdss_req_rename_latency,
l_mdss_req_renamesnap_latency,
l_mdss_req_rmdir_latency,
l_mdss_req_rmsnap_latency,
l_mdss_req_rmxattr_latency,
l_mdss_req_setattr_latency,
l_mdss_req_setdirlayout_latency,
l_mdss_req_setfilelock_latency,
l_mdss_req_setlayout_latency,
l_mdss_req_setxattr_latency,
l_mdss_req_symlink_latency,
l_mdss_req_unlink_latency,
l_mdss_last,
};
@ -144,6 +144,7 @@ public:
void submit_mdlog_entry(LogEvent *le, MDSLogContextBase *fin,
MDRequestRef& mdr, const char *evt);
void dispatch_client_request(MDRequestRef& mdr);
void perf_gather_op_latency(const MClientRequest* req, utime_t lat);
void early_reply(MDRequestRef& mdr, CInode *tracei, CDentry *tracedn);
void respond_to_request(MDRequestRef& mdr, int r = 0);
void set_trace_dist(Session *session, MClientReply *reply, CInode *in, CDentry *dn,