From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55568) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YOW8K-0001Kd-8W for qemu-devel@nongnu.org; Thu, 19 Feb 2015 13:47:34 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YOW8F-00066a-SU for qemu-devel@nongnu.org; Thu, 19 Feb 2015 13:47:32 -0500 Received: from mx1.redhat.com ([209.132.183.28]:49820) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YOW8F-00066R-Jr for qemu-devel@nongnu.org; Thu, 19 Feb 2015 13:47:27 -0500 Message-ID: <54E62FB8.6040708@redhat.com> Date: Thu, 19 Feb 2015 13:47:20 -0500 From: John Snow MIME-Version: 1.0 References: <1424268014-13293-1-git-send-email-vsementsov@parallels.com> <1424268014-13293-12-git-send-email-vsementsov@parallels.com> In-Reply-To: <1424268014-13293-12-git-send-email-vsementsov@parallels.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH RFC v3 11/14] iotests: add dirty bitmap migration test List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Vladimir Sementsov-Ogievskiy , qemu-devel@nongnu.org Cc: kwolf@redhat.com, peter.maydell@linaro.org, quintela@redhat.com, dgilbert@redhat.com, stefanha@redhat.com, pbonzini@redhat.com, amit.shah@redhat.com, den@openvz.org On 02/18/2015 09:00 AM, Vladimir Sementsov-Ogievskiy wrote: > The test starts two vms (vm_a, vm_b), create dirty bitmap in the first one, do > several writes to corresponding device and then migrate vm_a to vm_b > with dirty bitmaps. > > Signed-off-by: Vladimir Sementsov-Ogievskiy > --- > tests/qemu-iotests/117 | 88 ++++++++++++++++++++++++++++++++++++++++++++++ > tests/qemu-iotests/117.out | 5 +++ > tests/qemu-iotests/group | 1 + > 3 files changed, 94 insertions(+) > create mode 100755 tests/qemu-iotests/117 > create mode 100644 tests/qemu-iotests/117.out > > diff --git a/tests/qemu-iotests/117 b/tests/qemu-iotests/117 > new file mode 100755 > index 0000000..61538cf > --- /dev/null > +++ b/tests/qemu-iotests/117 > @@ -0,0 +1,88 @@ > +#!/usr/bin/env python > +# > +# Tests for dirty bitmaps migration. > +# > +# (C) Vladimir Sementsov-Ogievskiy 2015 > +# > +# This program is free software; you can redistribute it and/or modify > +# it under the terms of the GNU General Public License as published by > +# the Free Software Foundation; either version 2 of the License, or > +# (at your option) any later version. > +# > +# This program is distributed in the hope that it will be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program. If not, see . > +# > + > +import os > +import iotests > +import time > +from iotests import qemu_img > + > +disk_a = os.path.join(iotests.test_dir, 'disk_a') > +disk_b = os.path.join(iotests.test_dir, 'disk_b') > +fifo = os.path.join(iotests.test_dir, 'fifo') > + > +size = 0x40000000 # 1G > +sector_size = 512 > +granularity = 0x10000 > +regions = [ > + { 'start': 0, 'count': 0x100000 }, > + { 'start': 0x10000000, 'count': 0x20000 }, > + { 'start': 0x39990000, 'count': 0x10000 } > + ] > + > +regions_in_sectors = [ > + { key: val / sector_size for (key, val) in el.items() } for el in regions] > + > +class TestDirtyBitmapMigration(iotests.QMPTestCase): > + > + def setUp(self): > + os.mkfifo(fifo) > + qemu_img('create', '-f', iotests.imgfmt, disk_a, str(size)) > + qemu_img('create', '-f', iotests.imgfmt, disk_b, str(size)) > + self.vm_a = iotests.VM().add_drive(disk_a) > + self.vm_b = iotests.VM().add_drive(disk_b) > + self.vm_b.add_incoming_migration("exec: cat " + fifo) > + self.vm_a.launch() > + self.vm_b.launch() > + > + def tearDown(self): > + self.vm_a.shutdown() > + self.vm_b.shutdown() > + os.remove(disk_a) > + os.remove(disk_b) > + os.remove(fifo) > + > + def test_migration(self): > + result = self.vm_a.qmp('block-dirty-bitmap-add', node='drive0', > + name='bitmap', granularity=granularity) > + self.assert_qmp(result, 'return', {}); > + > + for r in regions: > + self.vm_a.hmp_qemu_io('drive0', > + 'write %d %d' % (r['start'], r['count'])) > + > + result = self.vm_a.qmp('query-block-dirty-bitmap', node='drive0', > + name='bitmap') > + self.assert_qmp(result, 'return/dirty-regions', regions_in_sectors) > + > + result = self.vm_a.qmp('migrate-set-capabilities', > + capabilities=[{'capability': 'dirty-bitmaps', > + 'state': True}]) > + self.assert_qmp(result, 'return', {}) > + result = self.vm_a.qmp('migrate', uri='exec:cat>' + fifo) > + while self.vm_a.qmp('query-migrate')['return']['status'] != 'completed': > + time.sleep(1) > + > + result = self.vm_b.qmp('query-block-dirty-bitmap', node='drive0', > + name='bitmap') > + self.assert_qmp(result, 'return/dirty-regions', regions_in_sectors); > + > + > +if __name__ == '__main__': > + iotests.main() > diff --git a/tests/qemu-iotests/117.out b/tests/qemu-iotests/117.out > new file mode 100644 > index 0000000..ae1213e > --- /dev/null > +++ b/tests/qemu-iotests/117.out > @@ -0,0 +1,5 @@ > +. > +---------------------------------------------------------------------- > +Ran 1 tests > + > +OK > diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group > index b4ddf1b..6ad5b55 100644 > --- a/tests/qemu-iotests/group > +++ b/tests/qemu-iotests/group > @@ -118,3 +118,4 @@ > 113 rw auto quick > 114 rw auto quick > 116 rw auto quick > +117 rw auto quick > Spoke with Stefan earlier today and I think my initial hunch of keeping the exhaustive QMP debug commands out of the upstream repo makes more sense right now. Our view was that even if we check in code "to be used for debug only," there's no telling how people or other programs might come to rely on the data, so it's best not to introduce the interface to begin with. I may pull these patches into one of my github repositories, though, since we'll probably need these patches for debugging in the near future. So consider this my NACK for 01 and 11. --js