mirror of
https://github.com/Zygo/bees.git
synced 2025-05-17 13:25:45 +02:00
context: get rid of shared_ptr<BeesContext> in every single cached Fd object
Support for multiple BeesContext objects sharing a FdCache was wasting significant space and atomic inc/dec memory cycles for no good reason since the shared-FdCache feature was deprecated. open_root and open_root_ino still need a BeesContext to work. Pass the BeesContext pointer through the function object instead of the cache key arguments. Signed-off-by: Zygo Blaxell <bees@furryterror.org>
This commit is contained in:
parent
db65031c2b
commit
80c69f1ce4
@ -21,18 +21,19 @@ using namespace crucible;
|
|||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
|
||||||
BeesFdCache::BeesFdCache()
|
BeesFdCache::BeesFdCache(shared_ptr<BeesContext> ctx) :
|
||||||
|
m_ctx(ctx)
|
||||||
{
|
{
|
||||||
m_root_cache.func([&](shared_ptr<BeesContext> ctx, uint64_t root) -> Fd {
|
m_root_cache.func([&](uint64_t root) -> Fd {
|
||||||
Timer open_timer;
|
Timer open_timer;
|
||||||
auto rv = ctx->roots()->open_root_nocache(root);
|
auto rv = m_ctx->roots()->open_root_nocache(root);
|
||||||
BEESCOUNTADD(open_root_ms, open_timer.age() * 1000);
|
BEESCOUNTADD(open_root_ms, open_timer.age() * 1000);
|
||||||
return rv;
|
return rv;
|
||||||
});
|
});
|
||||||
m_root_cache.max_size(BEES_ROOT_FD_CACHE_SIZE);
|
m_root_cache.max_size(BEES_ROOT_FD_CACHE_SIZE);
|
||||||
m_file_cache.func([&](shared_ptr<BeesContext> ctx, uint64_t root, uint64_t ino) -> Fd {
|
m_file_cache.func([&](uint64_t root, uint64_t ino) -> Fd {
|
||||||
Timer open_timer;
|
Timer open_timer;
|
||||||
auto rv = ctx->roots()->open_root_ino_nocache(root, ino);
|
auto rv = m_ctx->roots()->open_root_ino_nocache(root, ino);
|
||||||
BEESCOUNTADD(open_ino_ms, open_timer.age() * 1000);
|
BEESCOUNTADD(open_ino_ms, open_timer.age() * 1000);
|
||||||
return rv;
|
return rv;
|
||||||
});
|
});
|
||||||
@ -51,15 +52,15 @@ BeesFdCache::clear()
|
|||||||
}
|
}
|
||||||
|
|
||||||
Fd
|
Fd
|
||||||
BeesFdCache::open_root(shared_ptr<BeesContext> ctx, uint64_t root)
|
BeesFdCache::open_root(uint64_t root)
|
||||||
{
|
{
|
||||||
return m_root_cache(ctx, root);
|
return m_root_cache(root);
|
||||||
}
|
}
|
||||||
|
|
||||||
Fd
|
Fd
|
||||||
BeesFdCache::open_root_ino(shared_ptr<BeesContext> ctx, uint64_t root, uint64_t ino)
|
BeesFdCache::open_root_ino(uint64_t root, uint64_t ino)
|
||||||
{
|
{
|
||||||
return m_file_cache(ctx, root, ino);
|
return m_file_cache(root, ino);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -1107,7 +1108,7 @@ BeesContext::fd_cache()
|
|||||||
throw BeesHalt();
|
throw BeesHalt();
|
||||||
}
|
}
|
||||||
if (!m_fd_cache) {
|
if (!m_fd_cache) {
|
||||||
m_fd_cache = make_shared<BeesFdCache>();
|
m_fd_cache = make_shared<BeesFdCache>(shared_from_this());
|
||||||
}
|
}
|
||||||
auto rv = m_fd_cache;
|
auto rv = m_fd_cache;
|
||||||
return rv;
|
return rv;
|
||||||
|
@ -709,7 +709,7 @@ BeesRoots::open_root(uint64_t rootid)
|
|||||||
return Fd();
|
return Fd();
|
||||||
}
|
}
|
||||||
|
|
||||||
return m_ctx->fd_cache()->open_root(m_ctx, rootid);
|
return m_ctx->fd_cache()->open_root(rootid);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
@ -906,7 +906,7 @@ BeesRoots::open_root_ino_nocache(uint64_t root, uint64_t ino)
|
|||||||
Fd
|
Fd
|
||||||
BeesRoots::open_root_ino(uint64_t root, uint64_t ino)
|
BeesRoots::open_root_ino(uint64_t root, uint64_t ino)
|
||||||
{
|
{
|
||||||
return m_ctx->fd_cache()->open_root_ino(m_ctx, root, ino);
|
return m_ctx->fd_cache()->open_root_ino(root, ino);
|
||||||
}
|
}
|
||||||
|
|
||||||
RateEstimator &
|
RateEstimator &
|
||||||
|
11
src/bees.h
11
src/bees.h
@ -697,15 +697,16 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
class BeesFdCache {
|
class BeesFdCache {
|
||||||
LRUCache<Fd, shared_ptr<BeesContext>, uint64_t> m_root_cache;
|
shared_ptr<BeesContext> m_ctx;
|
||||||
LRUCache<Fd, shared_ptr<BeesContext>, uint64_t, uint64_t> m_file_cache;
|
LRUCache<Fd, uint64_t> m_root_cache;
|
||||||
|
LRUCache<Fd, uint64_t, uint64_t> m_file_cache;
|
||||||
Timer m_root_cache_timer;
|
Timer m_root_cache_timer;
|
||||||
Timer m_file_cache_timer;
|
Timer m_file_cache_timer;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
BeesFdCache();
|
BeesFdCache(shared_ptr<BeesContext> ctx);
|
||||||
Fd open_root(shared_ptr<BeesContext> ctx, uint64_t root);
|
Fd open_root(uint64_t root);
|
||||||
Fd open_root_ino(shared_ptr<BeesContext> ctx, uint64_t root, uint64_t ino);
|
Fd open_root_ino(uint64_t root, uint64_t ino);
|
||||||
void clear();
|
void clear();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user