Commit edb90bbd authored by Vladimir Sementsov-Ogievskiy's avatar Vladimir Sementsov-Ogievskiy Committed by Eric Blake
Browse files

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: default avatarVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: default avatarAndrey Shinkevich <andrey.shinkevich@virtuozzo.com>
Tested-by: default avatarEric Blake <eblake@redhat.com>
Message-Id: <20200727194236.19551-5-vsementsov@virtuozzo.com>
Signed-off-by: default avatarEric Blake <eblake@redhat.com>
parent 09feea6c
Loading
Loading
Loading
Loading
+20 −11
Original line number Diff line number Diff line
@@ -67,8 +67,10 @@ class TestDirtyBitmapPostcopyMigration(iotests.QMPTestCase):
        os.mkfifo(fifo)
        qemu_img('create', '-f', iotests.imgfmt, disk_a, size)
        qemu_img('create', '-f', iotests.imgfmt, disk_b, size)
        self.vm_a = iotests.VM(path_suffix='a').add_drive(disk_a)
        self.vm_b = iotests.VM(path_suffix='b').add_drive(disk_b)
        self.vm_a = iotests.VM(path_suffix='a').add_drive(disk_a,
                                                          '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_a.launch()
        self.vm_b.launch()
@@ -78,7 +80,7 @@ class TestDirtyBitmapPostcopyMigration(iotests.QMPTestCase):
        self.vm_b_events = []

    def test_postcopy(self):
        write_size = 0x40000000
        discard_size = 0x40000000
        granularity = 512
        chunk = 4096

@@ -86,25 +88,32 @@ class TestDirtyBitmapPostcopyMigration(iotests.QMPTestCase):
                               name='bitmap', granularity=granularity)
        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
        while s < write_size:
            self.vm_a.hmp_qemu_io('drive0', 'write %d %d' % (s, chunk))
        while s < discard_size:
            self.vm_a.hmp_qemu_io('drive0', 'discard %d %d' % (s, chunk))
            s += 0x10000
        s = 0x8000
        while s < write_size:
            self.vm_a.hmp_qemu_io('drive0', 'write %d %d' % (s, chunk))
        while s < discard_size:
            self.vm_a.hmp_qemu_io('drive0', 'discard %d %d' % (s, chunk))
            s += 0x10000

        result = self.vm_a.qmp('x-debug-block-dirty-bitmap-sha256',
                               node='drive0', name='bitmap')
        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',
                               name='bitmap')
        self.assert_qmp(result, 'return', {})
        s = 0
        while s < write_size:
            self.vm_a.hmp_qemu_io('drive0', 'write %d %d' % (s, chunk))
        while s < discard_size:
            self.vm_a.hmp_qemu_io('drive0', 'discard %d %d' % (s, chunk))
            s += 0x10000

        caps = [{'capability': 'dirty-bitmaps', 'state': True},
@@ -126,8 +135,8 @@ class TestDirtyBitmapPostcopyMigration(iotests.QMPTestCase):
        self.vm_b_events.append(event_resume)

        s = 0x8000
        while s < write_size:
            self.vm_b.hmp_qemu_io('drive0', 'write %d %d' % (s, chunk))
        while s < discard_size:
            self.vm_b.hmp_qemu_io('drive0', 'discard %d %d' % (s, chunk))
            s += 0x10000

        match = {'data': {'status': 'completed'}}