[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL for-2.4 1/5] block/mirror: Sleep periodically during
From: |
Jeff Cody |
Subject: |
[Qemu-devel] [PULL for-2.4 1/5] block/mirror: Sleep periodically during bitmap scanning |
Date: |
Tue, 14 Jul 2015 22:26:53 -0400 |
From: Fam Zheng <address@hidden>
Before, we only yield after initializing dirty bitmap, where the QMP
command would return. That may take very long, and guest IO will be
blocked.
Add sleep points like the later mirror iterations.
Signed-off-by: Fam Zheng <address@hidden>
Reviewed-by: Wen Congyang <address@hidden>
Reviewed-by: Paolo Bonzini <address@hidden>
Reviewed-by: Stefan Hajnoczi <address@hidden>
Message-id: address@hidden
Signed-off-by: Jeff Cody <address@hidden>
---
block/mirror.c | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/block/mirror.c b/block/mirror.c
index d409337..a2700ca 100644
--- a/block/mirror.c
+++ b/block/mirror.c
@@ -444,11 +444,23 @@ static void coroutine_fn mirror_run(void *opaque)
sectors_per_chunk = s->granularity >> BDRV_SECTOR_BITS;
mirror_free_init(s);
+ last_pause_ns = qemu_clock_get_ns(QEMU_CLOCK_REALTIME);
if (!s->is_none_mode) {
/* First part, loop on the sectors and initialize the dirty bitmap. */
BlockDriverState *base = s->base;
for (sector_num = 0; sector_num < end; ) {
int64_t next = (sector_num | (sectors_per_chunk - 1)) + 1;
+ int64_t now = qemu_clock_get_ns(QEMU_CLOCK_REALTIME);
+
+ if (now - last_pause_ns > SLICE_TIME) {
+ last_pause_ns = now;
+ block_job_sleep_ns(&s->common, QEMU_CLOCK_REALTIME, 0);
+ }
+
+ if (block_job_is_cancelled(&s->common)) {
+ goto immediate_exit;
+ }
+
ret = bdrv_is_allocated_above(bs, base,
sector_num, next - sector_num, &n);
@@ -467,7 +479,6 @@ static void coroutine_fn mirror_run(void *opaque)
}
bdrv_dirty_iter_init(s->dirty_bitmap, &s->hbi);
- last_pause_ns = qemu_clock_get_ns(QEMU_CLOCK_REALTIME);
for (;;) {
uint64_t delay_ns = 0;
int64_t cnt;
--
1.9.3
- [Qemu-devel] [PULL for-2.4 0/5] Block layer patches for 2.4.0-rc1, Jeff Cody, 2015/07/14
- [Qemu-devel] [PULL for-2.4 1/5] block/mirror: Sleep periodically during bitmap scanning,
Jeff Cody <=
- [Qemu-devel] [PULL for-2.4 3/5] block: keep bitmap if incremental backup job is cancelled, Jeff Cody, 2015/07/14
- [Qemu-devel] [PULL for-2.4 2/5] blockdev: no need to drain in qmp_block_commit, Jeff Cody, 2015/07/14
- [Qemu-devel] [PULL for-2.4 4/5] mirror: correct buf_size, Jeff Cody, 2015/07/14
- [Qemu-devel] [PULL for-2.4 5/5] block/curl: Don't lose original error when a connection fails., Jeff Cody, 2015/07/14
- Re: [Qemu-devel] [PULL for-2.4 0/5] Block layer patches for 2.4.0-rc1, Peter Maydell, 2015/07/15