* [PATCH for-7.1 0/2] throttle-groups: use QEMU_CLOCK_REALTIME @ 2022-04-06 15:32 Vladimir Sementsov-Ogievskiy 2022-04-06 15:32 ` [PATCH 1/2] block/throttle-groups: use QEMU_CLOCK_REALTIME for qtest too Vladimir Sementsov-Ogievskiy 2022-04-06 15:32 ` [PATCH 2/2] iotests: add throttle test Vladimir Sementsov-Ogievskiy 0 siblings, 2 replies; 5+ messages in thread From: Vladimir Sementsov-Ogievskiy @ 2022-04-06 15:32 UTC (permalink / raw) To: qemu-block; +Cc: kwolf, v.sementsov-og, berto, qemu-devel, hreitz, vsementsov Hi all! Honestly, I don't know why QEMU_CLOCK_VIRTUAL is used here. Comment say that that's specially for throttle tests, but the simple test (patch 02) just hangs because QEMU_CLOCK_VIRTUAL clock just doesn't tick in this environment.. And if we change the clock to QEMU_CLOCK_REALTIME, new test works, and old tests work as well. What the relation between QEMU_CLOCK_VIRTUAL, qtest and throttle? This code is here since "throttle: Add throttle group support" of 2015.. Vladimir Sementsov-Ogievskiy (2): block/throttle-groups: use QEMU_CLOCK_REALTIME for qtest too iotests: add throttle test block/throttle-groups.c | 4 --- tests/qemu-iotests/tests/throttle | 50 +++++++++++++++++++++++++++ tests/qemu-iotests/tests/throttle.out | 0 3 files changed, 50 insertions(+), 4 deletions(-) create mode 100755 tests/qemu-iotests/tests/throttle create mode 100644 tests/qemu-iotests/tests/throttle.out -- 2.35.1 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 1/2] block/throttle-groups: use QEMU_CLOCK_REALTIME for qtest too 2022-04-06 15:32 [PATCH for-7.1 0/2] throttle-groups: use QEMU_CLOCK_REALTIME Vladimir Sementsov-Ogievskiy @ 2022-04-06 15:32 ` Vladimir Sementsov-Ogievskiy 2022-04-07 6:42 ` Hanna Reitz 2022-04-06 15:32 ` [PATCH 2/2] iotests: add throttle test Vladimir Sementsov-Ogievskiy 1 sibling, 1 reply; 5+ messages in thread From: Vladimir Sementsov-Ogievskiy @ 2022-04-06 15:32 UTC (permalink / raw) To: qemu-block; +Cc: kwolf, v.sementsov-og, berto, qemu-devel, hreitz, vsementsov Virtual clock just doesn't tick for iotests, and throttling just not work. Let's use realtime clock. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@openvz.org> --- block/throttle-groups.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/block/throttle-groups.c b/block/throttle-groups.c index fb203c3ced..029158d797 100644 --- a/block/throttle-groups.c +++ b/block/throttle-groups.c @@ -753,10 +753,6 @@ static void throttle_group_obj_init(Object *obj) ThrottleGroup *tg = THROTTLE_GROUP(obj); tg->clock_type = QEMU_CLOCK_REALTIME; - if (qtest_enabled()) { - /* For testing block IO throttling only */ - tg->clock_type = QEMU_CLOCK_VIRTUAL; - } tg->is_initialized = false; qemu_mutex_init(&tg->lock); throttle_init(&tg->ts); -- 2.35.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] block/throttle-groups: use QEMU_CLOCK_REALTIME for qtest too 2022-04-06 15:32 ` [PATCH 1/2] block/throttle-groups: use QEMU_CLOCK_REALTIME for qtest too Vladimir Sementsov-Ogievskiy @ 2022-04-07 6:42 ` Hanna Reitz 2022-04-07 10:45 ` Vladimir Sementsov-Ogievskiy 0 siblings, 1 reply; 5+ messages in thread From: Hanna Reitz @ 2022-04-07 6:42 UTC (permalink / raw) To: Vladimir Sementsov-Ogievskiy, qemu-block Cc: kwolf, vsementsov, v.sementsov-og, berto, qemu-devel On 06.04.22 17:32, Vladimir Sementsov-Ogievskiy wrote: > Virtual clock just doesn't tick for iotests, and throttling just not > work. Let's use realtime clock. It does tick when you make it take, specifically with the clock_step qtest command. 093 does this, and so with this patch, it fails, because it is no longer deterministic. So far, if I needed realtime throttling, I simply switched the accelerator to tcg (e.g. in stream-error-on-reset). I’m not really opposed to this, but it does break 093, and without looking too closely into it, I would guess that it’d be difficult to rewrite 093 in a deterministic way without it relying on throttling using the virtual clock. (A runtime option for the throttle-group object to choose the clock type might be an option.) > Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@openvz.org> > --- > block/throttle-groups.c | 4 ---- > 1 file changed, 4 deletions(-) > > diff --git a/block/throttle-groups.c b/block/throttle-groups.c > index fb203c3ced..029158d797 100644 > --- a/block/throttle-groups.c > +++ b/block/throttle-groups.c > @@ -753,10 +753,6 @@ static void throttle_group_obj_init(Object *obj) > ThrottleGroup *tg = THROTTLE_GROUP(obj); > > tg->clock_type = QEMU_CLOCK_REALTIME; > - if (qtest_enabled()) { > - /* For testing block IO throttling only */ > - tg->clock_type = QEMU_CLOCK_VIRTUAL; > - } > tg->is_initialized = false; > qemu_mutex_init(&tg->lock); > throttle_init(&tg->ts); ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] block/throttle-groups: use QEMU_CLOCK_REALTIME for qtest too 2022-04-07 6:42 ` Hanna Reitz @ 2022-04-07 10:45 ` Vladimir Sementsov-Ogievskiy 0 siblings, 0 replies; 5+ messages in thread From: Vladimir Sementsov-Ogievskiy @ 2022-04-07 10:45 UTC (permalink / raw) To: Hanna Reitz, Vladimir Sementsov-Ogievskiy, qemu-block Cc: qemu-devel, kwolf, berto, vsementsov Thanks for explanation! 07.04.2022 09:42, Hanna Reitz wrote: > On 06.04.22 17:32, Vladimir Sementsov-Ogievskiy wrote: >> Virtual clock just doesn't tick for iotests, and throttling just not >> work. Let's use realtime clock. > > It does tick when you make it take, specifically with the clock_step qtest command. 093 does this, and so with this patch, it fails, because it is no longer deterministic. > > So far, if I needed realtime throttling, I simply switched the accelerator to tcg (e.g. in stream-error-on-reset). Hm, I tried but it doesn't help (Add vm.add_args('-accel', 'tcg') before vm.launch() in the test), as " -accel qtest" is kept anyway, and therefore do_configure_accelerator is called for qtest and finally qtest_allowed is set to true. But using QEMUMachine class instead of VM helps. > > I’m not really opposed to this, but it does break 093, and without looking too closely into it, I would guess that it’d be difficult to rewrite 093 in a deterministic way without it relying on throttling using the virtual clock. (A runtime option for the throttle-group object to choose the clock type might be an option.) OK, I don't think we need these patches now. > >> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@openvz.org> >> --- >> block/throttle-groups.c | 4 ---- >> 1 file changed, 4 deletions(-) >> >> diff --git a/block/throttle-groups.c b/block/throttle-groups.c >> index fb203c3ced..029158d797 100644 >> --- a/block/throttle-groups.c >> +++ b/block/throttle-groups.c >> @@ -753,10 +753,6 @@ static void throttle_group_obj_init(Object *obj) >> ThrottleGroup *tg = THROTTLE_GROUP(obj); >> tg->clock_type = QEMU_CLOCK_REALTIME; >> - if (qtest_enabled()) { >> - /* For testing block IO throttling only */ >> - tg->clock_type = QEMU_CLOCK_VIRTUAL; >> - } >> tg->is_initialized = false; >> qemu_mutex_init(&tg->lock); >> throttle_init(&tg->ts); > -- Best regards, Vladimir ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 2/2] iotests: add throttle test 2022-04-06 15:32 [PATCH for-7.1 0/2] throttle-groups: use QEMU_CLOCK_REALTIME Vladimir Sementsov-Ogievskiy 2022-04-06 15:32 ` [PATCH 1/2] block/throttle-groups: use QEMU_CLOCK_REALTIME for qtest too Vladimir Sementsov-Ogievskiy @ 2022-04-06 15:32 ` Vladimir Sementsov-Ogievskiy 1 sibling, 0 replies; 5+ messages in thread From: Vladimir Sementsov-Ogievskiy @ 2022-04-06 15:32 UTC (permalink / raw) To: qemu-block; +Cc: kwolf, v.sementsov-og, berto, qemu-devel, hreitz, vsementsov Add simple test for throttle filter driver. Without previous "block/throttle-groups: use QEMU_CLOCK_REALTIME for qtest too" commit the test hangs forever, because previously used VIRTUAL clock just doesn't tick for iotests. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@openvz.org> --- tests/qemu-iotests/tests/throttle | 50 +++++++++++++++++++++++++++ tests/qemu-iotests/tests/throttle.out | 0 2 files changed, 50 insertions(+) create mode 100755 tests/qemu-iotests/tests/throttle create mode 100644 tests/qemu-iotests/tests/throttle.out diff --git a/tests/qemu-iotests/tests/throttle b/tests/qemu-iotests/tests/throttle new file mode 100755 index 0000000000..63b802cee7 --- /dev/null +++ b/tests/qemu-iotests/tests/throttle @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 +# group: auto +# +# Simple test for throttle filter driver. +# +# Copyright (c) 2022 Virtuozzo International GmbH +# +# 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 <http://www.gnu.org/licenses/>. +# + +import iotests + +with iotests.VM() as vm: + vm.launch() + + result = vm.qmp('object-add', { + 'qom-type': 'throttle-group', + 'id': 'group0', + 'limits': {'bps-write': 512 * 1024} + }) + assert result == {'return': {}} + + result = vm.qmp('blockdev-add', { + 'node-name': 'throt', + 'driver': 'throttle', + 'throttle-group': 'group0', + 'file': { + 'driver': 'null-co', + 'size': 1024 * 1024 + } + }) + assert result == {'return': {}} + + result = vm.hmp_qemu_io('throt', 'write 0 512K') + assert result == {'return': ''} + + # We need second write to trigger throttling + result = vm.hmp_qemu_io('throt', 'write 512K 512K') + assert result == {'return': ''} diff --git a/tests/qemu-iotests/tests/throttle.out b/tests/qemu-iotests/tests/throttle.out new file mode 100644 index 0000000000..e69de29bb2 -- 2.35.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2022-04-07 10:47 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-04-06 15:32 [PATCH for-7.1 0/2] throttle-groups: use QEMU_CLOCK_REALTIME Vladimir Sementsov-Ogievskiy 2022-04-06 15:32 ` [PATCH 1/2] block/throttle-groups: use QEMU_CLOCK_REALTIME for qtest too Vladimir Sementsov-Ogievskiy 2022-04-07 6:42 ` Hanna Reitz 2022-04-07 10:45 ` Vladimir Sementsov-Ogievskiy 2022-04-06 15:32 ` [PATCH 2/2] iotests: add throttle test Vladimir Sementsov-Ogievskiy
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).