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",
}
}
+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
// 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);
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,
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
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
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
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);