forked from vitalif/vitastor
Add inode space usage statistics tracking to blockstore
parent
0aa2dd2890
commit
c35963967f
|
@ -43,6 +43,11 @@ std::unordered_map<object_id, uint64_t> & blockstore_t::get_unstable_writes()
|
||||||
return impl->unstable_writes;
|
return impl->unstable_writes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::map<uint64_t, int64_t> & blockstore_t::get_inode_space_stats()
|
||||||
|
{
|
||||||
|
return impl->inode_space_stats;
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t blockstore_t::get_block_size()
|
uint32_t blockstore_t::get_block_size()
|
||||||
{
|
{
|
||||||
return impl->get_block_size();
|
return impl->get_block_size();
|
||||||
|
|
|
@ -183,6 +183,9 @@ public:
|
||||||
// Unstable writes are added here (map of object_id -> version)
|
// Unstable writes are added here (map of object_id -> version)
|
||||||
std::unordered_map<object_id, uint64_t> & get_unstable_writes();
|
std::unordered_map<object_id, uint64_t> & get_unstable_writes();
|
||||||
|
|
||||||
|
// Get per-inode space usage statistics
|
||||||
|
std::map<uint64_t, int64_t> & get_inode_space_stats();
|
||||||
|
|
||||||
// FIXME rename to object_size
|
// FIXME rename to object_size
|
||||||
uint32_t get_block_size();
|
uint32_t get_block_size();
|
||||||
uint64_t get_block_count();
|
uint64_t get_block_count();
|
||||||
|
|
|
@ -327,6 +327,9 @@ public:
|
||||||
// Unstable writes are added here (map of object_id -> version)
|
// Unstable writes are added here (map of object_id -> version)
|
||||||
std::unordered_map<object_id, uint64_t> unstable_writes;
|
std::unordered_map<object_id, uint64_t> unstable_writes;
|
||||||
|
|
||||||
|
// Space usage statistics
|
||||||
|
std::map<uint64_t, int64_t> inode_space_stats;
|
||||||
|
|
||||||
inline uint32_t get_block_size() { return block_size; }
|
inline uint32_t get_block_size() { return block_size; }
|
||||||
inline uint64_t get_block_count() { return block_count; }
|
inline uint64_t get_block_count() { return block_count; }
|
||||||
inline uint64_t get_free_block_count() { return data_alloc->get_free_count(); }
|
inline uint64_t get_free_block_count() { return data_alloc->get_free_count(); }
|
||||||
|
|
|
@ -118,6 +118,10 @@ void blockstore_init_meta::handle_entries(void* entries, unsigned count, int blo
|
||||||
#endif
|
#endif
|
||||||
bs->data_alloc->set(clean_it->second.location >> block_order, false);
|
bs->data_alloc->set(clean_it->second.location >> block_order, false);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bs->inode_space_stats[entry->oid.inode] += bs->block_size;
|
||||||
|
}
|
||||||
entries_loaded++;
|
entries_loaded++;
|
||||||
#ifdef BLOCKSTORE_DEBUG
|
#ifdef BLOCKSTORE_DEBUG
|
||||||
printf("Allocate block (clean entry) %lu: %lx:%lx v%lu\n", done_cnt+i, entry->oid.inode, entry->oid.stripe, entry->version);
|
printf("Allocate block (clean entry) %lu: %lx:%lx v%lu\n", done_cnt+i, entry->oid.inode, entry->oid.stripe, entry->version);
|
||||||
|
|
|
@ -190,6 +190,15 @@ void blockstore_impl_t::mark_stable(const obj_ver_id & v, bool forget_dirty)
|
||||||
if ((dirty_it->second.state & BS_ST_WORKFLOW_MASK) == BS_ST_SYNCED)
|
if ((dirty_it->second.state & BS_ST_WORKFLOW_MASK) == BS_ST_SYNCED)
|
||||||
{
|
{
|
||||||
dirty_it->second.state = (dirty_it->second.state & ~BS_ST_WORKFLOW_MASK) | BS_ST_STABLE;
|
dirty_it->second.state = (dirty_it->second.state & ~BS_ST_WORKFLOW_MASK) | BS_ST_STABLE;
|
||||||
|
// Allocations and deletions are counted when they're stabilized
|
||||||
|
if (IS_BIG_WRITE(dirty_it->second.state))
|
||||||
|
{
|
||||||
|
inode_space_stats[dirty_it->first.oid.inode] += block_size;
|
||||||
|
}
|
||||||
|
else if (IS_DELETE(dirty_it->second.state))
|
||||||
|
{
|
||||||
|
inode_space_stats[dirty_it->first.oid.inode] -= block_size;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (forget_dirty && (IS_BIG_WRITE(dirty_it->second.state) ||
|
if (forget_dirty && (IS_BIG_WRITE(dirty_it->second.state) ||
|
||||||
IS_DELETE(dirty_it->second.state)))
|
IS_DELETE(dirty_it->second.state)))
|
||||||
|
|
Loading…
Reference in New Issue