]> git.proxmox.com Git - qemu-server.git/commitdiff
enable x2apic by default for kvm machines
authorAlexandre Derumier <aderumier@odiso.com>
Mon, 15 Jul 2013 06:51:35 +0000 (08:51 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Mon, 15 Jul 2013 07:08:34 +0000 (09:08 +0200)
This reduce context switch with multicore guests.

Even if the host cpu don't have x2apic, it's working because qemu have an virtual x2apic implementation for guest.
We need  in-kernel irqchip support for this, which is enable for kvm guest since qemu 1.3.
(I don't enable it if nokvm param is set)

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
PVE/QemuServer.pm

index 31d8103b689c928a1d9eb79ff602421926686aff..f0a3c01ea09815d46e8098e0419ea866b6ef7894 100644 (file)
@@ -2225,6 +2225,7 @@ sub config_to_command {
     my $globalFlags = [];
     my $machineFlags = [];
     my $rtcFlags = [];
+    my $cpuFlags = [];
     my $devices = [];
     my $pciaddr = '';
     my $bridges = {};
@@ -2318,11 +2319,8 @@ sub config_to_command {
     $sockets = $conf->{sockets} if  $conf->{sockets};
 
     my $cores = $conf->{cores} || 1;
-
     push @$cmd, '-smp', "sockets=$sockets,cores=$cores";
 
-    push @$cmd, '-cpu', $conf->{cpu} if $conf->{cpu};
-
     push @$cmd, '-nodefaults';
 
     my $bootorder = $conf->{boot} || $confdesc->{boot}->{default};
@@ -2395,6 +2393,15 @@ sub config_to_command {
        push @$rtcFlags, 'base=localtime';
     }
 
+    my $cpu = $nokvm ? "qemu64" : "kvm64";
+    $cpu = $conf->{cpu} if $conf->{cpu};
+
+    push @$cpuFlags , '+x2apic' if !$nokvm;
+
+    $cpu .= ",".join(',', @$cpuFlags) if scalar(@$cpuFlags);
+
+    push @$cmd, '-cpu', $cpu;
+
     push @$cmd, '-S' if $conf->{freeze};
 
     # set keyboard layout
@@ -2423,7 +2430,6 @@ sub config_to_command {
        #$x509 .= ",x509-cacert-file=/etc/pve/pve-root-ca.pem";
 
        my $socket = spice_socket($vmid);
-
        push @$cmd, '-spice', "unix=$socket";
        push @$cmd, '-device', "virtio-serial,id=spice$pciaddr";
        push @$cmd, '-chardev', "spicevmc,id=vdagent,name=vdagent";