]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: better audit_lru debugging
authorSage Weil <sage@redhat.com>
Thu, 2 Jun 2016 20:44:03 +0000 (16:44 -0400)
committerSage Weil <sage@redhat.com>
Fri, 3 Jun 2016 19:00:06 +0000 (15:00 -0400)
Signed-off-by: Sage Weil <sage@redhat.com>
src/os/bluestore/BlueStore.cc
src/os/bluestore/BlueStore.h

index 81ce6da64e6e4e00c73e0051d7bf035f1ccf9689..54f63c24970db8a8530d8301de16f04203e712e7 100644 (file)
@@ -469,7 +469,7 @@ void BlueStore::Cache::trim(uint64_t onode_max, uint64_t buffer_max)
           << " buffers " << buffer_size << " / " << buffer_max
           << dendl;
 
-  _audit_lru();
+  _audit_lru("trim start");
 
   // buffers
   auto i = buffer_lru.end();
@@ -528,9 +528,10 @@ void BlueStore::Cache::trim(uint64_t onode_max, uint64_t buffer_max)
 }
 
 #ifdef DEBUG_CACHE
-void BlueStore::Cache::_audit_lru()
+void BlueStore::Cache::_audit_lru(const char *when)
 {
   if (true) {
+    dout(10) << __func__ << " " << when << " start" << dendl;
     uint64_t s = 0;
     for (auto i = buffer_lru.begin(); i != buffer_lru.end(); ++i) {
       s += i->length;
@@ -543,7 +544,8 @@ void BlueStore::Cache::_audit_lru()
       }
       assert(s == buffer_size);
     }
-    dout(20) << __func__ << " buffer_size " << buffer_size << " ok" << dendl;
+    dout(20) << __func__ << " " << when << " buffer_size " << buffer_size
+            << " ok" << dendl;
   }
 }
 #endif
@@ -564,8 +566,7 @@ void BlueStore::BufferSpace::_clear()
 
 void BlueStore::BufferSpace::_discard(uint64_t offset, uint64_t length)
 {
-  std::lock_guard<std::mutex> l(cache->lock);
-  cache->_audit_lru();
+  cache->_audit_lru("discard start");
   auto i = _data_lower_bound(offset);
   uint64_t end = offset + length;
   while (i != buffer_map.end()) {
@@ -587,7 +588,7 @@ void BlueStore::BufferSpace::_discard(uint64_t offset, uint64_t length)
        }
        cache->buffer_size -= b->length - front;
        b->truncate(front);
-       cache->_audit_lru();
+       cache->_audit_lru("discard end 1");
        return;
       } else {
        // drop tail
@@ -613,7 +614,7 @@ void BlueStore::BufferSpace::_discard(uint64_t offset, uint64_t length)
       _add_buffer(new Buffer(this, b->state, b->seq, end, keep));
       _rm_buffer(i);
     }
-    cache->_audit_lru();
+    cache->_audit_lru("discard end 2");
     return;
   }
 }
@@ -687,7 +688,7 @@ void BlueStore::BufferSpace::finish_write(uint64_t seq)
       ++i;
     }
   }
-  cache->_audit_lru();
+  cache->_audit_lru("finish_write end");
 }
 
 // OnodeSpace
index 98da0d836531046a6c9a609b29b64f12a2a71599..52626d52671f918c9957ec4159a28a5069dc5ebc 100644 (file)
@@ -200,27 +200,27 @@ public:
     BufferSpace(Cache *c) : cache(c) {}
 
     void _add_buffer(Buffer *b) {
-      cache->_audit_lru();
+      cache->_audit_lru("_add_buffer start");
       buffer_map[b->offset].reset(b);
       cache->buffer_lru.push_front(*b);
       cache->buffer_size += b->length;
       if (b->is_writing()) {
        writing.push_back(*b);
       }
-      cache->_audit_lru();
+      cache->_audit_lru("_add_buffer end");
     }
     void _rm_buffer(Buffer *b) {
       _rm_buffer(buffer_map.find(b->offset));
     }
     void _rm_buffer(map<uint64_t,std::unique_ptr<Buffer>>::iterator p) {
-      cache->_audit_lru();
+      cache->_audit_lru("_rm_buffer start");
       cache->buffer_size -= p->second->length;
       cache->buffer_lru.erase(cache->buffer_lru.iterator_to(*p->second));
       if (p->second->is_writing()) {
        writing.erase(writing.iterator_to(*p->second));
       }
       buffer_map.erase(p);
-      cache->_audit_lru();
+      cache->_audit_lru("_rm_buffer end");
     }
 
     map<uint64_t,std::unique_ptr<Buffer>>::iterator _data_lower_bound(
@@ -424,15 +424,15 @@ public:
       auto p = buffer_lru.iterator_to(*b);
       buffer_lru.erase(p);
       buffer_lru.push_front(*b);
-      _audit_lru();
+      _audit_lru("_touch_buffer end");
     }
 
     void trim(uint64_t onode_max, uint64_t buffer_max);
 
 #ifdef DEBUG_CACHE
-    void _audit_lru();
+    void _audit_lru(const char *s);
 #else
-    void _audit_lru() { /* no-op */ }
+    void _audit_lru(const char *s) { /* no-op */ }
 #endif
   };