diff --git a/doc/guix.texi b/doc/guix.texi index 1c39628ffa..454dd66c18 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -35800,6 +35800,32 @@ Ignore cpuid check for supported CPU models. @item @code{thermald} (default: @var{thermald}) Package object of thermald. +@cindex PowerTOP +@cindex power consumption tuning with PowerTOP +@subsubheading PowerTOP + +The @code{(gnu services pm)} module also provides a service definition +for @uref{https://01.org/powertop/, PowerTOP}, a power consumption +analysis and tuning tool. When started, it tunes Linux kernel settings +to reduce power consumption. + +@defvar powertop-service-type +The service type for PowerTOP. No configuration is necessary. When the +service starts, it executes @code{powertop --auto-tune}. + +@lisp +(service powertop-service-type) +@end lisp +@end defvar + +Available @code{powertop-configuration} fields are: + +@deftypevr {@code{powertop-configuration} parameter} package powertop +The PowerTOP package. Defaults to @code{powertop} in the @code{(gnu +packages linux)} module + +@end deftypevr + @end table @end deftp diff --git a/gnu/services/pm.scm b/gnu/services/pm.scm index 5e8e7efda2..1978de55d4 100644 --- a/gnu/services/pm.scm +++ b/gnu/services/pm.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2017 Mathieu Othacehe ;;; Copyright © 2024 Dariqq +;;; Copyright © 2024 Ian Eure ;;; ;;; This file is part of GNU Guix. ;;; @@ -18,6 +19,8 @@ ;;; along with GNU Guix. If not, see . (define-module (gnu services pm) + #:use-module (srfi srfi-1) + #:use-module (ice-9 match) #:use-module (guix gexp) #:use-module (guix packages) #:use-module (guix records) @@ -37,7 +40,10 @@ (define-module (gnu services pm) tlp-configuration thermald-configuration - thermald-service-type)) + thermald-service-type + + powertop-configuration + powertop-service-type)) ;;; ;;; power-profiles-daemon @@ -525,3 +531,37 @@ (define thermald-service-type (default-value (thermald-configuration)) (description "Run thermald, a CPU frequency scaling service that helps prevent overheating."))) + + + +;;; +;;; powertop +;;; +;;; Calls `powertop --auto-tune' to reduce energy consumption. + +(define-configuration powertop-configuration + (powertop (package powertop) "PowerTOP package to use.")) + +(define powertop-shepherd-service + (match-lambda + (($ powertop) + (shepherd-service + (documentation "Tune kernel power settings at boot.") + (provision '(powertop powertop-auto-tune)) + (requirement '(user-processes)) + (one-shot? #t) + (start #~(lambda _ + (zero? (system* #$(file-append powertop "/sbin/powertop") + "--auto-tune")))))))) + +(define powertop-service-type + (service-type + (name 'powertop) + (extensions + (list + (service-extension shepherd-root-service-type + (compose list powertop-shepherd-service)))) + (compose concatenate) + (default-value (powertop-configuration)) + (description "Tune power-related kernel parameters to reduce energy + consumption.")))