]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: update META_POP_READDIR/FETCH/STORE and cache_hit_rate for dump loads 42939/head
authorYongseok Oh <yongseok.oh@linecorp.com>
Thu, 8 Jul 2021 06:36:19 +0000 (15:36 +0900)
committerPatrick Donnelly <pdonnell@redhat.com>
Thu, 26 Aug 2021 16:31:46 +0000 (12:31 -0400)
Signed-off-by: Yongseok Oh <yongseok.oh@linecorp.com>
(cherry picked from commit 24e131a58ed255cb8f6845c020ab956450a5fc10)

src/mds/CDir.cc
src/mds/MDBalancer.cc
src/mds/MDBalancer.h
src/mds/Server.cc

index ef3e6a0d0c27f395ecd6c9f752ab389de917130d..8e78c1caa1f95bc4f0171c219fb33c3e0a901c3d 100644 (file)
@@ -28,6 +28,7 @@
 #include "Locker.h"
 #include "MDLog.h"
 #include "LogSegment.h"
+#include "MDBalancer.h"
 
 #include "common/bloom_filter.hpp"
 #include "include/Context.h"
@@ -1577,6 +1578,8 @@ void CDir::fetch(MDSContext *c, std::string_view want_dn, bool ignore_authpinnab
 
   if (mdcache->mds->logger) mdcache->mds->logger->inc(l_mds_dir_fetch);
 
+  mdcache->mds->balancer->hit_dir(this, META_POP_FETCH);
+
   std::set<dentry_key_t> empty;
   _omap_fetch(NULL, empty);
 }
@@ -1602,6 +1605,8 @@ void CDir::fetch(MDSContext *c, const std::set<dentry_key_t>& keys)
   auth_pin(this);
   if (mdcache->mds->logger) mdcache->mds->logger->inc(l_mds_dir_fetch);
 
+  mdcache->mds->balancer->hit_dir(this, META_POP_FETCH);
+
   _omap_fetch(c, keys);
 }
 
@@ -2552,6 +2557,8 @@ void CDir::_commit(version_t want, int op_prio)
   
   if (mdcache->mds->logger) mdcache->mds->logger->inc(l_mds_dir_commit);
 
+  mdcache->mds->balancer->hit_dir(this, META_POP_STORE);
+
   _omap_commit(op_prio);
 }
 
index 90e67127cb05338aa53b14ae038e8d8534df4a22..5ea313560da317c32758fae118f31314f5511fa5 100644 (file)
@@ -300,6 +300,8 @@ mds_load_t MDBalancer::get_load()
   }
 
   uint64_t num_requests = mds->get_num_requests();
+  uint64_t num_traverse = mds->logger->get(l_mds_traverse);
+  uint64_t num_traverse_hit = mds->logger->get(l_mds_traverse_hit);
 
   uint64_t cpu_time = 1;
   {
@@ -331,13 +333,17 @@ mds_load_t MDBalancer::get_load()
        load.req_rate = (num_requests - last_num_requests) / el;
       if (cpu_time > last_cpu_time)
        load.cpu_load_avg = (cpu_time - last_cpu_time) / el;
+      if (num_traverse > last_num_traverse && num_traverse_hit > last_num_traverse_hit)
+        load.cache_hit_rate = (double)(num_traverse_hit - last_num_traverse_hit) / (num_traverse - last_num_traverse);
     } else {
       auto p = mds_load.find(mds->get_nodeid());
       if (p != mds_load.end()) {
        load.req_rate = p->second.req_rate;
        load.cpu_load_avg = p->second.cpu_load_avg;
+       load.cache_hit_rate = p->second.cache_hit_rate;
       }
-      if (num_requests >= last_num_requests && cpu_time >= last_cpu_time)
+      if (num_requests >= last_num_requests && cpu_time >= last_cpu_time &&
+          num_traverse >= last_num_traverse && num_traverse_hit >= last_num_traverse_hit)
        update_last = false;
     }
   }
@@ -346,6 +352,8 @@ mds_load_t MDBalancer::get_load()
     last_num_requests = num_requests;
     last_cpu_time = cpu_time;
     last_get_load = now;
+    last_num_traverse = num_traverse;
+    last_num_traverse_hit = num_traverse_hit;
   }
 
   dout(15) << load << dendl;
index d8834fce43c91a2ad86d2289099e6e3499d5ba3b..d9172e565e1084542e299085a32047202d2fed4b 100644 (file)
@@ -137,6 +137,8 @@ private:
   time last_get_load = clock::zero();
   uint64_t last_num_requests = 0;
   uint64_t last_cpu_time = 0;
+  uint64_t last_num_traverse = 0;
+  uint64_t last_num_traverse_hit = 0;
 
   // Dirfrags which are marked to be passed on to MDCache::[split|merge]_dir
   // just as soon as a delayed context comes back and triggers it.
index 37aaef04a30ae8cff1323da8bd6298a0f088e507..75ee3bc90cd4eb1a99fd2419744e618dbcd780b0 100644 (file)
@@ -4757,7 +4757,7 @@ void Server::handle_client_readdir(MDRequestRef& mdr)
   mdr->reply_extra_bl = dirbl;
 
   // bump popularity.  NOTE: this doesn't quite capture it.
-  mds->balancer->hit_dir(dir, META_POP_IRD, -1, numfiles);
+  mds->balancer->hit_dir(dir, META_POP_READDIR, -1, numfiles);
   
   // reply
   mdr->tracei = diri;