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.78~193^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=0559d31db29ea83bdb6cec72b830d16b44e3cd35;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 --- diff --git a/src/librbd/ImageCtx.cc b/src/librbd/ImageCtx.cc index 6477e8dfd048..decddf485be3 100644 --- a/src/librbd/ImageCtx.cc +++ b/src/librbd/ImageCtx.cc @@ -87,7 +87,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, @@ -183,14 +183,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