From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:44960) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Qm6ZU-0004lS-3O for qemu-devel@nongnu.org; Wed, 27 Jul 2011 12:02:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Qm6ZT-0004PY-5p for qemu-devel@nongnu.org; Wed, 27 Jul 2011 12:02:56 -0400 Received: from mail-qw0-f45.google.com ([209.85.216.45]:40169) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Qm6ZT-0004PP-3W for qemu-devel@nongnu.org; Wed, 27 Jul 2011 12:02:55 -0400 Received: by qwj8 with SMTP id 8so1159786qwj.4 for ; Wed, 27 Jul 2011 09:02:54 -0700 (PDT) Message-ID: <4E3036AA.8030604@codemonkey.ws> Date: Wed, 27 Jul 2011 11:02:50 -0500 From: Anthony Liguori MIME-Version: 1.0 References: <20110727113000.25109.16204.sendpatchset@skannery> <20110727113045.25109.54866.sendpatchset@skannery> <4E300B8E.2020509@codemonkey.ws> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [V5 Patch 3/4]Qemu: Command "block_set" for dynamic block params change List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Stefan Hajnoczi Cc: Kevin Wolf , Supriya Kannery , qemu-devel@nongnu.org, Christoph Hellwig On 07/27/2011 09:31 AM, Stefan Hajnoczi wrote: > On Wed, Jul 27, 2011 at 1:58 PM, Anthony Liguori wrote: >>> Index: qemu/hmp-commands.hx >>> =================================================================== >>> --- qemu.orig/hmp-commands.hx >>> +++ qemu/hmp-commands.hx >>> @@ -70,6 +70,20 @@ but should be used with extreme caution. >>> resizes image files, it can not resize block devices like LVM volumes. >>> ETEXI >>> >>> + { >>> + .name = "block_set", >>> + .args_type = "device:B,device:O", >>> + .params = "device [prop=value][,...]", >>> + .help = "Change block device parameters >>> [hostcache=on/off]", >>> + .user_print = monitor_user_noop, >>> + .mhandler.cmd_new = do_block_set, >>> + }, >>> +STEXI >>> +@item block_set @var{config} >>> +@findex block_set >>> +Change block device parameters (eg: hostcache=on/off) while guest is >>> running. >>> +ETEXI >>> + >> >> block_set_hostcache() please. >> >> Multiplexing commands is generally a bad idea. It weakens typing. In the >> absence of a generic way to set block device properties, implementing >> properties as generic in the QMP layer seems like a bad idea to me. > > The idea behind block_set was to have a unified interface for changing > block device parameters at runtime. This prevents us from reinventing > new commands from scratch. For example, block I/O throttling is > already queued up to add run-time parameters. > > Without a unified command we have a bulkier QMP/HMP interface, > duplicated code, and possibly inconsistencies in syntax between the > commands. Isn't the best way to avoid these problems a unified > interface? > > I understand the lack of type safety concern but in this case we > already have to manually pull parsed arguments (i.e. cast to specific > types and deal with invalid input). To me this is a reason *for* > using a unified interface like block_set. Think about it from a client perspective. How do I determine which properties are supported by this version of QEMU? I have no way to identify programmatically what arguments are valid for block_set. OTOH, if you have strong types like block_set_hostcache, query-commands tells me exactly what's supported. Regards, Anthony Liguori > > Stefan >