From d6d3e1045efdd34e96b50951d00c51e55858c6d2 Mon Sep 17 00:00:00 2001 From: Zygo Blaxell Date: Sun, 5 Dec 2021 19:24:22 -0500 Subject: [PATCH] context: keep the resolve cache smaller We don't need to cache 65536 extent maps, especially if each one can have almost 700K references. Valgrind's massif tool points to the extent map cache as a very large memory allocator, but test runs with memcg disagree. Signed-off-by: Zygo Blaxell --- src/bees-context.cc | 17 +++++++++++++---- src/bees-roots.cc | 1 + src/bees.h | 1 + 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/bees-context.cc b/src/bees-context.cc index 1e2bbcc..796bfc6 100644 --- a/src/bees-context.cc +++ b/src/bees-context.cc @@ -43,12 +43,13 @@ BeesFdCache::BeesFdCache(shared_ptr ctx) : void BeesFdCache::clear() { - BEESNOTE("Clearing root FD cache to enable subvol delete"); - BEESLOGDEBUG("Clearing root FD cache to enable subvol delete"); + BEESLOGDEBUG("Clearing root FD cache with size " << m_root_cache.size() << " to enable subvol delete"); + BEESNOTE("Clearing root FD cache with size " << m_root_cache.size()); m_root_cache.clear(); BEESCOUNT(root_clear); - BEESLOGDEBUG("Clearing open FD cache to enable file delete"); - BEESNOTE("Clearing open FD cache to enable file delete"); + + BEESLOGDEBUG("Clearing open FD cache with size " << m_file_cache.size() << " to enable file delete"); + BEESNOTE("Clearing open FD cache with size " << m_file_cache.size()); m_file_cache.clear(); BEESCOUNT(open_clear); } @@ -854,6 +855,14 @@ BeesContext::invalidate_addr(BeesAddress addr) return m_resolve_cache.expire(addr.get_physical_or_zero()); } +void +BeesContext::resolve_cache_clear() +{ + BEESNOTE("clearing resolve cache with size " << m_resolve_cache.size()); + BEESLOGDEBUG("Clearing resolve cache with size " << m_resolve_cache.size()); + return m_resolve_cache.clear(); +} + void BeesContext::set_root_fd(Fd fd) { diff --git a/src/bees-roots.cc b/src/bees-roots.cc index fe96286..4335ecc 100644 --- a/src/bees-roots.cc +++ b/src/bees-roots.cc @@ -722,6 +722,7 @@ void BeesRoots::clear_caches() { m_ctx->fd_cache()->clear(); + m_ctx->resolve_cache_clear(); } void diff --git a/src/bees.h b/src/bees.h index 18e45b7..4417517 100644 --- a/src/bees.h +++ b/src/bees.h @@ -766,6 +766,7 @@ public: BeesResolveAddrResult resolve_addr(BeesAddress addr); void invalidate_addr(BeesAddress addr); + void resolve_cache_clear(); void dump_status(); void show_progress();