22 May 2012 18:24
Re: [PATCH] rbd: hook up cache options
Josh Durgin <josh.durgin <at> inktank.com>
2012-05-22 16:24:55 GMT
2012-05-22 16:24:55 GMT
On 05/22/2012 02:18 AM, Paolo Bonzini wrote:
> Il 17/05/2012 22:42, Josh Durgin ha scritto:
>> + * Fallback to more conservative semantics if setting cache
>> + * options fails. Ignore errors from setting rbd_cache because the
>> + * only possible error is that the option does not exist, and
>> + * librbd defaults to no caching. If write through caching cannot
>> + * be set up, fall back to no caching.
>> + */
>> + if (flags& BDRV_O_NOCACHE) {
>> + rados_conf_set(s->cluster, "rbd_cache", "false");
>> + } else {
>> + rados_conf_set(s->cluster, "rbd_cache", "true");
>> + if (!(flags& BDRV_O_CACHE_WB)) {
>> + r = rados_conf_set(s->cluster, "rbd_cache_max_dirty", "0");
>> + if (r< 0) {
>> + rados_conf_set(s->cluster, "rbd_cache", "false");
>> + }
>> + }
>> + }
>
> Last time I looked at ceph, rbd_flush was not a full flush of the cache;
> it only ensured that the pending requests were sent. So my questions are:
I'm not sure which version you were looking at, but this hasn't been
the case since caching was implemented. I don't think it was ever the
case, actually. rbd_flush has always waited for pending I/Os to complete
(be on disk on all replicas), not just be in flight.
If you're interested in the current implementation, you can see:
src/librbd.cc: librbd::flush()
which goes into:
src/osdc/ObjectCacher.cc: ObjectCacher::commit_set()
or
src/librados/IoCtxImpl.cc: IoCtxImpl::flush_aio_writes()
> 1) has this changed? does rbd_flush now flush dirty items when
> rbd_cache_max_dirty> 0?
The rbd_cache_* options did not exist before 0.46.
> 2) should the usage of a cache be conditional on LIBRBD_VERSION_CODE>=
> LIBRBD_VERSION(0, 1, 1)?
It doesn't matter if you use an older version because the non-existent
options don't have any effect.
Thanks,
Josh
RSS Feed