From c87392ccb0a8d8c01d2c2e67891cbd0c5c191af1 Mon Sep 17 00:00:00 2001 From: Xiubo Li Date: Tue, 22 Dec 2020 10:14:25 +0800 Subject: [PATCH] mds: add scrub perf counters support Signed-off-by: Xiubo Li --- src/mds/CInode.cc | 18 +++++++++++++++++- src/mds/MDSRank.cc | 18 ++++++++++++++++++ src/mds/MDSRank.h | 8 ++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/mds/CInode.cc b/src/mds/CInode.cc index 3992224452bad..9dd18943cc328 100644 --- a/src/mds/CInode.cc +++ b/src/mds/CInode.cc @@ -4619,8 +4619,10 @@ void CInode::validate_disk_state(CInode::validated_data *results, fetch.getxattr("parent", bt, bt_r); in->mdcache->mds->objecter->read(oid, object_locator_t(pool), fetch, CEPH_NOSNAP, NULL, 0, fin); - if (in->mdcache->mds->logger) + if (in->mdcache->mds->logger) { in->mdcache->mds->logger->inc(l_mds_openino_backtrace_fetch); + in->mdcache->mds->logger->inc(l_mds_scrub_backtrace_fetch); + } using ceph::encode; if (!is_internal) { @@ -4632,6 +4634,8 @@ void CInode::validate_disk_state(CInode::validated_data *results, in->mdcache->mds->objecter->mutate(oid, object_locator_t(pool), scrub_tag, snapc, ceph::real_clock::now(), 0, NULL); + if (in->mdcache->mds->logger) + in->mdcache->mds->logger->inc(l_mds_scrub_set_tag); } } @@ -4732,6 +4736,8 @@ next: false); // Flag that we repaired this BT so that it won't go into damagetable results->backtrace.repaired = true; + if (in->mdcache->mds->logger) + in->mdcache->mds->logger->inc(l_mds_scrub_backtrace_repaired); } // If the inode's number was free in the InoTable, fix that @@ -4753,6 +4759,8 @@ next: clog->error() << "inode table repaired for inode: " << in->ino(); inotable->save(); + if (in->mdcache->mds->logger) + in->mdcache->mds->logger->inc(l_mds_scrub_inotable_repaired); } else { clog->error() << "Cannot repair inotable while other operations" " are in progress"; @@ -4763,8 +4771,12 @@ next: if (in->is_dir()) { + if (in->mdcache->mds->logger) + in->mdcache->mds->logger->inc(l_mds_scrub_dir_inodes); return validate_directory_data(); } else { + if (in->mdcache->mds->logger) + in->mdcache->mds->logger->inc(l_mds_scrub_file_inodes); // TODO: validate on-disk inode for normal files return true; } @@ -4780,9 +4792,13 @@ next: in->mdcache->num_shadow_inodes++; } shadow_in->fetch(get_internal_callback(INODE)); + if (in->mdcache->mds->logger) + in->mdcache->mds->logger->inc(l_mds_scrub_dir_base_inodes); return false; } else { // TODO: validate on-disk inode for non-base directories + if (in->mdcache->mds->logger) + in->mdcache->mds->logger->inc(l_mds_scrub_dirfrag_rstats); results->inode.passed = true; return check_dirfrag_rstats(); } diff --git a/src/mds/MDSRank.cc b/src/mds/MDSRank.cc index 2f903a19bab9f..11a07d68c4e39 100644 --- a/src/mds/MDSRank.cc +++ b/src/mds/MDSRank.cc @@ -3353,6 +3353,24 @@ void MDSRank::create_logger() mds_plb.add_u64_counter(l_mds_openino_peer_discover, "openino_peer_discover", "OpenIno peer inode discovers"); + // scrub stats + mds_plb.add_u64(l_mds_scrub_backtrace_fetch, "scrub_backtrace_fetch", + "Scrub backtrace fetchings"); + mds_plb.add_u64(l_mds_scrub_set_tag, "scrub_set_tag", + "Scrub set tags"); + mds_plb.add_u64(l_mds_scrub_backtrace_repaired, "scrub_backtrace_repaired", + "Scrub backtraces repaired"); + mds_plb.add_u64(l_mds_scrub_inotable_repaired, "scrub_inotable_repaired", + "Scrub inotable repaired"); + mds_plb.add_u64(l_mds_scrub_dir_inodes, "scrub_dir_inodes", + "Scrub directory inodes"); + mds_plb.add_u64(l_mds_scrub_dir_base_inodes, "scrub_dir_base_inodes", + "Scrub directory base inodes"); + mds_plb.add_u64(l_mds_scrub_dirfrag_rstats, "scrub_dirfrag_rstats", + "Scrub dirfrags rstates"); + mds_plb.add_u64(l_mds_scrub_file_inodes, "scrub_file_inodes", + "Scrub file inodes"); + logger = mds_plb.create_perf_counters(); g_ceph_context->get_perfcounters_collection()->add(logger); } diff --git a/src/mds/MDSRank.h b/src/mds/MDSRank.h index 8cbd41ae33079..8d0027820f4ce 100644 --- a/src/mds/MDSRank.h +++ b/src/mds/MDSRank.h @@ -84,6 +84,14 @@ enum { l_mds_root_rfiles, l_mds_root_rbytes, l_mds_root_rsnaps, + l_mds_scrub_backtrace_fetch, + l_mds_scrub_set_tag, + l_mds_scrub_backtrace_repaired, + l_mds_scrub_inotable_repaired, + l_mds_scrub_dir_inodes, + l_mds_scrub_dir_base_inodes, + l_mds_scrub_dirfrag_rstats, + l_mds_scrub_file_inodes, l_mdss_handle_inode_file_caps, l_mdss_ceph_cap_op_revoke, l_mdss_ceph_cap_op_grant, -- 2.39.5