mirror of
https://github.com/ceph/ceph
synced 2025-01-04 02:02:36 +00:00
os/filestore: estimate omap_allocated
Assume all of leveldb/rocksdb is omap. This is an overestimate, but better than nothing. We don't populate the metadata overhead (no easy way to calculate this that comes to mind). And we don't populate the compression-related fields. It's possible we could make something up here in the VDO case... Signed-off-by: Sage Weil <sage@redhat.com>
This commit is contained in:
parent
6c82e66dde
commit
186edca81e
@ -745,15 +745,29 @@ int FileStore::statfs(struct store_statfs_t *buf0)
|
||||
}
|
||||
|
||||
uint64_t bfree = buf.f_bavail * buf.f_bsize;
|
||||
|
||||
// assume all of leveldb/rocksdb is omap.
|
||||
{
|
||||
map<string,uint64_t> kv_usage;
|
||||
buf0->omap_allocated += object_map->get_db()->get_estimated_size(kv_usage);
|
||||
}
|
||||
|
||||
uint64_t thin_total, thin_avail;
|
||||
if (get_vdo_utilization(vdo_fd, &thin_total, &thin_avail)) {
|
||||
buf0->total = thin_total;
|
||||
bfree = std::min(bfree, thin_avail);
|
||||
buf0->allocated = thin_total - thin_avail;
|
||||
buf0->data_stored = bfree;
|
||||
} else {
|
||||
buf0->total = buf.f_blocks * buf.f_bsize;
|
||||
buf0->allocated = bfree;
|
||||
buf0->data_stored = bfree;
|
||||
}
|
||||
buf0->available = bfree;
|
||||
|
||||
// FIXME: we don't know how to populate buf->internal_metadata; XFS doesn't
|
||||
// tell us what its internal overhead is.
|
||||
|
||||
// Adjust for writes pending in the journal
|
||||
if (journal) {
|
||||
uint64_t estimate = journal->get_journal_size_estimate();
|
||||
@ -762,6 +776,7 @@ int FileStore::statfs(struct store_statfs_t *buf0)
|
||||
else
|
||||
buf0->available = 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user