From 76c69af624667a412e0afabdda43b9c3f0c7c649 Mon Sep 17 00:00:00 2001 From: Adam Stephens Date: Wed, 17 Apr 2024 18:08:39 -0400 Subject: [PATCH] nixos/lxd-virtual-machine: enable CPU hotplug for x86 VMs --- nixos/modules/virtualisation/lxd-virtual-machine.nix | 4 ++++ nixos/tests/incus/virtual-machine.nix | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/nixos/modules/virtualisation/lxd-virtual-machine.nix b/nixos/modules/virtualisation/lxd-virtual-machine.nix index 92434cb9babf..2768e7c25966 100644 --- a/nixos/modules/virtualisation/lxd-virtual-machine.nix +++ b/nixos/modules/virtualisation/lxd-virtual-machine.nix @@ -45,6 +45,10 @@ in { 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; }; } diff --git a/nixos/tests/incus/virtual-machine.nix b/nixos/tests/incus/virtual-machine.nix index ab378c7b9490..48178aaed32c 100644 --- a/nixos/tests/incus/virtual-machine.nix +++ b/nixos/tests/incus/virtual-machine.nix @@ -57,5 +57,14 @@ in 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}" ''; })