All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ryan Harper <ryanh@us.ibm.com>
To: Alexander Graf <agraf@suse.de>
Cc: "qemu-devel@nongnu.org Developers" <qemu-devel@nongnu.org>,
	kvm list <kvm@vger.kernel.org>, Avi Kivity <avi@redhat.com>
Subject: Re: [PATCH 2/2] KVM: Use -cpu best as default on x86
Date: Mon, 16 Jan 2012 13:30:05 -0600	[thread overview]
Message-ID: <20120116193005.GC25198@us.ibm.com> (raw)
In-Reply-To: <1326066759-8210-2-git-send-email-agraf@suse.de>

* Alexander Graf <agraf@suse.de> [2012-01-08 17:53]:
> When running QEMU without -cpu parameter, the user usually wants a sane
> default. So far, we're using the qemu64/qemu32 CPU type, which basically
> means "the maximum TCG can emulate".

it also means we all maximum possible migration targets.  Have you
given any thought to migration with -cpu best? 

> 
> That's a really good default when using TCG, but when running with KVM
> we much rather want a default saying "the maximum performance I can get".
> 
> Fortunately we just added an option that gives us the best performance
> while still staying safe on the testability side of things: -cpu best.
> So all we need to do is make -cpu best the default when the user doesn't
> define any.
> 
> This fixes a lot of subtile breakage in the GNU toolchain (libgmp) which
> hicks up on QEMU's non-existent CPU models.
> 
> This patch also adds a new pc-1.1 machine type to keep backwards compatible
> with older versions of QEMU.
> 
> Signed-off-by: Alexander Graf <agraf@suse.de>
> ---
>  hw/pc_piix.c |   42 ++++++++++++++++++++++++++++++++++--------
>  1 files changed, 34 insertions(+), 8 deletions(-)
> 
> diff --git a/hw/pc_piix.c b/hw/pc_piix.c
> index 00f525e..3d78ccb 100644
> --- a/hw/pc_piix.c
> +++ b/hw/pc_piix.c
> @@ -79,7 +79,8 @@ static void pc_init1(MemoryRegion *system_memory,
>                       const char *initrd_filename,
>                       const char *cpu_model,
>                       int pci_enabled,
> -                     int kvmclock_enabled)
> +                     int kvmclock_enabled,
> +                     int may_cpu_best)
>  {
>      int i;
>      ram_addr_t below_4g_mem_size, above_4g_mem_size;
> @@ -102,6 +103,9 @@ static void pc_init1(MemoryRegion *system_memory,
>      MemoryRegion *rom_memory;
>      DeviceState *dev;
> 
> +    if (!cpu_model && kvm_enabled() && may_cpu_best) {
> +        cpu_model = "best";
> +    }
>      pc_cpus_init(cpu_model);
> 
>      if (kvmclock_enabled) {
> @@ -263,7 +267,21 @@ static void pc_init_pci(ram_addr_t ram_size,
>               get_system_io(),
>               ram_size, boot_device,
>               kernel_filename, kernel_cmdline,
> -             initrd_filename, cpu_model, 1, 1);
> +             initrd_filename, cpu_model, 1, 1, 1);
> +}
> +
> +static void pc_init_pci_oldcpu(ram_addr_t ram_size,
> +                               const char *boot_device,
> +                               const char *kernel_filename,
> +                               const char *kernel_cmdline,
> +                               const char *initrd_filename,
> +                               const char *cpu_model)
> +{
> +    pc_init1(get_system_memory(),
> +             get_system_io(),
> +             ram_size, boot_device,
> +             kernel_filename, kernel_cmdline,
> +             initrd_filename, cpu_model, 1, 1, 0);
>  }
> 
>  static void pc_init_pci_no_kvmclock(ram_addr_t ram_size,
> @@ -277,7 +295,7 @@ static void pc_init_pci_no_kvmclock(ram_addr_t ram_size,
>               get_system_io(),
>               ram_size, boot_device,
>               kernel_filename, kernel_cmdline,
> -             initrd_filename, cpu_model, 1, 0);
> +             initrd_filename, cpu_model, 1, 0, 0);
>  }
> 
>  static void pc_init_isa(ram_addr_t ram_size,
> @@ -293,7 +311,7 @@ static void pc_init_isa(ram_addr_t ram_size,
>               get_system_io(),
>               ram_size, boot_device,
>               kernel_filename, kernel_cmdline,
> -             initrd_filename, cpu_model, 0, 1);
> +             initrd_filename, cpu_model, 0, 1, 0);
>  }
> 
>  #ifdef CONFIG_XEN
> @@ -314,8 +332,8 @@ static void pc_xen_hvm_init(ram_addr_t ram_size,
>  }
>  #endif
> 
> -static QEMUMachine pc_machine_v1_0 = {
> -    .name = "pc-1.0",
> +static QEMUMachine pc_machine_v1_1 = {
> +    .name = "pc-1.1",
>      .alias = "pc",
>      .desc = "Standard PC",
>      .init = pc_init_pci,
> @@ -323,17 +341,24 @@ static QEMUMachine pc_machine_v1_0 = {
>      .is_default = 1,
>  };
> 
> +static QEMUMachine pc_machine_v1_0 = {
> +    .name = "pc-1.0",
> +    .desc = "Standard PC",
> +    .init = pc_init_pci_oldcpu,
> +    .max_cpus = 255,
> +};
> +
>  static QEMUMachine pc_machine_v0_15 = {
>      .name = "pc-0.15",
>      .desc = "Standard PC",
> -    .init = pc_init_pci,
> +    .init = pc_init_pci_oldcpu,
>      .max_cpus = 255,
>  };
> 
>  static QEMUMachine pc_machine_v0_14 = {
>      .name = "pc-0.14",
>      .desc = "Standard PC",
> -    .init = pc_init_pci,
> +    .init = pc_init_pci_oldcpu,
>      .max_cpus = 255,
>      .compat_props = (GlobalProperty[]) {
>          {
> @@ -612,6 +637,7 @@ static QEMUMachine xenfv_machine = {
> 
>  static void pc_machine_init(void)
>  {
> +    qemu_register_machine(&pc_machine_v1_1);
>      qemu_register_machine(&pc_machine_v1_0);
>      qemu_register_machine(&pc_machine_v0_15);
>      qemu_register_machine(&pc_machine_v0_14);
> -- 
> 1.6.0.2
> 

-- 
Ryan Harper
Software Engineer; Linux Technology Center
IBM Corp., Austin, Tx
ryanh@us.ibm.com

WARNING: multiple messages have this Message-ID (diff)
From: Ryan Harper <ryanh@us.ibm.com>
To: Alexander Graf <agraf@suse.de>
Cc: "qemu-devel@nongnu.org Developers" <qemu-devel@nongnu.org>,
	kvm list <kvm@vger.kernel.org>, Avi Kivity <avi@redhat.com>
Subject: Re: [Qemu-devel] [PATCH 2/2] KVM: Use -cpu best as default on x86
Date: Mon, 16 Jan 2012 13:30:05 -0600	[thread overview]
Message-ID: <20120116193005.GC25198@us.ibm.com> (raw)
In-Reply-To: <1326066759-8210-2-git-send-email-agraf@suse.de>

* Alexander Graf <agraf@suse.de> [2012-01-08 17:53]:
> When running QEMU without -cpu parameter, the user usually wants a sane
> default. So far, we're using the qemu64/qemu32 CPU type, which basically
> means "the maximum TCG can emulate".

it also means we all maximum possible migration targets.  Have you
given any thought to migration with -cpu best? 

> 
> That's a really good default when using TCG, but when running with KVM
> we much rather want a default saying "the maximum performance I can get".
> 
> Fortunately we just added an option that gives us the best performance
> while still staying safe on the testability side of things: -cpu best.
> So all we need to do is make -cpu best the default when the user doesn't
> define any.
> 
> This fixes a lot of subtile breakage in the GNU toolchain (libgmp) which
> hicks up on QEMU's non-existent CPU models.
> 
> This patch also adds a new pc-1.1 machine type to keep backwards compatible
> with older versions of QEMU.
> 
> Signed-off-by: Alexander Graf <agraf@suse.de>
> ---
>  hw/pc_piix.c |   42 ++++++++++++++++++++++++++++++++++--------
>  1 files changed, 34 insertions(+), 8 deletions(-)
> 
> diff --git a/hw/pc_piix.c b/hw/pc_piix.c
> index 00f525e..3d78ccb 100644
> --- a/hw/pc_piix.c
> +++ b/hw/pc_piix.c
> @@ -79,7 +79,8 @@ static void pc_init1(MemoryRegion *system_memory,
>                       const char *initrd_filename,
>                       const char *cpu_model,
>                       int pci_enabled,
> -                     int kvmclock_enabled)
> +                     int kvmclock_enabled,
> +                     int may_cpu_best)
>  {
>      int i;
>      ram_addr_t below_4g_mem_size, above_4g_mem_size;
> @@ -102,6 +103,9 @@ static void pc_init1(MemoryRegion *system_memory,
>      MemoryRegion *rom_memory;
>      DeviceState *dev;
> 
> +    if (!cpu_model && kvm_enabled() && may_cpu_best) {
> +        cpu_model = "best";
> +    }
>      pc_cpus_init(cpu_model);
> 
>      if (kvmclock_enabled) {
> @@ -263,7 +267,21 @@ static void pc_init_pci(ram_addr_t ram_size,
>               get_system_io(),
>               ram_size, boot_device,
>               kernel_filename, kernel_cmdline,
> -             initrd_filename, cpu_model, 1, 1);
> +             initrd_filename, cpu_model, 1, 1, 1);
> +}
> +
> +static void pc_init_pci_oldcpu(ram_addr_t ram_size,
> +                               const char *boot_device,
> +                               const char *kernel_filename,
> +                               const char *kernel_cmdline,
> +                               const char *initrd_filename,
> +                               const char *cpu_model)
> +{
> +    pc_init1(get_system_memory(),
> +             get_system_io(),
> +             ram_size, boot_device,
> +             kernel_filename, kernel_cmdline,
> +             initrd_filename, cpu_model, 1, 1, 0);
>  }
> 
>  static void pc_init_pci_no_kvmclock(ram_addr_t ram_size,
> @@ -277,7 +295,7 @@ static void pc_init_pci_no_kvmclock(ram_addr_t ram_size,
>               get_system_io(),
>               ram_size, boot_device,
>               kernel_filename, kernel_cmdline,
> -             initrd_filename, cpu_model, 1, 0);
> +             initrd_filename, cpu_model, 1, 0, 0);
>  }
> 
>  static void pc_init_isa(ram_addr_t ram_size,
> @@ -293,7 +311,7 @@ static void pc_init_isa(ram_addr_t ram_size,
>               get_system_io(),
>               ram_size, boot_device,
>               kernel_filename, kernel_cmdline,
> -             initrd_filename, cpu_model, 0, 1);
> +             initrd_filename, cpu_model, 0, 1, 0);
>  }
> 
>  #ifdef CONFIG_XEN
> @@ -314,8 +332,8 @@ static void pc_xen_hvm_init(ram_addr_t ram_size,
>  }
>  #endif
> 
> -static QEMUMachine pc_machine_v1_0 = {
> -    .name = "pc-1.0",
> +static QEMUMachine pc_machine_v1_1 = {
> +    .name = "pc-1.1",
>      .alias = "pc",
>      .desc = "Standard PC",
>      .init = pc_init_pci,
> @@ -323,17 +341,24 @@ static QEMUMachine pc_machine_v1_0 = {
>      .is_default = 1,
>  };
> 
> +static QEMUMachine pc_machine_v1_0 = {
> +    .name = "pc-1.0",
> +    .desc = "Standard PC",
> +    .init = pc_init_pci_oldcpu,
> +    .max_cpus = 255,
> +};
> +
>  static QEMUMachine pc_machine_v0_15 = {
>      .name = "pc-0.15",
>      .desc = "Standard PC",
> -    .init = pc_init_pci,
> +    .init = pc_init_pci_oldcpu,
>      .max_cpus = 255,
>  };
> 
>  static QEMUMachine pc_machine_v0_14 = {
>      .name = "pc-0.14",
>      .desc = "Standard PC",
> -    .init = pc_init_pci,
> +    .init = pc_init_pci_oldcpu,
>      .max_cpus = 255,
>      .compat_props = (GlobalProperty[]) {
>          {
> @@ -612,6 +637,7 @@ static QEMUMachine xenfv_machine = {
> 
>  static void pc_machine_init(void)
>  {
> +    qemu_register_machine(&pc_machine_v1_1);
>      qemu_register_machine(&pc_machine_v1_0);
>      qemu_register_machine(&pc_machine_v0_15);
>      qemu_register_machine(&pc_machine_v0_14);
> -- 
> 1.6.0.2
> 

-- 
Ryan Harper
Software Engineer; Linux Technology Center
IBM Corp., Austin, Tx
ryanh@us.ibm.com

  reply	other threads:[~2012-01-16 19:30 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-01-08 23:52 [PATCH 1/2] KVM: Add new -cpu best Alexander Graf
2012-01-08 23:52 ` [Qemu-devel] " Alexander Graf
2012-01-08 23:52 ` [PATCH 2/2] KVM: Use -cpu best as default on x86 Alexander Graf
2012-01-08 23:52   ` [Qemu-devel] " Alexander Graf
2012-01-16 19:30   ` Ryan Harper [this message]
2012-01-16 19:30     ` Ryan Harper
2012-01-16 19:36     ` Alexander Graf
2012-01-16 19:36       ` Alexander Graf
2012-01-16 19:46       ` Ryan Harper
2012-01-16 19:46         ` [Qemu-devel] " Ryan Harper
2012-01-16 19:51         ` Alexander Graf
2012-01-16 19:51           ` Alexander Graf
2012-01-16 20:13           ` Ryan Harper
2012-01-16 20:13             ` [Qemu-devel] " Ryan Harper
2012-01-16 20:51             ` Alexander Graf
2012-01-16 21:33               ` Ryan Harper
2012-01-09  0:02 ` [Qemu-devel] [PATCH 1/2] KVM: Add new -cpu best Peter Maydell
2012-01-09  0:02   ` Peter Maydell
2012-01-09  0:06   ` Alexander Graf
2012-01-09  0:06     ` Alexander Graf
2012-01-16 19:33 ` Anthony Liguori
2012-01-16 19:33   ` Anthony Liguori
2012-01-16 19:42   ` Alexander Graf
2012-01-16 19:42     ` Alexander Graf

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=20120116193005.GC25198@us.ibm.com \
    --to=ryanh@us.ibm.com \
    --cc=agraf@suse.de \
    --cc=avi@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=qemu-devel@nongnu.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.