From: Sage Weil Date: Sat, 15 Feb 2014 07:52:06 +0000 (-0800) Subject: Revert "librbd: remove limit on number of objects in the cache" X-Git-Tag: v0.67.7~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=9dae9993e9b36e741e05804807bdb738fbe52e6f;p=ceph.git Revert "librbd: remove limit on number of objects in the cache" This reverts commit 367cf1bbf86233eb20ff2304e7d6caab77b84fcc. Removing the limit on objects means we leak memory, since Objects without any buffers can exist in the cache. --- diff --git a/src/librbd/ImageCtx.cc b/src/librbd/ImageCtx.cc index 77cb8503ad6..41518b67698 100644 --- a/src/librbd/ImageCtx.cc +++ b/src/librbd/ImageCtx.cc @@ -86,7 +86,7 @@ namespace librbd { object_cacher = new ObjectCacher(cct, pname, *writeback_handler, cache_lock, NULL, NULL, cct->_conf->rbd_cache_size, - (uint64_t) -1, // unlimited number of objects + 10, /* reset this in init */ init_max_dirty, cct->_conf->rbd_cache_target_dirty, cct->_conf->rbd_cache_max_dirty_age, @@ -182,6 +182,14 @@ namespace librbd { snprintf(format_string, len, "%s.%%016llx", object_prefix.c_str()); } + // size object cache appropriately + if (object_cacher) { + uint64_t obj = cct->_conf->rbd_cache_size / (1ull << order); + ldout(cct, 10) << " cache bytes " << cct->_conf->rbd_cache_size << " order " << (int)order + << " -> about " << obj << " objects" << dendl; + object_cacher->set_max_objects(obj * 4 + 10); + } + ldout(cct, 10) << "init_layout stripe_unit " << stripe_unit << " stripe_count " << stripe_count << " object_size " << layout.fl_object_size