From: Jason Dillaman Date: Wed, 22 Apr 2015 15:27:35 +0000 (-0400) Subject: librbd: updated cache max objects calculation X-Git-Tag: v9.0.1~71^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=0b378942c4f1b79cb65967f2d3466728ca1c8d5b;p=ceph.git librbd: updated cache max objects calculation The previous calculation was based upon the image's object size. Since the cache stores smaller bufferheads, the object size is not a good indicator of cache usage and was resulting in objects being evicted from the cache too often. Instead, base the max number of objects on the memory load required to store the extra metadata for the objects. Fixes: #7385 Backport: firefly, hammer Signed-off-by: Jason Dillaman --- diff --git a/src/librbd/ImageCtx.cc b/src/librbd/ImageCtx.cc index 5f9ba89546e2..c7174864932b 100644 --- a/src/librbd/ImageCtx.cc +++ b/src/librbd/ImageCtx.cc @@ -226,10 +226,9 @@ namespace librbd { if (object_cacher) { uint64_t obj = cache_max_dirty_object; if (!obj) { - obj = cache_size / (1ull << order); - obj = obj * 4 + 10; + obj = MIN(2000, MAX(10, cache_size / 100 / sizeof(ObjectCacher::Object))); } - ldout(cct, 10) << " cache bytes " << cache_size << " order " << (int)order + ldout(cct, 10) << " cache bytes " << cache_size << " -> about " << obj << " objects" << dendl; object_cacher->set_max_objects(obj); }