qemu-iotests/199: improve performance: set bitmap by discard
Discard dirties dirty-bitmap as well as write, but works faster. Let's use it instead. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Reviewed-by: Andrey Shinkevich <andrey.shinkevich@virtuozzo.com> Tested-by: Eric Blake <eblake@redhat.com> Message-Id: <20200727194236.19551-5-vsementsov@virtuozzo.com> Signed-off-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
09feea6cf5
commit
edb90bbdf3
|
@ -67,8 +67,10 @@ class TestDirtyBitmapPostcopyMigration(iotests.QMPTestCase):
|
||||||
os.mkfifo(fifo)
|
os.mkfifo(fifo)
|
||||||
qemu_img('create', '-f', iotests.imgfmt, disk_a, size)
|
qemu_img('create', '-f', iotests.imgfmt, disk_a, size)
|
||||||
qemu_img('create', '-f', iotests.imgfmt, disk_b, size)
|
qemu_img('create', '-f', iotests.imgfmt, disk_b, size)
|
||||||
self.vm_a = iotests.VM(path_suffix='a').add_drive(disk_a)
|
self.vm_a = iotests.VM(path_suffix='a').add_drive(disk_a,
|
||||||
self.vm_b = iotests.VM(path_suffix='b').add_drive(disk_b)
|
'discard=unmap')
|
||||||
|
self.vm_b = iotests.VM(path_suffix='b').add_drive(disk_b,
|
||||||
|
'discard=unmap')
|
||||||
self.vm_b.add_incoming("exec: cat '" + fifo + "'")
|
self.vm_b.add_incoming("exec: cat '" + fifo + "'")
|
||||||
self.vm_a.launch()
|
self.vm_a.launch()
|
||||||
self.vm_b.launch()
|
self.vm_b.launch()
|
||||||
|
@ -78,7 +80,7 @@ class TestDirtyBitmapPostcopyMigration(iotests.QMPTestCase):
|
||||||
self.vm_b_events = []
|
self.vm_b_events = []
|
||||||
|
|
||||||
def test_postcopy(self):
|
def test_postcopy(self):
|
||||||
write_size = 0x40000000
|
discard_size = 0x40000000
|
||||||
granularity = 512
|
granularity = 512
|
||||||
chunk = 4096
|
chunk = 4096
|
||||||
|
|
||||||
|
@ -86,25 +88,32 @@ class TestDirtyBitmapPostcopyMigration(iotests.QMPTestCase):
|
||||||
name='bitmap', granularity=granularity)
|
name='bitmap', granularity=granularity)
|
||||||
self.assert_qmp(result, 'return', {})
|
self.assert_qmp(result, 'return', {})
|
||||||
|
|
||||||
|
result = self.vm_a.qmp('x-debug-block-dirty-bitmap-sha256',
|
||||||
|
node='drive0', name='bitmap')
|
||||||
|
empty_sha256 = result['return']['sha256']
|
||||||
|
|
||||||
s = 0
|
s = 0
|
||||||
while s < write_size:
|
while s < discard_size:
|
||||||
self.vm_a.hmp_qemu_io('drive0', 'write %d %d' % (s, chunk))
|
self.vm_a.hmp_qemu_io('drive0', 'discard %d %d' % (s, chunk))
|
||||||
s += 0x10000
|
s += 0x10000
|
||||||
s = 0x8000
|
s = 0x8000
|
||||||
while s < write_size:
|
while s < discard_size:
|
||||||
self.vm_a.hmp_qemu_io('drive0', 'write %d %d' % (s, chunk))
|
self.vm_a.hmp_qemu_io('drive0', 'discard %d %d' % (s, chunk))
|
||||||
s += 0x10000
|
s += 0x10000
|
||||||
|
|
||||||
result = self.vm_a.qmp('x-debug-block-dirty-bitmap-sha256',
|
result = self.vm_a.qmp('x-debug-block-dirty-bitmap-sha256',
|
||||||
node='drive0', name='bitmap')
|
node='drive0', name='bitmap')
|
||||||
sha256 = result['return']['sha256']
|
sha256 = result['return']['sha256']
|
||||||
|
|
||||||
|
# Check, that updating the bitmap by discards works
|
||||||
|
assert sha256 != empty_sha256
|
||||||
|
|
||||||
result = self.vm_a.qmp('block-dirty-bitmap-clear', node='drive0',
|
result = self.vm_a.qmp('block-dirty-bitmap-clear', node='drive0',
|
||||||
name='bitmap')
|
name='bitmap')
|
||||||
self.assert_qmp(result, 'return', {})
|
self.assert_qmp(result, 'return', {})
|
||||||
s = 0
|
s = 0
|
||||||
while s < write_size:
|
while s < discard_size:
|
||||||
self.vm_a.hmp_qemu_io('drive0', 'write %d %d' % (s, chunk))
|
self.vm_a.hmp_qemu_io('drive0', 'discard %d %d' % (s, chunk))
|
||||||
s += 0x10000
|
s += 0x10000
|
||||||
|
|
||||||
caps = [{'capability': 'dirty-bitmaps', 'state': True},
|
caps = [{'capability': 'dirty-bitmaps', 'state': True},
|
||||||
|
@ -126,8 +135,8 @@ class TestDirtyBitmapPostcopyMigration(iotests.QMPTestCase):
|
||||||
self.vm_b_events.append(event_resume)
|
self.vm_b_events.append(event_resume)
|
||||||
|
|
||||||
s = 0x8000
|
s = 0x8000
|
||||||
while s < write_size:
|
while s < discard_size:
|
||||||
self.vm_b.hmp_qemu_io('drive0', 'write %d %d' % (s, chunk))
|
self.vm_b.hmp_qemu_io('drive0', 'discard %d %d' % (s, chunk))
|
||||||
s += 0x10000
|
s += 0x10000
|
||||||
|
|
||||||
match = {'data': {'status': 'completed'}}
|
match = {'data': {'status': 'completed'}}
|
||||||
|
|
Loading…
Reference in a new issue