diff --git a/m/fox/configuration.nix b/m/fox/configuration.nix index 2d5f00e2..85af5181 100644 --- a/m/fox/configuration.nix +++ b/m/fox/configuration.nix @@ -4,6 +4,7 @@ imports = [ ../common/base.nix ../common/xeon/console.nix + ../module/amd-uprof.nix ../module/emulation.nix ../module/nvidia.nix ../module/slurm-client.nix @@ -29,6 +30,8 @@ # Use performance for benchmarks powerManagement.cpuFreqGovernor = "performance"; + services.amd-uprof.enable = true; + # Disable NUMA balancing boot.kernel.sysctl."kernel.numa_balancing" = 0; diff --git a/m/module/amd-uprof.nix b/m/module/amd-uprof.nix new file mode 100644 index 00000000..dcddf600 --- /dev/null +++ b/m/module/amd-uprof.nix @@ -0,0 +1,39 @@ +{ config, lib, pkgs, ... }: + +{ + options = { + services.amd-uprof = { + enable = lib.mkOption { + type = lib.types.bool; + default = false; + description = "Whether to enable AMD uProf."; + }; + }; + }; + + # Only setup amd-uprof if enabled + config = lib.mkIf config.services.amd-uprof.enable { + + # First make sure that we add the module to the list of available modules + # in the kernel matching the same kernel version of this configuration. + boot.extraModulePackages = with config.boot.kernelPackages; [ amd-uprof-driver ]; + + # Make the userspace tools available in $PATH. + environment.systemPackages = with pkgs; [ amd-uprof ]; + + # Add extra udev rules to setup the /dev/AMDPowerProfiler device. They + # forgot to add these. + services.udev.extraRules = let + # To create the device node we need to read the device number from the + # /proc directory, so the module must have been loaded first. + addDevice = pkgs.writeScript "add-amd-uprof-dev.sh" + "mknod /dev/AMDPowerProfiler -m 666 c $(< /proc/AMDPowerProfiler/device) 0"; + removeDevice = pkgs.writeScript "remove-amd-uprof-dev.sh" + "rm /dev/AMDPowerProfiler"; + in + '' + SUBSYSTEM=="module", DEVPATH=="/module/AMDPowerProfiler/device", ACTION=="add", RUN+="${addDevice}" + SUBSYSTEM=="module", DEVPATH=="/module/AMDPowerProfiler/device", ACTION=="remove", RUN+="${removeDevice}" + ''; + }; +}