diff mbox

rbd : disable rbd_cache_writethrough_until_flush for cache=unsafe

Message ID 1469622402-8634-1-git-send-email-aderumier@odiso.com (mailing list archive)
State New, archived
Headers show

Commit Message

Alexandre DERUMIER July 27, 2016, 12:26 p.m. UTC
ceph force writethrough until a flush is detected.
With cache=unsafe, we never send flush.
So we need to tell to ceph
to set rbd_cache_writethrough_until_flush=false in this case.

This speedup a lot qemu-img convert which use cache=unsafe by default

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
---
 block/rbd.c | 4 ++++
 1 file changed, 4 insertions(+)

Comments

Josh Durgin Sept. 22, 2016, 1:01 a.m. UTC | #1
On 07/27/2016 05:26 AM, Alexandre Derumier wrote:
> ceph force writethrough until a flush is detected.
> With cache=unsafe, we never send flush.
> So we need to tell to ceph
> to set rbd_cache_writethrough_until_flush=false in this case.
>
> This speedup a lot qemu-img convert which use cache=unsafe by default
>
> Signed-off-by: Alexandre Derumier <aderumier@odiso.com>

Sorry for the delay - this is correct and needed since this option
appeared by default in Ceph hammer.

Reviewed-by: Josh Durgin <jdurgin@redhat.com>

> ---
>  block/rbd.c | 4 ++++
>  1 file changed, 4 insertions(+)
>
> diff --git a/block/rbd.c b/block/rbd.c
> index 0106fea..f3af6c8 100644
> --- a/block/rbd.c
> +++ b/block/rbd.c
> @@ -552,6 +552,10 @@ static int qemu_rbd_open(BlockDriverState *bs, QDict *options, int flags,
>          rados_conf_set(s->cluster, "rbd_cache", "true");
>      }
>
> +    if (flags & BDRV_O_NO_FLUSH) {
> +        rados_conf_set(s->cluster, "rbd_cache_writethrough_until_flush", "false");
> +    }
> +
>      r = rados_connect(s->cluster);
>      if (r < 0) {
>          error_setg_errno(errp, -r, "error connecting");
>
diff mbox

Patch

diff --git a/block/rbd.c b/block/rbd.c
index 0106fea..f3af6c8 100644
--- a/block/rbd.c
+++ b/block/rbd.c
@@ -552,6 +552,10 @@  static int qemu_rbd_open(BlockDriverState *bs, QDict *options, int flags,
         rados_conf_set(s->cluster, "rbd_cache", "true");
     }
 
+    if (flags & BDRV_O_NO_FLUSH) {
+        rados_conf_set(s->cluster, "rbd_cache_writethrough_until_flush", "false");
+    }
+
     r = rados_connect(s->cluster);
     if (r < 0) {
         error_setg_errno(errp, -r, "error connecting");