]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: add perf counters for cache size
authorSage Weil <sage@redhat.com>
Mon, 3 Oct 2016 15:58:20 +0000 (11:58 -0400)
committerSage Weil <sage@redhat.com>
Mon, 3 Oct 2016 22:40:07 +0000 (18:40 -0400)
Onodes, buffers, buffer bytes.

Signed-off-by: Sage Weil <sage@redhat.com>
src/os/bluestore/BlueStore.cc
src/os/bluestore/BlueStore.h

index af36ac33ceb3846daf651dd8a8ffc9a793b469d1..2f680c012c2e56ca5a678caab42a6041f500fd7c 100644 (file)
@@ -2435,10 +2435,16 @@ void BlueStore::_init_logger()
   b.add_u64(l_bluestore_compressed_original, "bluestore_compressed_original",
     "Sum for original bytes that were compressed");
 
+  b.add_u64(l_bluestore_onodes, "bluestore_onodes",
+           "Number of onodes in cache");
   b.add_u64(l_bluestore_onode_hits, "bluestore_onode_hits",
     "Sum for onode-lookups hit in the cache");
   b.add_u64(l_bluestore_onode_misses, "bluestore_onode_misses",
     "Sum for onode-lookups missed in the cache");
+  b.add_u64(l_bluestore_buffers, "bluestore_buffers",
+           "Number of buffers in cache");
+  b.add_u64(l_bluestore_buffer_bytes, "bluestore_buffer_bytes",
+           "Number of buffer bytes in cache");
   b.add_u64(l_bluestore_buffer_hit_bytes, "bluestore_buffer_hit_bytes",
     "Sum for bytes of read hit in the cache");
   b.add_u64(l_bluestore_buffer_miss_bytes, "bluestore_buffer_miss_bytes",
@@ -4516,6 +4522,19 @@ void BlueStore::_reap_collections()
   }
 }
 
+void BlueStore::_update_cache_logger()
+{
+  uint64_t num_onodes = 0;
+  uint64_t num_buffers = 0;
+  uint64_t num_buffer_bytes = 0;
+  for (auto c : cache_shards) {
+    c->add_stats(&num_onodes, &num_buffers, &num_buffer_bytes);
+  }
+  logger->set(l_bluestore_onodes, num_onodes);
+  logger->set(l_bluestore_buffers, num_buffers);
+  logger->set(l_bluestore_buffer_bytes, num_buffer_bytes);
+}
+
 // ---------------
 // read operations
 
@@ -6348,6 +6367,8 @@ void BlueStore::_kv_sync_thread()
       // this is as good a place as any ...
       _reap_collections();
 
+      _update_cache_logger();
+
       if (bluefs) {
        if (!bluefs_gift_extents.empty()) {
          _commit_bluefs_freespace(bluefs_gift_extents);
index 11953f5c34883e41d3e4338d7e5bb3ea8402a067..04c42b4cacdcf9e7056e06811ecd1add1da9ebb5 100644 (file)
@@ -72,8 +72,11 @@ enum {
   l_bluestore_compressed,
   l_bluestore_compressed_allocated,
   l_bluestore_compressed_original,
+  l_bluestore_onodes,
   l_bluestore_onode_hits,
   l_bluestore_onode_misses,
+  l_bluestore_buffers,
+  l_bluestore_buffer_bytes,
   l_bluestore_buffer_hit_bytes,
   l_bluestore_buffer_miss_bytes,
   l_bluestore_write_big,
@@ -714,6 +717,9 @@ public:
 
     virtual void trim(uint64_t onode_max, uint64_t buffer_max) = 0;
 
+    virtual void add_stats(uint64_t *onodes, uint64_t *buffers,
+                          uint64_t *bytes) = 0;
+
 #ifdef DEBUG_CACHE
     virtual void _audit(const char *s) = 0;
 #else
@@ -785,6 +791,14 @@ public:
 
     void trim(uint64_t onode_max, uint64_t buffer_max) override;
 
+    void add_stats(uint64_t *onodes, uint64_t *buffers,
+                  uint64_t *bytes) override {
+      std::lock_guard<std::recursive_mutex> l(lock);
+      *onodes += onode_lru.size();
+      *buffers += buffer_lru.size();
+      *bytes += buffer_size;
+    }
+
 #ifdef DEBUG_CACHE
     void _audit(const char *s) override;
 #endif
@@ -860,6 +874,14 @@ public:
 
     void trim(uint64_t onode_max, uint64_t buffer_max) override;
 
+    void add_stats(uint64_t *onodes, uint64_t *buffers,
+                  uint64_t *bytes) override {
+      std::lock_guard<std::recursive_mutex> l(lock);
+      *onodes += onode_lru.size();
+      *buffers += buffer_hot.size() + buffer_warm_in.size();
+      *bytes += buffer_bytes;
+    }
+
 #ifdef DEBUG_CACHE
     void _audit(const char *s) override;
 #endif
@@ -1416,6 +1438,7 @@ private:
   CollectionRef _get_collection(const coll_t& cid);
   void _queue_reap_collection(CollectionRef& c);
   void _reap_collections();
+  void _update_cache_logger();
 
   void _assign_nid(TransContext *txc, OnodeRef o);
   uint64_t _assign_blobid(TransContext *txc);