[pve-devel] [PATCH 3/4] cpu hotplug : add cpu hot-unplug support

Alexandre DERUMIER aderumier at odiso.com
Wed Oct 12 17:02:09 CEST 2016


> +    my $machine_type = PVE::QemuServer::get_current_qemu_machine($vmid);
> +    my $kvmver = kvm_user_version();

>>Note that this calls out to the qemu binary rather than querying the
>>currently running qemu process, which is probably what you meant to
>>query instead.

>>We could add an alternative using the query-version qmp command for this 
>>purpose. 


are you sure ?

qmp query-machines ( get_current_qemu_machine) should return the current machine version running in qemu
qmp query-version should return the qemu binary version.


qemu_machine_feature_enabled() return current qemu process or if machine version is forced (live migration for example),
it's return the machine version.

So I think it's fine here. (Only use new cpu hotplug framework if qemu process or machine version is >= 2.7)


----- Mail original -----
De: "Wolfgang Bumiller" <w.bumiller at proxmox.com>
À: "aderumier" <aderumier at odiso.com>
Cc: "pve-devel" <pve-devel at pve.proxmox.com>
Envoyé: Mercredi 12 Octobre 2016 16:36:09
Objet: Re: [pve-devel] [PATCH 3/4] cpu hotplug : add cpu hot-unplug support

On Tue, Sep 06, 2016 at 12:41:55PM +0200, Alexandre Derumier wrote: 
> Signed-off-by: Alexandre Derumier <aderumier at odiso.com> 
> --- 
> PVE/QemuServer.pm | 31 +++++++++++++++++++++++++++++-- 
> 1 file changed, 29 insertions(+), 2 deletions(-) 
> 
> diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm 
> index d3092ba..8e840f5 100644 
> --- a/PVE/QemuServer.pm 
> +++ b/PVE/QemuServer.pm 
> @@ -3683,6 +3683,9 @@ sub qemu_usb_hotplug { 
> sub qemu_cpu_hotplug { 
> my ($vmid, $conf, $vcpus) = @_; 
> 
> + my $machine_type = PVE::QemuServer::get_current_qemu_machine($vmid); 
> + my $kvmver = kvm_user_version(); 

Note that this calls out to the qemu binary rather than querying the 
currently running qemu process, which is probably what you meant to 
query instead. 

We could add an alternative using the query-version qmp command for this 
purpose. 

AFAIC the other (and I hope *all* other) calls to 
qemu_machine_feature_enabled() using this variable are in 
config_to_command() or functions reached only through that, where the 
current behavior is fine. 

> + 
> my $sockets = 1; 
> $sockets = $conf->{smp} if $conf->{smp}; # old style - no longer iused 
> $sockets = $conf->{sockets} if $conf->{sockets}; 
> @@ -3695,8 +3698,32 @@ sub qemu_cpu_hotplug { 
> if $vcpus > $maxcpus; 
> 
> my $currentvcpus = $conf->{vcpus} || $maxcpus; 
> - die "online cpu unplug is not yet possible\n" 
> - if $vcpus < $currentvcpus; 
> + 
> + if ($vcpus < $currentvcpus) { 
> + 
> + if (qemu_machine_feature_enabled ($machine_type, $kvmver, 2, 7)) { 
> + 
> + for (my $i = $currentvcpus; $i > $vcpus; $i--) { 
> + qemu_devicedel($vmid, "cpu$i"); 
> + my $retry = 0; 
> + my $currentrunningvcpus = undef; 
> + while (1) { 
> + $currentrunningvcpus = vm_mon_cmd($vmid, "query-cpus"); 
> + last if scalar(@{$currentrunningvcpus}) == $i-1; 
> + raise_param_exc({ "cpu unplug" => "error unplug cpu$i" }) if $retry > 5; 
> + $retry++; 
> + sleep 1; 
> + } 
> + #update conf after each succesfull cpu unplug 
> + $conf->{vcpus} = scalar(@{$currentrunningvcpus}); 
> + PVE::QemuConfig->write_config($vmid, $conf); 
> + } 
> + } else { 
> + die "online cpu unplug is only possible since qemu 2.7\n" 
> + } 
> + 
> + return; 
> + } 
> 
> my $currentrunningvcpus = vm_mon_cmd($vmid, "query-cpus"); 
> die "vcpus in running vm is different than configuration\n" 
> -- 
> 2.1.4 
> 
> _______________________________________________ 
> pve-devel mailing list 
> pve-devel at pve.proxmox.com 
> http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel



More information about the pve-devel mailing list