All of lore.kernel.org
 help / color / mirror / Atom feed
From: George Dunlap <george.dunlap@citrix.com>
To: Juergen Gross <jgross@suse.com>, Jan Beulich <JBeulich@suse.com>
Cc: Tim Deegan <tim@xen.org>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Wei Liu <wei.liu2@citrix.com>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	George Dunlap <George.Dunlap@eu.citrix.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	Ian Jackson <Ian.Jackson@eu.citrix.com>,
	Dario Faggioli <dfaggioli@suse.com>,
	Julien Grall <julien.grall@arm.com>,
	xen-devel <xen-devel@lists.xenproject.org>,
	Daniel de Graaf <dgdegra@tycho.nsa.gov>
Subject: Re: [PATCH 00/12] add per-domain and per-cpupool generic parameters
Date: Tue, 18 Sep 2018 16:21:55 +0100	[thread overview]
Message-ID: <e2aaf382-6451-bb50-afbb-92bf0f5ca864@citrix.com> (raw)
In-Reply-To: <2402a9c3-6d64-091f-8fd1-bb3fb08f7ffb@suse.com>

On 09/18/2018 03:57 PM, Juergen Gross wrote:
> On 18/09/18 15:57, George Dunlap wrote:
>> On 09/18/2018 02:36 PM, Juergen Gross wrote:
>>> On 18/09/18 15:25, George Dunlap wrote:
>>>> On 09/18/2018 12:32 PM, Juergen Gross wrote:
>>>>> On 18/09/18 13:20, Jan Beulich wrote:
>>>>>>>>> On 18.09.18 at 13:10, <jgross@suse.com> wrote:
>>>>>>> On 18/09/18 12:32, Jan Beulich wrote:
>>>>>>>>>>> On 18.09.18 at 08:02, <jgross@suse.com> wrote:
>>>>>>>>> Instead of using binary hypervisor interfaces for new parameters of
>>>>>>>>> domains or cpupools this patch series adds support for generic text
>>>>>>>>> based parameter parsing.
>>>>>>>>>
>>>>>>>>> Parameters are defined via new macros similar to those of boot
>>>>>>>>> parameters. Parsing of parameter strings is done via the already
>>>>>>>>> existing boot parameter parsing function which is extended a little
>>>>>>>>> bit.
>>>>>>>>>
>>>>>>>>> Parameter settings can either be specified in configuration files of
>>>>>>>>> domains or cpupools, or they can be set via new xl sub-commands.
>>>>>>>>
>>>>>>>> Without having looked at any of the patches yet (not even their
>>>>>>>> descriptions) I'm still wondering what the benefit of textual parameters
>>>>>>>> really is: Just like "binary" ones, they become part of the public
>>>>>>>> interface, and hence subsequently can't be changed any more or
>>>>>>>> less than the ones we currently have (in particular, anything valid in
>>>>>>>> a guest config file will imo need to remain to be valid and meaningful
>>>>>>>> down the road).
>>>>>>>
>>>>>>> So lets look what would be needed for adding something like the
>>>>>>> per-domain xpti parameter using binary interfaces:
>>>>>>>
>>>>>>> 1 an extension of some domctl interface, maybe bumping of the domctl
>>>>>>>   interface version
>>>>>>> 2 adding the logic to domctl handling
>>>>>>> 3 adding libxc support
>>>>>>> 4 adding libxl support
>>>>>>> 5 adding a new xl sub-command
>>>>>>> 6 adding domain config support
>>>>>>> 7 adding documentation
>>>>>>>
>>>>>>> With my approach only 2 (in a modified form, parameter handling instead
>>>>>>> of domctl, but comparable in the needed effort) and 7 are needed.
>>>>>>>
>>>>>>> So once the framework is in place it is _much_ easier to add new
>>>>>>> features.
>>>>>>
>>>>>> All the above would hold if the individual options were expressed as
>>>>>> e.g. flags in an extensible bit vector.
>>>>>
>>>>> Who would translate the new option into a bit vector? This would be the
>>>>> tools (libxc/libxl/xl), so those need to be modified for each new bit.
>>>>
>>>> A bit vector would only allow on/off; it wouldn't allow you to set
>>>> numeric parameters, for example.
>>>>
>>>> I like the idea of being able to add configuration parameters without
>>>> having a huge amount of boilerplate; and also of being able to backport
>>>> parameters like xpti without having to worry so much about compatibility.
>>>>
>>>> But I'm not a fan of the idea of using a "string blob" to accomplish
>>>> that.  It's convenient for the exact use case you seem to be
>>>> contemplating: having a user add the string into the xl config file, and
>>>> having nobody but the hypervisor interpret it.  But what about tools
>>>> that may want to set that parameter?  Or tools that want to query the
>>>> parameter, or "introspect" on the domain settings or whatever?  Now they
>>>> have to have a bunch of code to generate and parse the string code.
>>>>
>>>> Could we have a reasonably generic structure / union, with a parameter
>>>> number, that we could pass in instead?  Something like:
>>>>
>>>> struct domain_parameter {
>>>>   int param_num;
>>>>   int val;
>>>> }
>>>>
>>>> And then have a list somewhere of string values -> parameter numbers
>>>> that callers could use to translate strings into values?
>>>>
>>>> That way the above list would look like:
>>>>
>>>> 1. Add new parameter in Xen
>>>> 2. Add a string name -> parameter number in a header somewhere
>>>> 3. Add a libxl #define with that parameter number
>>>>
>>>> You'd have to recompile xl against the new header, but you were probably
>>>> going to do that anyway.
>>>
>>> The string variant is much more flexible.
>>>
>>> It is easy possible to e.g. add a per-domain trace parameter to specify
>>> rather complex trace instrumentations. Doing something like that via a
>>> struct based interface is in the best case complicated.
>>
>> ...or, for instance, specifying the runqueue layout of a cpupool (for
>> schedulers like credit2 which allow such things).  Yes, that is true;
>> but probably a very niche case.
>>
>>> Another advantage of the string based variant is that you don't need a
>>> central header. You can define the parameters where you are implementing
>>> them. No need to expand switch statements and headers, just a local
>>> definition and maybe a handler function.
>>
>> I don't see the lack of central header as a big advantage -- how hard is
>> it to add a single line to a list somewhere?
> 
> That's not very hard.
> 
> You need additional entries for connecting the domctl with the parameter
> setting:
> 
> /* central header: */
> #define PARAM_XPTI 13
> 
> /* domctl handling: */
> switch (param) {
> case PARAM_XPTI: ret = do_param_xpti_setting(value);
>     break;
> 
> /* pv-dom header: */
> int do_param_xpti_setting(int val);
> 
> /* pv-dom handler: */
> int do_param_xpti_setting(int val)
> {
> ...
> }
> 
> So you need to touch at least four files in the hypervisor, plus the
> parsing added in xl.
> 
> The string-only variant needs:
> 
> /* pv-dom handler: */
> static int do_param_xpti_setting(...)
> {
> ...
> }
> custom_domain_param("xpti", ...);
> 
> And that's all. See the difference?

I don't think we need the function prototype or a switch statement.

params.h:
#define PARAM_XPTI 13

[later]
   [PARAM_XPTI]="xpti"

pv-dom.c:

static int do_param_xpti_setting(...)
{
...
}
custom_domain_param(XPTI, do_param_xpti_setting);

Multiplexing over the parameter values would be done the same way as
multiplexing over the string values.

Sure it's a tiny bit more convenient not to have to edit params.h; but
having a parameter number, and for most values an integer value, makes
doing things with these programmaticaly in the toolstack a lot easier
and more robust.

Like I said, I'm not 100% opposed to "string blobs" if other people
think it's a good idea; I just think we can do a bit better.

 -George

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

  reply	other threads:[~2018-09-18 15:22 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20180918060309.7186=ef=bf=bd1=ef=bf=bdjgross@suse.com?= =?UTF-8?Q?>
     [not found] ` <5BA0D44602000078001E93EA@prv1=ef=bf=bdmh.provo.novell.com>
     [not found]   ` <7c?==?UTF-8?Q?b2a460-095c-27c8-a4cf-47ef8e7850d5@suse.com>
     [not found]   ` <7c?= =?UTF-8?Q?b2a460-095c-27c8-a4cf-47ef8e7850d5@suse.com>
     [not found]     ` <5BA0DF9602000078001?= =?UTF-8?Q?E9448@suse.com>
2018-09-18 11:32       ` [PATCH 00/12] add per-domain and per-cpupool generic parameters Juergen Gross
     [not found]         ` <001ab73a-07?==?UTF-8?Q?8d-4ec1-4acd-2fb4389e8867@citrix.com>
     [not found]           ` <20180919172818.3aksiju4s3i?==?UTF-8?Q?pw42p@zion.uk.xens=3d=3fUTF-8=3fQ=3fource.com>
     [not found]             ` <fffd7e59-e437-8ed?==?UTF-8?Q?9-b228-b537fde050cd@suse.com>
2018-09-18 13:25         ` George Dunlap
2018-09-19 17:28           ` Wei Liu
     [not found]         ` <?= =?UTF-8?Q?001ab73a-078d-4ec1-4acd-2fb4389e8867@citrix.com>
2018-09-18 13:36           ` Juergen Gross
     [not found]           ` <0a89246d-00a6-d?= =?UTF-8?Q?04a-4bce-3f0b98839d39@suse.com>
2018-09-18 13:57             ` George Dunlap
2018-09-26 15:10               ` Dario Faggioli
     [not found]             ` <d698d8c9-2582-6314-10cb-ecb9535f?= =?UTF-8?Q?62e0@citrix.com>
2018-09-18 14:57               ` Juergen Gross
2018-09-18 15:21                 ` George Dunlap [this message]
     [not found]               ` <7785b4d9724db9224ca8bed58d0f061ce1d67b71.camel@?= =?UTF-8?Q?suse.com>
2018-09-27  6:10                 ` Juergen Gross
     [not found]         ` <001ab73a-07?= =?UTF-8?Q?8d-4ec1-4acd-2fb4389e8867@citrix.com>
     [not found]           ` <20180919172818.3aksiju4s3i?= =?UTF-8?Q?pw42p@zion.uk.xens=3d=3fUTF-8=3fQ=3fource.com>
     [not found]             ` <fffd7e59-e437-8ed?= =?UTF-8?Q?9-b228-b537fde050cd@suse.com>
     [not found]               ` <20180920160629.jullgb435zi7bcbr@zi?= =?UTF-8?Q?on.uk.xensource.com>
2018-09-21  5:23                 ` Juergen Gross
2018-09-21  8:52                   ` Wei Liu
2018-09-26 17:30                     ` Dario Faggioli
2018-10-03 11:00                       ` Wei Liu
2018-10-03 11:07                         ` Juergen Gross
2018-10-03 11:27                           ` Wei Liu
2018-09-18  6:02 Juergen Gross
2018-09-18  6:02 ` [PATCH 01/12] xen: use macros for filling parameter definition blocks Juergen Gross
2018-09-26 15:32   ` Dario Faggioli
2018-10-04 15:37   ` Jan Beulich
2018-09-18  6:02 ` [PATCH 02/12] xen: use a structure to define parsing parameters Juergen Gross
2018-09-26 15:17   ` Dario Faggioli
2018-10-04 15:40   ` Jan Beulich
2018-09-18  6:03 ` [PATCH 03/12] xen: add support for parameter scopes Juergen Gross
2018-09-18  6:03 ` [PATCH 04/12] xen: add a generic flags field to parameter definitions Juergen Gross
2018-09-18  6:03 ` [PATCH 05/12] xen: add hypercall interfaces for domain and cpupool parameter setting Juergen Gross
2018-09-18 21:23   ` Daniel De Graaf
2018-09-19  5:14     ` Juergen Gross
2018-09-26 17:06   ` Dario Faggioli
2018-09-18  6:03 ` [PATCH 06/12] xen: add domain specific parameter support Juergen Gross
2018-09-18  6:03 ` [PATCH 07/12] " Juergen Gross
2018-09-26 16:58   ` Dario Faggioli
2018-09-18  6:03 ` [PATCH 08/12] tools/libxc: add per domain/cpupool " Juergen Gross
2018-09-18  6:03 ` [PATCH 09/12] tools/xl: add support for setting generic per-cpupool parameters Juergen Gross
2018-09-26 17:17   ` Dario Faggioli
2018-09-27  5:14     ` Juergen Gross
2018-09-18  6:03 ` [PATCH 10/12] tools/xl: add support for setting generic per-domain parameters Juergen Gross
2018-09-18  6:03 ` [PATCH 11/12] x86: add domain type flags for domain parameters Juergen Gross
2018-09-18  6:03 ` [PATCH 12/12] x86/xpti: add per-domain parameter for controlling xpti Juergen Gross
2018-09-18 10:32 ` [PATCH 00/12] add per-domain and per-cpupool generic parameters Jan Beulich
2018-09-18 11:10   ` Juergen Gross
     [not found]     ` <5?==?UTF-8?Q?BA0DF9602000078001=3d=3fUTF-8=3fQ=3fE9448@suse.com>
     [not found]       ` <6d56ad90-782?==?UTF-8?Q?5-adb7-f4e5-6c3ceb3210f6@suse.com>
     [not found]         ` <001ab73a-078d-4ec1-4acd-2fb43?==?UTF-8?Q?89e8867@citrix.com>
2018-09-18 11:18     ` George Dunlap
2018-09-18 11:30       ` Juergen Gross
2018-09-18 11:20     ` Jan Beulich
     [not found]     ` <5?= =?UTF-8?Q?BA0DF9602000078001=3d=3fUTF-8=3fQ=3fE9448@suse.com>
     [not found]       ` <6d56ad90-782?= =?UTF-8?Q?5-adb7-f4e5-6c3ceb3210f6@suse.com>
     [not found]         ` <001ab73a-078d-4ec1-4acd-2fb43?= =?UTF-8?Q?89e8867@citrix.com>
     [not found]           ` <20180919172818.3aksiju4s3ipw42p@zion.uk.xens?= =?UTF-8?Q?ource.com>
2018-09-19 17:58             ` Juergen Gross
     [not found]               ` <20180920160629.j?==?UTF-8?Q?ullgb435zi7bcbr@zi=3d=3fUTF-8=3fQ=3fon.uk.xensource.com>
     [not found]                 ` <eba521d?==?UTF-8?Q?2-f6c5-5096-82c2-af5983ed2372@suse.com>
2018-09-20 16:06               ` Wei Liu
     [not found]               ` <20180920160629.j?= =?UTF-8?Q?ullgb435zi7bcbr@zi=3d=3fUTF-8=3fQ=3fon.uk.xensource.com>
     [not found]                 ` <eba521d?= =?UTF-8?Q?2-f6c5-5096-82c2-af5983ed2372@suse.com>
     [not found]                   ` <20180921085240.dqzt5pomt?= =?UTF-8?Q?nfjs665@zion.uk.xensource.com>
2018-09-27  5:58                     ` Juergen Gross
2018-10-03 10:58                       ` Wei Liu
     [not found] ` <5BA0D44602000078001E93EA@suse.com>
2018-09-18 11:02   ` Juergen Gross
2018-09-18 11:19     ` Jan Beulich
2018-09-18 11:20       ` George Dunlap
2018-09-18 11:23         ` Jan Beulich
2018-09-18 11:29           ` George Dunlap
2018-09-18 11:34             ` Juergen Gross
2018-09-18 11:52             ` Jan Beulich
2018-09-18 11:24         ` Juergen Gross
     [not found]   ` <f8bc94ca-9eee-a5a2-5c32-0c?= =?UTF-8?Q?a1ed0cbf5d@suse.com>
     [not found]     ` <5BA0DF3702000078001E9444@suse.com>
2018-09-18 11:26       ` Juergen Gross
2018-09-18 11:47         ` Jan Beulich
     [not found]   ` <f8bc94ca=ef=bf=bd9eee?= =?UTF-8?B?77+9YTVhMu+/vTVjMzLvv70wY2ExZWQwY2JmNWRAc3VzZS5jb20+IDw1QkEwREYz?= =?UTF-8?Q?702000078001E9444@prv1=ef=bf=bdmh.provo.novell.com>
     [not found]     ` <78501912-e58?= =?UTF-8?Q?6-faa9-3569-3b2fd2fef9f5@citrix.com>
     [not found]       ` <5BA0E01902000078001E9468@su?= =?UTF-8?Q?se.com>
2018-09-18 11:28         ` Juergen Gross
     [not found] <7cb2a460-095c-27c8-a4cf-47ef8e7?=850d5@suse.com>
     [not found] <20180918060309.7186=3def=3dbf=3dbd1=3def=3dbf=3dbdjgr?= =?UTF-8?Q?oss@suse.com=3f=3d>
     [not found] <20180918060309.7186=3d3def=3d3dbf=3d3dbd1=3d3def=3d3d?= =?UTF-8?Q?bf=3d3dbdjgr=3f=3doss@suse.com=3f=3d>
     [not found] ` <5BA0D44602000078001E93EA@p?= =?UTF-8?Q?rv1=ef=bf=bdmh.provo.novell.com>
     [not found]   ` <7cb2a460-095c-27c8-a4cf-47ef8e7?= =?UTF-8?Q?850d5@suse.com>
     [not found] <7cb2a460-095c-2?==?UTF-8?Q?7c8-a4cf-47ef8e7850d5@suse.com>
     [not found] ` <5BA0DF9602000078001=3d=3fUTF-8?==?UTF-8?Q?=3fQ=3fE9448@suse.com>
     [not found] <20180918060309.7186=3d3def=3d3dbf=3d3dbd1=3d3def=3d3d?==?UTF-8?Q?bf=3d3dbdjgr=3f=3doss@suse.com=3f=3d>
     [not found] ` <5BA0D44602000078001E93EA@p?==?UTF-8?Q?rv1=ef=bf=bdmh.provo.novell.com>
     [not found]   ` <7cb2a460-095c-27c8-a4cf-47ef8e7?==?UTF-8?Q?850d5@suse.com>
     [not found] <20180918060309.7186=3def=3dbf=3dbd1=3def=3dbf=3dbdjgr?==?UTF-8?Q?oss@suse.com=3f=3d>
     [not found] <20180918060309.7186=3d3d3def=3d3d3dbf=3d3d3dbd1=3d3d3?= =?UTF-8?Q?def=3d3d3d=3f=3dbf=3d3dbdjgr=3f=3doss@suse.com=3f=3d>
     [not found] ` <5BA0D44602?= =?UTF-8?Q?000078001E93EA@prv1=ef=bf=bdmh.provo.novell.com>
     [not found]   ` <7cb2a460-095c-2?= =?UTF-8?Q?7c8-a4cf-47ef8e7850d5@suse.com>
     [not found]     ` <5BA0DF9602000078001=3d=3fUTF-8?= =?UTF-8?Q?=3fQ=3fE9448@suse.com>

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=e2aaf382-6451-bb50-afbb-92bf0f5ca864@citrix.com \
    --to=george.dunlap@citrix.com \
    --cc=George.Dunlap@eu.citrix.com \
    --cc=Ian.Jackson@eu.citrix.com \
    --cc=JBeulich@suse.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=dfaggioli@suse.com \
    --cc=dgdegra@tycho.nsa.gov \
    --cc=jgross@suse.com \
    --cc=julien.grall@arm.com \
    --cc=konrad.wilk@oracle.com \
    --cc=sstabellini@kernel.org \
    --cc=tim@xen.org \
    --cc=wei.liu2@citrix.com \
    --cc=xen-devel@lists.xenproject.org \
    /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.