* [Qemu-devel] [PATCH] rbd: hook up cache options
@ 2012-05-17 20:42 Josh Durgin
2012-05-22 8:31 ` Kevin Wolf
2012-05-22 9:18 ` Paolo Bonzini
0 siblings, 2 replies; 4+ messages in thread
From: Josh Durgin @ 2012-05-17 20:42 UTC (permalink / raw)
To: qemu-devel; +Cc: kwolf
Writeback caching was added in Ceph 0.46, and writethrough will be in
0.47. These are controlled by general config options, so there's no
need to check for librbd version.
Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
---
block/rbd.c | 19 +++++++++++++++++++
1 files changed, 19 insertions(+), 0 deletions(-)
diff --git a/block/rbd.c b/block/rbd.c
index 1280d66..eebc334 100644
--- a/block/rbd.c
+++ b/block/rbd.c
@@ -476,6 +476,25 @@ static int qemu_rbd_open(BlockDriverState *bs, const char *filename, int flags)
s->snap = g_strdup(snap_buf);
}
+ /*
+ * 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");
+ }
+ }
+ }
+
if (strstr(conf, "conf=") == NULL) {
/* try default location, but ignore failure */
rados_conf_read_file(s->cluster, NULL);
--
1.7.5.4
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PATCH] rbd: hook up cache options
2012-05-17 20:42 [Qemu-devel] [PATCH] rbd: hook up cache options Josh Durgin
@ 2012-05-22 8:31 ` Kevin Wolf
2012-05-22 9:18 ` Paolo Bonzini
1 sibling, 0 replies; 4+ messages in thread
From: Kevin Wolf @ 2012-05-22 8:31 UTC (permalink / raw)
To: Josh Durgin; +Cc: qemu-devel
Am 17.05.2012 22:42, schrieb Josh Durgin:
> Writeback caching was added in Ceph 0.46, and writethrough will be in
> 0.47. These are controlled by general config options, so there's no
> need to check for librbd version.
>
> Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
Thanks, applied to the block-next branch for 1.2.
Kevin
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PATCH] rbd: hook up cache options
2012-05-17 20:42 [Qemu-devel] [PATCH] rbd: hook up cache options Josh Durgin
2012-05-22 8:31 ` Kevin Wolf
@ 2012-05-22 9:18 ` Paolo Bonzini
2012-05-22 16:24 ` Josh Durgin
1 sibling, 1 reply; 4+ messages in thread
From: Paolo Bonzini @ 2012-05-22 9:18 UTC (permalink / raw)
To: Josh Durgin; +Cc: kwolf, qemu-devel
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:
1) has this changed? does rbd_flush now flush dirty items when
rbd_cache_max_dirty > 0?
2) should the usage of a cache be conditional on LIBRBD_VERSION_CODE >=
LIBRBD_VERSION(0, 1, 1)?
Thanks,
Paolo
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PATCH] rbd: hook up cache options
2012-05-22 9:18 ` Paolo Bonzini
@ 2012-05-22 16:24 ` Josh Durgin
0 siblings, 0 replies; 4+ messages in thread
From: Josh Durgin @ 2012-05-22 16:24 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: kwolf, qemu-devel
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
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2012-05-22 16:25 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-05-17 20:42 [Qemu-devel] [PATCH] rbd: hook up cache options Josh Durgin
2012-05-22 8:31 ` Kevin Wolf
2012-05-22 9:18 ` Paolo Bonzini
2012-05-22 16:24 ` Josh Durgin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).