|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] x86: make the dom0_max_vcpus option more flexible
>>> On 04.05.12 at 18:01, David Vrabel <david.vrabel@xxxxxxxxxx> wrote:
> From: David Vrabel <david.vrabel@xxxxxxxxxx>
>
> The dom0_max_vcpus command line option only allows the exact number of
> VCPUs for dom0 to be set. It is not possible to say "up to N VCPUs
> but no more than the number physically present."
>
> Add min: and max: prefixes to the option to set a minimum number of
> VCPUs, and a maximum which does not exceed the number of PCPUs.
>
> For example, with "dom0_max_vcpus=min:4,max:8":
Both "...max...=min:..." and "...max...=max:" look pretty odd to me;
how about simply allowing a range along with a simple number (since
negative values make no sense, omitting either side of the range would
be supportable if necessary.
> PCPUs Dom0 VCPUs
> 2 4
> 4 4
> 6 6
> 8 8
> 10 8
>
> The existing behaviour of "dom0_max_vcpus=N" still works as before.
>
> Signed-off-by: David Vrabel <david.vrabel@xxxxxxxxxx>
> ---
> docs/misc/xen-command-line.markdown | 29 +++++++++++++++++++++++++++--
> xen/arch/x86/domain_build.c | 23 ++++++++++++++++++++++-
> 2 files changed, 49 insertions(+), 3 deletions(-)
>
> diff --git a/docs/misc/xen-command-line.markdown
> b/docs/misc/xen-command-line.markdown
> index a6195f2..5f0c2cd 100644
> --- a/docs/misc/xen-command-line.markdown
> +++ b/docs/misc/xen-command-line.markdown
> @@ -272,10 +272,35 @@ Specify the bit width of the DMA heap.
>
> ### dom0\_ioports\_disable
> ### dom0\_max\_vcpus
> +
> +Either:
> +
> > `= <integer>`
>
> -Specify the maximum number of vcpus to give to dom0. This defaults
> -to the number of pcpus on the host.
> +The maximum number of VCPUs to give to dom0. This number of VCPUs can
> +be more than the number of PCPUs on the host. The default is the
> +number of PCPUs.
> +
> +Or:
> +
> +> `= List of ( min:<integer> | max:<integer> )`
> +
> +With the `min:` option dom0 will have at least this minimum number of
> +VCPUs (default: 1). This may be more than the number of PCPUs on the
> +host.
> +
> +With the `max:` option dom0 will have a VCPUs for each PCPUs but no
> +more than this maximum number (default: unlimited).
> +
> +For example, with `dom0_max_vcpus=min:4,max:8`:
> +
> + Number of
> + PCPUs | Dom0 VCPUs
> + 2 | 4
> + 4 | 4
> + 6 | 6
> + 8 | 8
> + 10 | 8
>
> ### dom0\_mem (ia64)
> > `= <size>`
> diff --git a/xen/arch/x86/domain_build.c b/xen/arch/x86/domain_build.c
> index b3c5d4c..5407f8d 100644
> --- a/xen/arch/x86/domain_build.c
> +++ b/xen/arch/x86/domain_build.c
> @@ -83,7 +83,24 @@ static void __init parse_dom0_mem(const char *s)
> custom_param("dom0_mem", parse_dom0_mem);
>
> static unsigned int __initdata opt_dom0_max_vcpus;
> -integer_param("dom0_max_vcpus", opt_dom0_max_vcpus);
> +static unsigned int __initdata opt_dom0_max_vcpus_min = 1;
> +static unsigned int __initdata opt_dom0_max_vcpus_max = UINT_MAX;
> +
> +static void __init parse_dom0_max_vcpus(const char *s)
> +{
> + do {
> + if ( !strncmp(s, "min:", 4) )
> + opt_dom0_max_vcpus_min = simple_strtoul(s+4, &s, 0);
> + else if ( !strncmp(s, "max:", 4) )
> + opt_dom0_max_vcpus_max = simple_strtoul(s+4, &s, 0);
> + else
> + opt_dom0_max_vcpus = simple_strtoul(s, &s, 0);
> + if ( *s != ',' )
> + break;
> + } while ( *s++ == ',' );
> +
> +}
> +custom_param("dom0_max_vcpus", parse_dom0_max_vcpus);
>
> struct vcpu *__init alloc_dom0_vcpu0(void)
> {
> @@ -91,6 +108,10 @@ struct vcpu *__init alloc_dom0_vcpu0(void)
> opt_dom0_max_vcpus = num_cpupool_cpus(cpupool0);
> if ( opt_dom0_max_vcpus > MAX_VIRT_CPUS )
> opt_dom0_max_vcpus = MAX_VIRT_CPUS;
> + if ( opt_dom0_max_vcpus_min > opt_dom0_max_vcpus )
> + opt_dom0_max_vcpus = opt_dom0_max_vcpus_min;
Enlarging the value after the MAX_VIRT_CPUS range check must
not be done. You probably simply want to move your addition up
two lines.
> + if ( opt_dom0_max_vcpus_max < opt_dom0_max_vcpus )
> + opt_dom0_max_vcpus = opt_dom0_max_vcpus_max;
But please avoid ...=max: (number lost for some reason) rendering
the box unbootable (I'd say a maximum of zero should be interpreted
as 1).
Jan
>
> dom0->vcpu = xzalloc_array(struct vcpu *, opt_dom0_max_vcpus);
> if ( !dom0->vcpu )
> --
> 1.7.2.5
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |