mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-21 14:32:59 +00:00
nixos/scx: init module (#352300)
This commit is contained in:
commit
d834b054f4
@ -34,6 +34,9 @@
|
||||
|
||||
- The `moonlight-qt` package (for [Moonlight game streaming](https://moonlight-stream.org/)) now has HDR support on Linux systems.
|
||||
|
||||
- [Sched-ext](https://github.com/sched-ext/scx), a Linux kernel feature to run schedulers in userspace, is now available [`services.scx`](options.html#opt-services.scx.enable).
|
||||
Requires Linux kernel version 6.12 or later.
|
||||
|
||||
- PostgreSQL now defaults to major version 16.
|
||||
|
||||
- GNOME has been updated to version 47. Refer to the [release notes](https://release.gnome.org/47/) for more details.
|
||||
|
@ -1300,6 +1300,7 @@
|
||||
./services/scheduling/atd.nix
|
||||
./services/scheduling/cron.nix
|
||||
./services/scheduling/fcron.nix
|
||||
./services/scheduling/scx.nix
|
||||
./services/search/elasticsearch-curator.nix
|
||||
./services/search/elasticsearch.nix
|
||||
./services/search/hound.nix
|
||||
|
110
nixos/modules/services/scheduling/scx.nix
Normal file
110
nixos/modules/services/scheduling/scx.nix
Normal file
@ -0,0 +1,110 @@
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.services.scx;
|
||||
in
|
||||
{
|
||||
options.services.scx = {
|
||||
enable = lib.mkEnableOption null // {
|
||||
description = ''
|
||||
Whether to enable SCX service, a daemon to run schedulers from userspace.
|
||||
|
||||
::: {.note}
|
||||
This service requires a kernel with the Sched-ext feature.
|
||||
Generally, kernel version 6.12 and later are supported.
|
||||
:::
|
||||
'';
|
||||
};
|
||||
|
||||
package = lib.mkOption {
|
||||
type = lib.types.package;
|
||||
default = pkgs.scx.full;
|
||||
defaultText = lib.literalExpression "pkgs.scx.full";
|
||||
example = lib.literalExpression "pkgs.scx.rustland";
|
||||
description = ''
|
||||
`scx` package to use. `scx.full`, which includes all schedulers, is the default.
|
||||
You may choose a minimal package, such as `pkgs.scx.rustland`, if only one specific scheduler is needed.
|
||||
|
||||
::: {.note}
|
||||
Overriding this does not change the default scheduler; you should set `services.scx.scheduler` for it.
|
||||
:::
|
||||
'';
|
||||
};
|
||||
|
||||
scheduler = lib.mkOption {
|
||||
type = lib.types.enum [
|
||||
"scx_bpfland"
|
||||
"scx_central"
|
||||
"scx_flatcg"
|
||||
"scx_lavd"
|
||||
"scx_layered"
|
||||
"scx_nest"
|
||||
"scx_pair"
|
||||
"scx_qmap"
|
||||
"scx_rlfifo"
|
||||
"scx_rustland"
|
||||
"scx_rusty"
|
||||
"scx_simple"
|
||||
"scx_userland"
|
||||
];
|
||||
default = "scx_rustland";
|
||||
example = "scx_bpfland";
|
||||
description = ''
|
||||
Which scheduler to use. See [SCX documentation](https://github.com/sched-ext/scx/tree/main/scheds)
|
||||
for details on each scheduler and guidance on selecting the most suitable one.
|
||||
'';
|
||||
};
|
||||
|
||||
extraArgs = lib.mkOption {
|
||||
type = lib.types.listOf lib.types.singleLineStr;
|
||||
example = [
|
||||
"--slice-us 5000"
|
||||
"--verbose"
|
||||
];
|
||||
description = ''
|
||||
Parameters passed to the chosen scheduler at runtime.
|
||||
|
||||
::: {.note}
|
||||
Run `chosen-scx-scheduler --help` to see the available options. Generally,
|
||||
each scheduler has its own set of options, and they are incompatible with each other.
|
||||
:::
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
environment.systemPackages = [ cfg.package ];
|
||||
|
||||
systemd.services.scx = {
|
||||
description = "SCX scheduler daemon";
|
||||
|
||||
# SCX service should be started only if the kernel supports sched-ext
|
||||
unitConfig.ConditionPathIsDirectory = "/sys/kernel/sched_ext";
|
||||
|
||||
startLimitIntervalSec = 30;
|
||||
startLimitBurst = 2;
|
||||
|
||||
serviceConfig = {
|
||||
Type = "simple";
|
||||
ExecStart = "${lib.getExe' cfg.package cfg.scheduler} ${lib.concatStringsSep " " cfg.extraArgs}";
|
||||
Restart = "on-failure";
|
||||
StandardError = "journal";
|
||||
};
|
||||
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
};
|
||||
|
||||
assertions = [
|
||||
{
|
||||
assertion = lib.versionAtLeast config.boot.kernelPackages.kernel.version "6.12";
|
||||
message = "SCX is only supported on kernel version >= 6.12.";
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
meta.maintainers = with lib.maintainers; [ johnrtitor ];
|
||||
}
|
Loading…
Reference in New Issue
Block a user