nixos/lxd-virtual-machine: enable CPU hotplug for x86 VMs

Changed files
+13
nixos
modules
virtualisation
tests
+4
nixos/modules/virtualisation/lxd-virtual-machine.nix
···
boot.kernelParams = ["console=tty1" "console=${serialDevice}"];
virtualisation.lxd.agent.enable = lib.mkDefault true;
};
}
···
boot.kernelParams = ["console=tty1" "console=${serialDevice}"];
+
services.udev.extraRules = ''
+
SUBSYSTEM=="cpu", CONST{arch}=="x86-64", TEST=="online", ATTR{online}=="0", ATTR{online}="1"
+
'';
+
virtualisation.lxd.agent.enable = lib.mkDefault true;
};
}
+9
nixos/tests/incus/virtual-machine.nix
···
with subtest("lxd-agent has a valid path"):
machine.succeed("incus exec ${instance-name} -- bash -c 'true'")
'';
})
···
with subtest("lxd-agent has a valid path"):
machine.succeed("incus exec ${instance-name} -- bash -c 'true'")
+
+
with subtest("guest supports cpu hotplug"):
+
machine.succeed("incus config set ${instance-name} limits.cpu=1")
+
count = int(machine.succeed("incus exec ${instance-name} -- nproc").strip())
+
assert count == 1, f"Wrong number of CPUs reported, want: 1, got: {count}"
+
+
machine.succeed("incus config set ${instance-name} limits.cpu=2")
+
count = int(machine.succeed("incus exec ${instance-name} -- nproc").strip())
+
assert count == 2, f"Wrong number of CPUs reported, want: 2, got: {count}"
'';
})