|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] x86: make the dom0_max_vcpus option more flexible
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":
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;
+ if ( opt_dom0_max_vcpus_max < opt_dom0_max_vcpus )
+ opt_dom0_max_vcpus = opt_dom0_max_vcpus_max;
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 |