From: Josh Durgin Date: Tue, 11 Feb 2014 18:14:36 +0000 (-0800) Subject: librbd: remove limit on number of objects in the cache X-Git-Tag: v0.67.6~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=367cf1bbf86233eb20ff2304e7d6caab77b84fcc;p=ceph.git librbd: remove limit on number of objects in the cache The number of objects is not a significant indicated of when data should be written out for rbd. Use the highest possible value for number of objects and just rely on the dirty data limits to trigger flushing. When the number of objects is low, and many start being flushed before they accumulate many requests, it hurts average request size and performance for many concurrent sequential writes. Fixes: #7385 Backport: emperor, dumpling Signed-off-by: Josh Durgin (cherry picked from commit 0559d31db29ea83bdb6cec72b830d16b44e3cd35) --- diff --git a/src/librbd/ImageCtx.cc b/src/librbd/ImageCtx.cc index 41518b67698..77cb8503ad6 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, - 10, /* reset this in init */ + (uint64_t) -1, // unlimited number of objects init_max_dirty, cct->_conf->rbd_cache_target_dirty, cct->_conf->rbd_cache_max_dirty_age, @@ -182,14 +182,6 @@ 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