From patchwork Tue Jan 22 08:03:11 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 214425 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 806C62C1569 for ; Tue, 22 Jan 2013 19:03:39 +1100 (EST) Received: from localhost ([::1]:42536 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TxYpV-00072a-43 for incoming@patchwork.ozlabs.org; Tue, 22 Jan 2013 03:03:37 -0500 Received: from eggs.gnu.org ([208.118.235.92]:58494) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TxYpL-00072R-2W for qemu-devel@nongnu.org; Tue, 22 Jan 2013 03:03:28 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TxYpH-00085e-0J for qemu-devel@nongnu.org; Tue, 22 Jan 2013 03:03:26 -0500 Received: from mail-ea0-f175.google.com ([209.85.215.175]:33974) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TxYpG-00085O-RK for qemu-devel@nongnu.org; Tue, 22 Jan 2013 03:03:22 -0500 Received: by mail-ea0-f175.google.com with SMTP id d1so2771457eab.20 for ; Tue, 22 Jan 2013 00:03:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:sender:from:to:cc:subject:date:message-id:x-mailer; bh=mRL7emkj9IPTt10tJIIltqm2Xq1R55/8T0Pbh5BBta0=; b=pza7mDovp762T2Z5XeKp7zthG0SX02uX2POysjcf9ZpP0iw4qvPZA8eJnEwWiStSvf 6WVBZ0SrGpkqEhzmdQufX3ZQz6YWrK2lA/czxviYKDqkiUcPAwncJVM/YBLIhbjnughi T+4WLnoBS2bOf/QbnoqUCN8onyvf6EFp6/+vwfNjnfRzQV8OERq6teTOJjKzyKAawEDz fZ36gG8Ci9Rb7nx3Ryyj2Z4JZhtpmQJrYjDAtexslZuPHQjsoSIQnQXKkyJm+MyBFaMQ mRfPty4RGzXOxw7Q3Of5gYskw3GIsPfATAAAaM3ysw92F3UF9d32Axqv3mzvjj7U7uok 9pEg== X-Received: by 10.14.202.3 with SMTP id c3mr70447285eeo.4.1358841801727; Tue, 22 Jan 2013 00:03:21 -0800 (PST) Received: from yakj.usersys.redhat.com (93-34-179-137.ip50.fastwebnet.it. [93.34.179.137]) by mx.google.com with ESMTPS id t4sm6878087eel.0.2013.01.22.00.03.19 (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Tue, 22 Jan 2013 00:03:20 -0800 (PST) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 22 Jan 2013 09:03:11 +0100 Message-Id: <1358841795-24478-1-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.1 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 209.85.215.175 Cc: kwolf@redhat.com, stefanha@redhat.com Subject: [Qemu-devel] [PATCH v4 0/4] Drive mirroring performance improvements X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Here are the remaining patches. Interdiff at the end of this cover letter. Thanks, Paolo Paolo Bonzini (4): mirror: switch mirror_iteration to AIO mirror: add buf-size argument to drive-mirror mirror: support more than one in-flight AIO operation mirror: support arbitrarily-sized iterations block/mirror.c | 326 ++++++++++++++++++++++++++++++++++++--------- blockdev.c | 9 +- hmp.c | 2 +- include/block/block_int.h | 5 +- qapi-schema.json | 5 +- qmp-commands.hx | 4 +- tests/qemu-iotests/041 | 31 +++++ tests/qemu-iotests/041.out | 4 +- trace-events | 5 + 9 files changed, 321 insertions(+), 70 deletions(-) diff --git a/block/mirror.c b/block/mirror.c index 59df89c..9347533 100644 --- a/block/mirror.c +++ b/block/mirror.c @@ -69,13 +69,15 @@ static BlockErrorAction mirror_error_action(MirrorBlockJob *s, bool read, } } -static void mirror_iteration_done(MirrorOp *op) +static void mirror_iteration_done(MirrorOp *op, int ret) { MirrorBlockJob *s = op->s; struct iovec *iov; int64_t chunk_num; int i, nb_chunks, sectors_per_chunk; + trace_mirror_iteration_done(s, op->sector_num, op->nb_sectors, ret); + s->in_flight--; iov = op->qiov.iov; for (i = 0; i < op->qiov.niov; i++) { @@ -88,11 +90,10 @@ static void mirror_iteration_done(MirrorOp *op) chunk_num = op->sector_num / sectors_per_chunk; nb_chunks = op->nb_sectors / sectors_per_chunk; bitmap_clear(s->in_flight_bitmap, chunk_num, nb_chunks); - if (s->cow_bitmap) { + if (s->cow_bitmap && ret >= 0) { bitmap_set(s->cow_bitmap, chunk_num, nb_chunks); } - trace_mirror_iteration_done(s, op->sector_num, op->nb_sectors); g_slice_free(MirrorOp, op); qemu_coroutine_enter(s->common.co, NULL); } @@ -111,7 +112,7 @@ static void mirror_write_complete(void *opaque, int ret) s->ret = ret; } } - mirror_iteration_done(op); + mirror_iteration_done(op, ret); } static void mirror_read_complete(void *opaque, int ret) @@ -128,7 +129,7 @@ static void mirror_read_complete(void *opaque, int ret) s->ret = ret; } - mirror_iteration_done(op); + mirror_iteration_done(op, ret); return; } bdrv_aio_writev(s->target, op->sector_num, &op->qiov, op->nb_sectors, diff --git a/trace-events b/trace-events index 9d9860c..64d67f9 100644 --- a/trace-events +++ b/trace-events @@ -85,7 +85,7 @@ mirror_before_drain(void *s, int64_t cnt) "s %p dirty count %"PRId64 mirror_before_sleep(void *s, int64_t cnt, int synced) "s %p dirty count %"PRId64" synced %d" mirror_one_iteration(void *s, int64_t sector_num, int nb_sectors) "s %p sector_num %"PRId64" nb_sectors %d" mirror_cow(void *s, int64_t sector_num) "s %p sector_num %"PRId64 -mirror_iteration_done(void *s, int64_t sector_num, int nb_sectors) "s %p sector_num %"PRId64" nb_sectors %d" +mirror_iteration_done(void *s, int64_t sector_num, int nb_sectors, int ret) "s %p sector_num %"PRId64" nb_sectors %d ret %d" mirror_yield(void *s, int64_t cnt, int buf_free_count, int in_flight) "s %p dirty count %"PRId64" free buffers %d in_flight %d" mirror_yield_in_flight(void *s, int64_t sector_num, int in_flight) "s %p sector_num %"PRId64" in_flight %d" mirror_yield_buf_busy(void *s, int nb_chunks, int in_flight) "s %p requested chunks %d in_flight %d"