<< " buffers " << buffer_size << " / " << buffer_max
<< dendl;
- _audit_lru();
+ _audit_lru("trim start");
// buffers
auto i = buffer_lru.end();
}
#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;
}
assert(s == buffer_size);
}
- dout(20) << __func__ << " buffer_size " << buffer_size << " ok" << dendl;
+ dout(20) << __func__ << " " << when << " buffer_size " << buffer_size
+ << " ok" << dendl;
}
}
#endif
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()) {
}
cache->buffer_size -= b->length - front;
b->truncate(front);
- cache->_audit_lru();
+ cache->_audit_lru("discard end 1");
return;
} else {
// drop tail
_add_buffer(new Buffer(this, b->state, b->seq, end, keep));
_rm_buffer(i);
}
- cache->_audit_lru();
+ cache->_audit_lru("discard end 2");
return;
}
}
++i;
}
}
- cache->_audit_lru();
+ cache->_audit_lru("finish_write end");
}
// OnodeSpace
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(
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
};