mirror of
https://git.proxmox.com/git/qemu-server
synced 2025-08-02 15:18:44 +00:00
use enter_systemd_scope instead of systemd-run
With systemd-run qemu's --daemonize forks often happen before systemd finishes setting up the scopes, which means the limits we apply often don't work. We now use enter_systemd_scope() to create the scope before running qemu directly without systemd-run. Note that vm_start() runs in a forked-worker or qm cli command, so entering the scope in such a process should not affect the rest of the pve daemon.
This commit is contained in:
parent
674051dcac
commit
8e59d952be
@ -2730,20 +2730,6 @@ sub config_to_command {
|
||||
my $cpuunits = defined($conf->{cpuunits}) ?
|
||||
$conf->{cpuunits} : $defaults->{cpuunits};
|
||||
|
||||
push @$cmd, '/usr/bin/systemd-run';
|
||||
push @$cmd, '--scope';
|
||||
push @$cmd, '--slice', "qemu";
|
||||
push @$cmd, '--unit', $vmid;
|
||||
push @$cmd, '--description', "'Proxmox VE VM $vmid'";
|
||||
# set KillMode=none, so that systemd don't kill those scopes
|
||||
# at shutdown (pve-manager service should stop the VMs instead)
|
||||
push @$cmd, '-p', "KillMode=none";
|
||||
push @$cmd, '-p', "CPUShares=$cpuunits";
|
||||
if ($conf->{cpulimit}) {
|
||||
my $cpulimit = int($conf->{cpulimit} * 100);
|
||||
push @$cmd, '-p', "CPUQuota=$cpulimit\%";
|
||||
}
|
||||
|
||||
push @$cmd, '/usr/bin/kvm';
|
||||
|
||||
push @$cmd, '-id', $vmid;
|
||||
@ -4346,8 +4332,22 @@ sub vm_start {
|
||||
eval { run_command($cmd); };
|
||||
}
|
||||
|
||||
eval { run_command($cmd, timeout => $statefile ? undef : 30,
|
||||
umask => 0077); };
|
||||
my $cpuunits = defined($conf->{cpuunits}) ? $conf->{cpuunits}
|
||||
: $defaults->{cpuunits};
|
||||
|
||||
eval {
|
||||
my %properties = (
|
||||
Slice => 'qemu.slice',
|
||||
KillMode => 'none',
|
||||
CPUShares => $cpuunits
|
||||
);
|
||||
if (my $cpulimit = $conf->{cpulimit}) {
|
||||
$properties{CPUQuota} = int($cpulimit * 100);
|
||||
}
|
||||
$properties{timeout} = 10 if $statefile; # setting up the scope shoul be quick
|
||||
PVE::Tools::enter_systemd_scope($vmid, "Proxmox VE VM $vmid", %properties);
|
||||
run_command($cmd, timeout => $statefile ? undef : 30, umask => 0077);
|
||||
};
|
||||
|
||||
if (my $err = $@) {
|
||||
# deactivate volumes if start fails
|
||||
|
Loading…
Reference in New Issue
Block a user