[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 |