* [PATCH v5 0/1] util/async-teardown: appear in query-command-line-options @ 2023-03-27 13:35 Claudio Imbrenda 2023-03-27 13:35 ` [PATCH v5 1/1] util/async-teardown: wire up query-command-line-options Claudio Imbrenda 0 siblings, 1 reply; 6+ messages in thread From: Claudio Imbrenda @ 2023-03-27 13:35 UTC (permalink / raw) To: pbonzini Cc: qemu-devel, david, thuth, borntraeger, frankja, fiuczy, pasic, nsg, berrange, alex.bennee, armbru Add new -teardown option with an async=on|off parameter. It is visible in the output of query-command-line-options QMP command, so it can be discovered and used by libvirt. The option -async-teardown is now redundant. We'd normally deprecate it and remove it after a grace period, but it was introduced only in the previous version and it had no users, since it was not visible in the query-command-line-options QMP command. Drop it. v4->v5 * reword commit message [Markus] * document the removal of the -async-teardown commandline option in docs/about/removed-features.rst [Markus] v3->v4 * completely remove the useless -async-teardown option, since it was not wired up properly and it had no users [thomas] * QEMU should be always uppercase in text and documentation [thomas] * if the new -teardown option fails to parse, exit immediately instead of returning an error [thomas] v2->v3 * add a new teardown option with an async parameter [Markus] * reworded documentation of existing -async-teardown option so that it points to the new teardown option v1->v2 * remove the unneeded .implied_opt_name initializer [Thomas] Claudio Imbrenda (1): util/async-teardown: wire up query-command-line-options docs/about/removed-features.rst | 5 +++++ os-posix.c | 15 +++++++++++++-- qemu-options.hx | 33 +++++++++++++++++++-------------- util/async-teardown.c | 21 +++++++++++++++++++++ 4 files changed, 58 insertions(+), 16 deletions(-) -- 2.39.2 ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v5 1/1] util/async-teardown: wire up query-command-line-options 2023-03-27 13:35 [PATCH v5 0/1] util/async-teardown: appear in query-command-line-options Claudio Imbrenda @ 2023-03-27 13:35 ` Claudio Imbrenda 2023-03-27 21:16 ` Paolo Bonzini 0 siblings, 1 reply; 6+ messages in thread From: Claudio Imbrenda @ 2023-03-27 13:35 UTC (permalink / raw) To: pbonzini Cc: qemu-devel, david, thuth, borntraeger, frankja, fiuczy, pasic, nsg, berrange, alex.bennee, armbru Add new -teardown option with an async=on|off parameter. It is visible in the output of query-command-line-options QMP command, so it can be discovered and used by libvirt. The option -async-teardown is now redundant. We'd normally deprecate it and remove it after a grace period, but it was introduced only in the previous version and it had no users, since it was not visible in the query-command-line-options QMP command. Drop it. Reported-by: Boris Fiuczynski <fiuczy@linux.ibm.com> Fixes: c891c24b1a ("os-posix: asynchronous teardown for shutdown on Linux") Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com> --- docs/about/removed-features.rst | 5 +++++ os-posix.c | 15 +++++++++++++-- qemu-options.hx | 33 +++++++++++++++++++-------------- util/async-teardown.c | 21 +++++++++++++++++++++ 4 files changed, 58 insertions(+), 16 deletions(-) diff --git a/docs/about/removed-features.rst b/docs/about/removed-features.rst index 5b258b446b..6d89f69be9 100644 --- a/docs/about/removed-features.rst +++ b/docs/about/removed-features.rst @@ -416,6 +416,11 @@ Input parameters that take a size value should only use a size suffix the value is hexadecimal. That is, '0x20M' should be written either as '32M' or as '0x2000000'. +``-async-teardown`` (removed in 8.0) +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, + +Use ``-teardown async=on`` instead. + ``-chardev`` backend aliases ``tty`` and ``parport`` (removed in 8.0) ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' diff --git a/os-posix.c b/os-posix.c index 5adc69f560..c1ca7b1cb3 100644 --- a/os-posix.c +++ b/os-posix.c @@ -36,6 +36,8 @@ #include "qemu/log.h" #include "sysemu/runstate.h" #include "qemu/cutils.h" +#include "qemu/config-file.h" +#include "qemu/option.h" #ifdef CONFIG_LINUX #include <sys/prctl.h> @@ -132,6 +134,8 @@ static bool os_parse_runas_uid_gid(const char *optarg) */ int os_parse_cmd_args(int index, const char *optarg) { + QemuOpts *opts; + switch (index) { case QEMU_OPTION_runas: user_pwd = getpwnam(optarg); @@ -152,8 +156,15 @@ int os_parse_cmd_args(int index, const char *optarg) daemonize = 1; break; #if defined(CONFIG_LINUX) - case QEMU_OPTION_asyncteardown: - init_async_teardown(); + case QEMU_OPTION_teardown: + opts = qemu_opts_parse_noisily(qemu_find_opts("teardown"), + optarg, false); + if (!opts) { + exit(1); + } + if (qemu_opt_get_bool(opts, "async", false)) { + init_async_teardown(); + } break; #endif default: diff --git a/qemu-options.hx b/qemu-options.hx index d42f60fb91..6a69b84f3c 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -4763,23 +4763,28 @@ DEF("qtest", HAS_ARG, QEMU_OPTION_qtest, "", QEMU_ARCH_ALL) DEF("qtest-log", HAS_ARG, QEMU_OPTION_qtest_log, "", QEMU_ARCH_ALL) #ifdef __linux__ -DEF("async-teardown", 0, QEMU_OPTION_asyncteardown, - "-async-teardown enable asynchronous teardown\n", +DEF("teardown", HAS_ARG, QEMU_OPTION_teardown, + "-teardown async[=on|off]\n" + " process teardown options\n" + " async=on enables asynchronous teardown\n" + , QEMU_ARCH_ALL) -#endif SRST -``-async-teardown`` - Enable asynchronous teardown. A new process called "cleanup/<QEMU_PID>" - will be created at startup sharing the address space with the main qemu - process, using clone. It will wait for the main qemu process to - terminate completely, and then exit. - This allows qemu to terminate very quickly even if the guest was - huge, leaving the teardown of the address space to the cleanup - process. Since the cleanup process shares the same cgroups as the - main qemu process, accounting is performed correctly. This only - works if the cleanup process is not forcefully killed with SIGKILL - before the main qemu process has terminated completely. +``-teardown`` + Set process teardown options. + + ``async=on`` enables asynchronous teardown. A new process called + "cleanup/<QEMU_PID>" will be created at startup sharing the address + space with the main QEMU process, using clone. It will wait for the + main QEMU process to terminate completely, and then exit. This allows + QEMU to terminate very quickly even if the guest was huge, leaving the + teardown of the address space to the cleanup process. Since the cleanup + process shares the same cgroups as the main QEMU process, accounting is + performed correctly. This only works if the cleanup process is not + forcefully killed with SIGKILL before the main QEMU process has + terminated completely. ERST +#endif DEF("msg", HAS_ARG, QEMU_OPTION_msg, "-msg [timestamp[=on|off]][,guest-name=[on|off]]\n" diff --git a/util/async-teardown.c b/util/async-teardown.c index 62cdeb0f20..4a5dbce958 100644 --- a/util/async-teardown.c +++ b/util/async-teardown.c @@ -12,6 +12,9 @@ */ #include "qemu/osdep.h" +#include "qemu/config-file.h" +#include "qemu/option.h" +#include "qemu/module.h" #include <dirent.h> #include <sys/prctl.h> #include <sched.h> @@ -144,3 +147,21 @@ void init_async_teardown(void) clone(async_teardown_fn, new_stack_for_clone(), CLONE_VM, NULL); sigprocmask(SIG_SETMASK, &old_signals, NULL); } + +static QemuOptsList qemu_teardown_opts = { + .name = "teardown", + .head = QTAILQ_HEAD_INITIALIZER(qemu_teardown_opts.head), + .desc = { + { + .name = "async", + .type = QEMU_OPT_BOOL, + }, + { /* end of list */ } + }, +}; + +static void register_teardown(void) +{ + qemu_add_opts(&qemu_teardown_opts); +} +opts_init(register_teardown); -- 2.39.2 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v5 1/1] util/async-teardown: wire up query-command-line-options 2023-03-27 13:35 ` [PATCH v5 1/1] util/async-teardown: wire up query-command-line-options Claudio Imbrenda @ 2023-03-27 21:16 ` Paolo Bonzini 2023-03-28 5:26 ` Markus Armbruster 0 siblings, 1 reply; 6+ messages in thread From: Paolo Bonzini @ 2023-03-27 21:16 UTC (permalink / raw) To: Claudio Imbrenda Cc: qemu-devel, David Hildenbrand, Thomas Huth, Borntraeger, Christian, Janosch Frank, fiuczy, Halil Pasic, nsg, P. Berrange, Daniel, Alex Bennée, Armbruster, Markus [-- Attachment #1: Type: text/plain, Size: 6593 bytes --] I am honestly not a fan of adding a more complex option,.just because query-command-line-options only returns the square holes whereas here we got a round one. Can we imagine another functionality that would be added to -teardown? If not, it's not a good design. If it works, I would add a completely dummy (no suboptions) group "async-teardown" and not modify the parsing at all. Paolo Il lun 27 mar 2023, 15:35 Claudio Imbrenda <imbrenda@linux.ibm.com> ha scritto: > Add new -teardown option with an async=on|off parameter. It is visible > in the output of query-command-line-options QMP command, so it can be > discovered and used by libvirt. > > The option -async-teardown is now redundant. We'd normally deprecate it > and remove it after a grace period, but it was introduced only in the > previous version and it had no users, since it was not visible in the > query-command-line-options QMP command. Drop it. > > Reported-by: Boris Fiuczynski <fiuczy@linux.ibm.com> > Fixes: c891c24b1a ("os-posix: asynchronous teardown for shutdown on Linux") > Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com> > --- > docs/about/removed-features.rst | 5 +++++ > os-posix.c | 15 +++++++++++++-- > qemu-options.hx | 33 +++++++++++++++++++-------------- > util/async-teardown.c | 21 +++++++++++++++++++++ > 4 files changed, 58 insertions(+), 16 deletions(-) > > diff --git a/docs/about/removed-features.rst > b/docs/about/removed-features.rst > index 5b258b446b..6d89f69be9 100644 > --- a/docs/about/removed-features.rst > +++ b/docs/about/removed-features.rst > @@ -416,6 +416,11 @@ Input parameters that take a size value should only > use a size suffix > the value is hexadecimal. That is, '0x20M' should be written either as > '32M' or as '0x2000000'. > > +``-async-teardown`` (removed in 8.0) > +,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, > + > +Use ``-teardown async=on`` instead. > + > ``-chardev`` backend aliases ``tty`` and ``parport`` (removed in 8.0) > ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' > > diff --git a/os-posix.c b/os-posix.c > index 5adc69f560..c1ca7b1cb3 100644 > --- a/os-posix.c > +++ b/os-posix.c > @@ -36,6 +36,8 @@ > #include "qemu/log.h" > #include "sysemu/runstate.h" > #include "qemu/cutils.h" > +#include "qemu/config-file.h" > +#include "qemu/option.h" > > #ifdef CONFIG_LINUX > #include <sys/prctl.h> > @@ -132,6 +134,8 @@ static bool os_parse_runas_uid_gid(const char *optarg) > */ > int os_parse_cmd_args(int index, const char *optarg) > { > + QemuOpts *opts; > + > switch (index) { > case QEMU_OPTION_runas: > user_pwd = getpwnam(optarg); > @@ -152,8 +156,15 @@ int os_parse_cmd_args(int index, const char *optarg) > daemonize = 1; > break; > #if defined(CONFIG_LINUX) > - case QEMU_OPTION_asyncteardown: > - init_async_teardown(); > + case QEMU_OPTION_teardown: > + opts = qemu_opts_parse_noisily(qemu_find_opts("teardown"), > + optarg, false); > + if (!opts) { > + exit(1); > + } > + if (qemu_opt_get_bool(opts, "async", false)) { > + init_async_teardown(); > + } > break; > #endif > default: > diff --git a/qemu-options.hx b/qemu-options.hx > index d42f60fb91..6a69b84f3c 100644 > --- a/qemu-options.hx > +++ b/qemu-options.hx > @@ -4763,23 +4763,28 @@ DEF("qtest", HAS_ARG, QEMU_OPTION_qtest, "", > QEMU_ARCH_ALL) > DEF("qtest-log", HAS_ARG, QEMU_OPTION_qtest_log, "", QEMU_ARCH_ALL) > > #ifdef __linux__ > -DEF("async-teardown", 0, QEMU_OPTION_asyncteardown, > - "-async-teardown enable asynchronous teardown\n", > +DEF("teardown", HAS_ARG, QEMU_OPTION_teardown, > + "-teardown async[=on|off]\n" > + " process teardown options\n" > + " async=on enables asynchronous teardown\n" > + , > QEMU_ARCH_ALL) > -#endif > SRST > -``-async-teardown`` > - Enable asynchronous teardown. A new process called > "cleanup/<QEMU_PID>" > - will be created at startup sharing the address space with the main > qemu > - process, using clone. It will wait for the main qemu process to > - terminate completely, and then exit. > - This allows qemu to terminate very quickly even if the guest was > - huge, leaving the teardown of the address space to the cleanup > - process. Since the cleanup process shares the same cgroups as the > - main qemu process, accounting is performed correctly. This only > - works if the cleanup process is not forcefully killed with SIGKILL > - before the main qemu process has terminated completely. > +``-teardown`` > + Set process teardown options. > + > + ``async=on`` enables asynchronous teardown. A new process called > + "cleanup/<QEMU_PID>" will be created at startup sharing the address > + space with the main QEMU process, using clone. It will wait for the > + main QEMU process to terminate completely, and then exit. This allows > + QEMU to terminate very quickly even if the guest was huge, leaving the > + teardown of the address space to the cleanup process. Since the > cleanup > + process shares the same cgroups as the main QEMU process, accounting > is > + performed correctly. This only works if the cleanup process is not > + forcefully killed with SIGKILL before the main QEMU process has > + terminated completely. > ERST > +#endif > > DEF("msg", HAS_ARG, QEMU_OPTION_msg, > "-msg [timestamp[=on|off]][,guest-name=[on|off]]\n" > diff --git a/util/async-teardown.c b/util/async-teardown.c > index 62cdeb0f20..4a5dbce958 100644 > --- a/util/async-teardown.c > +++ b/util/async-teardown.c > @@ -12,6 +12,9 @@ > */ > > #include "qemu/osdep.h" > +#include "qemu/config-file.h" > +#include "qemu/option.h" > +#include "qemu/module.h" > #include <dirent.h> > #include <sys/prctl.h> > #include <sched.h> > @@ -144,3 +147,21 @@ void init_async_teardown(void) > clone(async_teardown_fn, new_stack_for_clone(), CLONE_VM, NULL); > sigprocmask(SIG_SETMASK, &old_signals, NULL); > } > + > +static QemuOptsList qemu_teardown_opts = { > + .name = "teardown", > + .head = QTAILQ_HEAD_INITIALIZER(qemu_teardown_opts.head), > + .desc = { > + { > + .name = "async", > + .type = QEMU_OPT_BOOL, > + }, > + { /* end of list */ } > + }, > +}; > + > +static void register_teardown(void) > +{ > + qemu_add_opts(&qemu_teardown_opts); > +} > +opts_init(register_teardown); > -- > 2.39.2 > > [-- Attachment #2: Type: text/html, Size: 8496 bytes --] ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v5 1/1] util/async-teardown: wire up query-command-line-options 2023-03-27 21:16 ` Paolo Bonzini @ 2023-03-28 5:26 ` Markus Armbruster 2023-03-28 7:20 ` Thomas Huth 0 siblings, 1 reply; 6+ messages in thread From: Markus Armbruster @ 2023-03-28 5:26 UTC (permalink / raw) To: Paolo Bonzini Cc: Claudio Imbrenda, qemu-devel, David Hildenbrand, Thomas Huth, Borntraeger, Christian, Janosch Frank, fiuczy, Halil Pasic, nsg, P. Berrange, Daniel, Alex Bennée Paolo Bonzini <pbonzini@redhat.com> writes: > I am honestly not a fan of adding a more complex option,.just because > query-command-line-options only returns the square holes whereas here we > got a round one. > > Can we imagine another functionality that would be added to -teardown? If > not, it's not a good design. If it works, I would add a completely dummy > (no suboptions) group "async-teardown" and not modify the parsing at all. Does v2 implement your suggestion? Message-Id: <20230320131648.61728-1-imbrenda@linux.ibm.com> I dislike it, because it makes query-command-line-options claim -async-teardown has an option argument with unknown keys, which is plainly wrong, and must be treated as a special case. Worse, a new kind of special case. Can we have a QMP command, so libvirt can use query-qmp-schema? In case QMP becomes functional too late for the command to actually work: make it always fail for now. It can still serve as a witness for -async-teardown. If we rework QEMU startup so that QMP can do everything the CLI can do, we'll make the QMP command work. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v5 1/1] util/async-teardown: wire up query-command-line-options 2023-03-28 5:26 ` Markus Armbruster @ 2023-03-28 7:20 ` Thomas Huth 2023-03-28 7:57 ` Markus Armbruster 0 siblings, 1 reply; 6+ messages in thread From: Thomas Huth @ 2023-03-28 7:20 UTC (permalink / raw) To: Markus Armbruster, Paolo Bonzini Cc: Claudio Imbrenda, qemu-devel, David Hildenbrand, Borntraeger, Christian, Janosch Frank, fiuczy, Halil Pasic, nsg, P. Berrange, Daniel, Alex Bennée On 28/03/2023 07.26, Markus Armbruster wrote: > Paolo Bonzini <pbonzini@redhat.com> writes: > >> I am honestly not a fan of adding a more complex option,.just because >> query-command-line-options only returns the square holes whereas here we >> got a round one. >> >> Can we imagine another functionality that would be added to -teardown? If >> not, it's not a good design. If it works, I would add a completely dummy >> (no suboptions) group "async-teardown" and not modify the parsing at all. > > Does v2 implement your suggestion? > Message-Id: <20230320131648.61728-1-imbrenda@linux.ibm.com> > > I dislike it, because it makes query-command-line-options claim > -async-teardown has an option argument with unknown keys, which is > plainly wrong, and must be treated as a special case. Worse, a new kind > of special case. I agree with Markus, it sounds like a bad idea to create a new special case for this. Paolo, what do you think of my "-run-with" suggestion here: https://lore.kernel.org/qemu-devel/3237c289-b8c2-6ea2-8bfb-7eeed637efc7@redhat.com/ I still think that this is a good idea, even if it is a "grab-bag" as Markus said, it would give us a place where we could wire future similar options, too, without running into this problem here again and again. > Can we have a QMP command, so libvirt can use query-qmp-schema? Question is whether this could be toggled during runtime...? Or did you mean a command that just queries the setting of the option, e.g. "query-async-teardown" which then reports whether it is enabled or not? > In case QMP becomes functional too late for the command to actually > work: make it always fail for now. It can still serve as a witness for > -async-teardown. If we rework QEMU startup so that QMP can do > everything the CLI can do, we'll make the QMP command work. Adding non-working functions sounds ugly... Anyway, we're slowly running out of time for QEMU 8.0 ... if we can't find an easy solution, I think we should rather postpone this to the next cycle instead of rushing unfinished stuff now. Thomas ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v5 1/1] util/async-teardown: wire up query-command-line-options 2023-03-28 7:20 ` Thomas Huth @ 2023-03-28 7:57 ` Markus Armbruster 0 siblings, 0 replies; 6+ messages in thread From: Markus Armbruster @ 2023-03-28 7:57 UTC (permalink / raw) To: Thomas Huth Cc: Paolo Bonzini, Claudio Imbrenda, qemu-devel, David Hildenbrand, Borntraeger, Christian, Janosch Frank, fiuczy, Halil Pasic, nsg, P. Berrange, Daniel, Alex Bennée Thomas Huth <thuth@redhat.com> writes: > On 28/03/2023 07.26, Markus Armbruster wrote: >> Paolo Bonzini <pbonzini@redhat.com> writes: >> >>> I am honestly not a fan of adding a more complex option,.just because >>> query-command-line-options only returns the square holes whereas here we >>> got a round one. >>> >>> Can we imagine another functionality that would be added to -teardown? If >>> not, it's not a good design. If it works, I would add a completely dummy >>> (no suboptions) group "async-teardown" and not modify the parsing at all. >> >> Does v2 implement your suggestion? >> Message-Id: <20230320131648.61728-1-imbrenda@linux.ibm.com> >> >> I dislike it, because it makes query-command-line-options claim >> -async-teardown has an option argument with unknown keys, which is >> plainly wrong, and must be treated as a special case. Worse, a new kind >> of special case. > > I agree with Markus, it sounds like a bad idea to create a new special case for this. > > Paolo, what do you think of my "-run-with" suggestion here: > > > https://lore.kernel.org/qemu-devel/3237c289-b8c2-6ea2-8bfb-7eeed637efc7@redhat.com/ > > I still think that this is a good idea, even if it is a "grab-bag" as Markus said, it would give us a place where we could wire future similar options, too, without running into this problem here again and again. > >> Can we have a QMP command, so libvirt can use query-qmp-schema? > > Question is whether this could be toggled during runtime...? Or did you mean a command that just queries the setting of the option, e.g. "query-async-teardown" which then reports whether it is enabled or not? Mildly ugly, as the command is pretty much useless except as a witness for the CLI option. We've done this before. >> In case QMP becomes functional too late for the command to actually >> work: make it always fail for now. It can still serve as a witness for >> -async-teardown. If we rework QEMU startup so that QMP can do >> everything the CLI can do, we'll make the QMP command work. > > Adding non-working functions sounds ugly... Non-working functions that could totally work with QEMU startup reworked are only mildly ugly, I think. > Anyway, we're slowly running out of time for QEMU 8.0 ... if we can't find an easy solution, I think we should rather postpone this to the next cycle instead of rushing unfinished stuff now. Yes. I think we can still do it if we agree quickly on which kind of ugly we hate the least. Adding -async-teardown as a stable interface was premature. We should have marked it unstable when no libvirt patch was ready when we cut QEMU 7.2. Adding new external interfaces is still not hard enough :) ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2023-03-28 7:58 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2023-03-27 13:35 [PATCH v5 0/1] util/async-teardown: appear in query-command-line-options Claudio Imbrenda 2023-03-27 13:35 ` [PATCH v5 1/1] util/async-teardown: wire up query-command-line-options Claudio Imbrenda 2023-03-27 21:16 ` Paolo Bonzini 2023-03-28 5:26 ` Markus Armbruster 2023-03-28 7:20 ` Thomas Huth 2023-03-28 7:57 ` Markus Armbruster
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.