From: Kevin Wolf <kwolf@redhat.com>
To: Anthony Liguori <anthony@codemonkey.ws>
Cc: Stefan Hajnoczi <stefanha@gmail.com>,
Christoph Hellwig <hch@lst.de>,
qemu-devel@nongnu.org,
Supriya Kannery <supriyak@linux.vnet.ibm.com>
Subject: Re: [Qemu-devel] [V5 Patch 3/4]Qemu: Command "block_set" for dynamic block params change
Date: Mon, 01 Aug 2011 17:44:19 +0200 [thread overview]
Message-ID: <4E36C9D3.4020803@redhat.com> (raw)
In-Reply-To: <4E36C608.2030107@codemonkey.ws>
Am 01.08.2011 17:28, schrieb Anthony Liguori:
> On 08/01/2011 10:22 AM, Stefan Hajnoczi wrote:
>> On Thu, Jul 28, 2011 at 10:29 AM, Stefan Hajnoczi<stefanha@gmail.com> wrote:
>>> On Wed, Jul 27, 2011 at 5:02 PM, Anthony Liguori<anthony@codemonkey.ws> wrote:
>>>> On 07/27/2011 09:31 AM, Stefan Hajnoczi wrote:
>>>>>
>>>>> On Wed, Jul 27, 2011 at 1:58 PM, Anthony Liguori<anthony@codemonkey.ws>
>>>>> 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.
>>>
>>> Use query-block and see if 'hostcache' is there. If yes, then the
>>> hostcache parameter is available. If we allow BlockDrivers to have
>>> their own runtime parameters then query-commands does not tell you
>>> anything because the specific BlockDriver may or may not support that
>>> runtime parameter - you need to use query-block.
>>
>> Let's reach agreement here. The choices are:
>>
>> 1. Top-level block_set command. Supported parameters are discovered
>> by looking query-block output.
>
> I'm strongly opposed to this. There needs to be a single consistent way
> to determine supported operations with QMP.
>
> And that single mechanism already exists--query_commands.
>
>> 2. Top-level command for each parameter (e.g. block_set_hostcache).
>> Supported parameters are easily discoverable via query-commands. If
>> individual block devices support different sets of parameters then
>> they may have to return -ENOTSUPP.
>>
>> I like the block_set approach.
>>
>> Anthony, Kevin, Supriya: Any thoughts?
>
> For the sake of overall QMP sanity, I think block_set_hostcache is
> really our only option.
Ideally we should have blockdev_add, and blockdev_set would just take
the same arguments and update the given driver.
But we don't have blockdev_add today, so whatever works for your as a
temporary solution...
Kevin
next prev parent reply other threads:[~2011-08-01 15:41 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-07-27 11:30 [Qemu-devel] [V5 Patch 0/4]Qemu: Set host cache from cmdline and monitor Supriya Kannery
2011-07-27 11:30 ` [Qemu-devel] [V5 Patch 1/4]Qemu: Enhance "info block" to display host cache setting Supriya Kannery
2011-07-27 14:19 ` Stefan Hajnoczi
2011-07-28 10:39 ` Supriya Kannery
2011-07-27 11:30 ` [Qemu-devel] [V5 Patch 2/4]Qemu: qerrors for file reopen, data sync and cmd syntax Supriya Kannery
2011-07-27 11:30 ` [Qemu-devel] [V5 Patch 3/4]Qemu: Command "block_set" for dynamic block params change Supriya Kannery
2011-07-27 12:58 ` Anthony Liguori
2011-07-27 14:31 ` Stefan Hajnoczi
2011-07-27 16:02 ` Anthony Liguori
2011-07-28 9:29 ` Stefan Hajnoczi
2011-08-01 15:22 ` Stefan Hajnoczi
2011-08-01 15:28 ` Anthony Liguori
2011-08-01 15:34 ` Stefan Hajnoczi
2011-08-01 15:44 ` Kevin Wolf [this message]
2011-08-01 15:44 ` Anthony Liguori
2011-08-04 8:32 ` Supriya Kannery
2011-08-04 8:31 ` Stefan Hajnoczi
2011-08-04 9:33 ` Supriya Kannery
2011-08-04 9:17 ` Supriya Kannery
2011-08-01 15:44 ` Stefan Hajnoczi
2011-08-01 15:46 ` Anthony Liguori
2011-07-28 10:13 ` Supriya Kannery
2011-07-28 12:48 ` Anthony Liguori
2011-07-27 13:43 ` Michael Tokarev
2011-07-27 13:52 ` Anthony Liguori
2011-07-27 14:51 ` Stefan Hajnoczi
2011-07-28 10:23 ` Kevin Wolf
2011-07-28 13:10 ` Stefan Hajnoczi
2011-07-28 13:23 ` Kevin Wolf
2011-07-27 11:31 ` [Qemu-devel] [V5 Patch 4/4]Qemu: Add commandline -drive option 'hostcache' Supriya Kannery
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4E36C9D3.4020803@redhat.com \
--to=kwolf@redhat.com \
--cc=anthony@codemonkey.ws \
--cc=hch@lst.de \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@gmail.com \
--cc=supriyak@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.