enable setting performance impact of backup jobs
This commit is contained in:
parent
207b2e44cb
commit
c2ac071c72
1 changed files with 39 additions and 0 deletions
|
@ -128,6 +128,31 @@ in
|
||||||
example = true;
|
example = true;
|
||||||
type = lib.types.bool;
|
type = lib.types.bool;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# Taken from https://github.com/HubbeKing/restic-kubernetes/blob/73bfbdb0ba76939a4c52173fa2dbd52070710008/README.md?plain=1#L23
|
||||||
|
performance = lib.mkOption {
|
||||||
|
description = "Reduce performance impact of backup jobs.";
|
||||||
|
default = {};
|
||||||
|
type = lib.types.submodule {
|
||||||
|
options = {
|
||||||
|
niceness = lib.mkOption {
|
||||||
|
type = lib.types.ints.between (-20) 19;
|
||||||
|
description = "nice priority adjustment, defaults to 15 for ~20% CPU time of normal-priority process";
|
||||||
|
default = 15;
|
||||||
|
};
|
||||||
|
ioSchedulingClass = lib.mkOption {
|
||||||
|
type = lib.types.enum [ "idle" "best-effort" "realtime" ];
|
||||||
|
description = "ionice scheduling class, defaults to best-effort IO. Only used for `restic backup`, `restic forget` and `restic check` commands.";
|
||||||
|
default = "best-effort";
|
||||||
|
};
|
||||||
|
ioPriority = lib.mkOption {
|
||||||
|
type = lib.types.nullOr (lib.types.ints.between 0 7);
|
||||||
|
description = "ionice priority, defaults to 7 for lowest priority IO. Only used for `restic backup`, `restic forget` and `restic check` commands.";
|
||||||
|
default = 7;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config = lib.mkIf (cfg.instances != {}) (
|
config = lib.mkIf (cfg.instances != {}) (
|
||||||
|
@ -291,5 +316,19 @@ in
|
||||||
mkSettings = name: instance: builtins.map (mkRepositorySettings name instance) instance.repositories;
|
mkSettings = name: instance: builtins.map (mkRepositorySettings name instance) instance.repositories;
|
||||||
in
|
in
|
||||||
lib.mkMerge (lib.flatten (lib.attrsets.mapAttrsToList mkSettings resticInstances));
|
lib.mkMerge (lib.flatten (lib.attrsets.mapAttrsToList mkSettings resticInstances));
|
||||||
|
|
||||||
|
systemd.services =
|
||||||
|
let
|
||||||
|
mkRepositorySettings = name: instance: repository: {
|
||||||
|
"restic-backups-${name}_${repoSlugName repository.path}".serviceConfig = {
|
||||||
|
Nice = cfg.performance.niceness;
|
||||||
|
IOSchedulingClass = cfg.performance.ioSchedulingClass;
|
||||||
|
IOSchedulingPriority = cfg.performance.ioPriority;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
mkSettings = name: instance: builtins.map (mkRepositorySettings name instance) instance.repositories;
|
||||||
|
in
|
||||||
|
lib.mkMerge (lib.flatten (lib.attrsets.mapAttrsToList mkSettings resticInstances));
|
||||||
|
}
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue