diff mbox

[v2] sysemu: support up to 1024 vCPUs

Message ID 146357953667.8807.5432652213311565530.stgit@bahia.huguette.org (mailing list archive)
State New, archived
Headers show

Commit Message

Greg Kurz May 18, 2016, 1:52 p.m. UTC
Some PowerPC systems can already provide more than 255 hardware threads.
Igor also posted a patch recently, to increase the the maxcpus limit to
288 for x86 targets.

This patch bumps the limit to 1024:
- 1024 is already the limit for PowerPC KVM in several distros
- it has no visible overhead in top
- the limit itself has no effect on hot paths

We only do that for pseries at the moment and keep a 255 limit for the
ARM Virtual Machine.

Signed-off-by: Greg Kurz <gkurz@linux.vnet.ibm.com>
---
v2: - updated changelog
    - keep 255 limit in hw/arm/virt.c
---
 hw/arm/virt.c           |    2 +-
 include/sysemu/sysemu.h |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

Comments

Peter Maydell May 18, 2016, 3:31 p.m. UTC | #1
On 18 May 2016 at 14:52, Greg Kurz <gkurz@linux.vnet.ibm.com> wrote:
> Some PowerPC systems can already provide more than 255 hardware threads.
> Igor also posted a patch recently, to increase the the maxcpus limit to
> 288 for x86 targets.
>
> This patch bumps the limit to 1024:
> - 1024 is already the limit for PowerPC KVM in several distros
> - it has no visible overhead in top
> - the limit itself has no effect on hot paths
>
> We only do that for pseries at the moment and keep a 255 limit for the
> ARM Virtual Machine.
>
> Signed-off-by: Greg Kurz <gkurz@linux.vnet.ibm.com>
> ---
> v2: - updated changelog
>     - keep 255 limit in hw/arm/virt.c
> ---
>  hw/arm/virt.c           |    2 +-
>  include/sysemu/sysemu.h |    2 +-
>  2 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/hw/arm/virt.c b/hw/arm/virt.c
> index 56d35c7716e7..438e09c7a57d 100644
> --- a/hw/arm/virt.c
> +++ b/hw/arm/virt.c
> @@ -1358,7 +1358,7 @@ static void virt_machine_class_init(ObjectClass *oc, void *data)
>       * it later in machvirt_init, where we have more information about the
>       * configuration of the particular instance.
>       */
> -    mc->max_cpus = MAX_CPUMASK_BITS;
> +    mc->max_cpus = 255;

This change makes the code disagree with the comment immediately
above it. As the comment says, we set max_cpus to the maximum
QEMU supports, and then dynamically check it later when we know
whether we have a GICv2 or GICv3 (which is what puts the limit
on number of CPUs for this board). So I think the change is
not needed.

>      mc->has_dynamic_sysbus = true;
>      mc->block_default_type = IF_VIRTIO;
>      mc->no_cdrom = 1;
> diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
> index 38fb3cad35e1..89d742caa477 100644
> --- a/include/sysemu/sysemu.h
> +++ b/include/sysemu/sysemu.h
> @@ -185,7 +185,7 @@ extern int mem_prealloc;
>   *
>   * Note that cpu->get_arch_id() may be larger than MAX_CPUMASK_BITS.
>   */
> -#define MAX_CPUMASK_BITS 255
> +#define MAX_CPUMASK_BITS 1024
>
>  #define MAX_OPTION_ROMS 16
>  typedef struct QEMUOptionRom {

thanks
-- PMM
Greg Kurz May 18, 2016, 3:42 p.m. UTC | #2
On Wed, 18 May 2016 16:31:31 +0100
Peter Maydell <peter.maydell@linaro.org> wrote:

> On 18 May 2016 at 14:52, Greg Kurz <gkurz@linux.vnet.ibm.com> wrote:
> > Some PowerPC systems can already provide more than 255 hardware threads.
> > Igor also posted a patch recently, to increase the the maxcpus limit to
> > 288 for x86 targets.
> >
> > This patch bumps the limit to 1024:
> > - 1024 is already the limit for PowerPC KVM in several distros
> > - it has no visible overhead in top
> > - the limit itself has no effect on hot paths
> >
> > We only do that for pseries at the moment and keep a 255 limit for the
> > ARM Virtual Machine.
> >
> > Signed-off-by: Greg Kurz <gkurz@linux.vnet.ibm.com>
> > ---
> > v2: - updated changelog
> >     - keep 255 limit in hw/arm/virt.c
> > ---
> >  hw/arm/virt.c           |    2 +-
> >  include/sysemu/sysemu.h |    2 +-
> >  2 files changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/hw/arm/virt.c b/hw/arm/virt.c
> > index 56d35c7716e7..438e09c7a57d 100644
> > --- a/hw/arm/virt.c
> > +++ b/hw/arm/virt.c
> > @@ -1358,7 +1358,7 @@ static void virt_machine_class_init(ObjectClass *oc, void *data)
> >       * it later in machvirt_init, where we have more information about the
> >       * configuration of the particular instance.
> >       */
> > -    mc->max_cpus = MAX_CPUMASK_BITS;
> > +    mc->max_cpus = 255;  
> 
> This change makes the code disagree with the comment immediately
> above it. As the comment says, we set max_cpus to the maximum
> QEMU supports, and then dynamically check it later when we know
> whether we have a GICv2 or GICv3 (which is what puts the limit
> on number of CPUs for this board). So I think the change is
> not needed.
> 

Thank you Peter for the clarification. I'll mention that in the
changelog in v3.

> >      mc->has_dynamic_sysbus = true;
> >      mc->block_default_type = IF_VIRTIO;
> >      mc->no_cdrom = 1;
> > diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
> > index 38fb3cad35e1..89d742caa477 100644
> > --- a/include/sysemu/sysemu.h
> > +++ b/include/sysemu/sysemu.h
> > @@ -185,7 +185,7 @@ extern int mem_prealloc;
> >   *
> >   * Note that cpu->get_arch_id() may be larger than MAX_CPUMASK_BITS.
> >   */
> > -#define MAX_CPUMASK_BITS 255
> > +#define MAX_CPUMASK_BITS 1024
> >
> >  #define MAX_OPTION_ROMS 16
> >  typedef struct QEMUOptionRom {  
> 
> thanks
> -- PMM
>
diff mbox

Patch

diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index 56d35c7716e7..438e09c7a57d 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -1358,7 +1358,7 @@  static void virt_machine_class_init(ObjectClass *oc, void *data)
      * it later in machvirt_init, where we have more information about the
      * configuration of the particular instance.
      */
-    mc->max_cpus = MAX_CPUMASK_BITS;
+    mc->max_cpus = 255;
     mc->has_dynamic_sysbus = true;
     mc->block_default_type = IF_VIRTIO;
     mc->no_cdrom = 1;
diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
index 38fb3cad35e1..89d742caa477 100644
--- a/include/sysemu/sysemu.h
+++ b/include/sysemu/sysemu.h
@@ -185,7 +185,7 @@  extern int mem_prealloc;
  *
  * Note that cpu->get_arch_id() may be larger than MAX_CPUMASK_BITS.
  */
-#define MAX_CPUMASK_BITS 255
+#define MAX_CPUMASK_BITS 1024
 
 #define MAX_OPTION_ROMS 16
 typedef struct QEMUOptionRom {