From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39251) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d9vnW-0001pA-J1 for guix-patches@gnu.org; Sun, 14 May 2017 11:51:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1d9vnT-0005IK-BD for guix-patches@gnu.org; Sun, 14 May 2017 11:51:06 -0400 Received: from debbugs.gnu.org ([208.118.235.43]:42283) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1d9vnT-0005I8-6k for guix-patches@gnu.org; Sun, 14 May 2017 11:51:03 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1d9vnS-0002GD-35 for guix-patches@gnu.org; Sun, 14 May 2017 11:51:02 -0400 Subject: bug#26919: [PATCH] Add thermald and thermald-service-type (for cpu frequency scaling) Resent-Message-ID: References: <87y3u080qn.fsf@dustycloud.org> <87bmqvy4ca.fsf@gnu.org> From: Christopher Allan Webber In-reply-to: <87bmqvy4ca.fsf@gnu.org> Date: Sun, 14 May 2017 10:49:59 -0500 Message-ID: <87wp9j8ml4.fsf@dustycloud.org> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="==-=-="; micalg=pgp-sha256; protocol="application/pgp-signature" List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+kyle=kyleam.com@gnu.org Sender: "Guix-patches" To: Ludovic =?UTF-8?Q?Court=C3=A8s?= Cc: 26919@debbugs.gnu.org --==-=-= Content-Type: multipart/mixed; boundary="=-=-=" --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Ludovic Court=C3=A8s writes: >> +@subsection Thermal Management > > Would it make sense to move it under =E2=80=9CPower Management Services= =E2=80=9D rather > than =E2=80=9CMiscellaneous Services=E2=80=9D? Oh sure, I hadn't seen that. Before I push, do you think this means that I should probably move the service to (gnu services pm) as well? >> +The @code{(gnu services admin)} module provides an interface to >> +thermald, a cpu frequency scaling service which helps prevent overheati= ng. > > s/cpu/CPU/ :-) OK! >> +@defvr {Scheme Variable} thermald-service-type >> +This is the service type for thermald. > > What about something like this, to give more context: > > =E2=80=A6 for @uref{https://01.org/linux-thermal-daemon/, thermald}, th= e Linux > Thermal Daemon, which is responsible for controlling the thermal state > of Intel processors and preventing overheating. > > ? Yes... except I think it isn't Intel specific, so I removed that word: https://askubuntu.com/questions/716189/does-thermald-for-ubuntu-work-with= -amd-processors >> +@deftp {Data Type} thermald-configuration >> +Data type representing the configuration of THERMALD-SERVICE. > > s/THERMALD-SERVICE/@code{thermald-service-type}/ Ah! Still getting a handle on texinfo :) >> +(define-record-type* >> + thermald-configuration make-thermald-configuration >> + thermald-configuration? >> + (ignore-cpuid-check? thermald-ignore-cpuid-check? >> + (default #f))) > > Could you add a =E2=80=98thermald=E2=80=99 field, defaulting to =E2=80=98= thermald=E2=80=99 (the package)=E2=80=A6 Oh, sure... so this allows users to select a custom thermald? Yes, sounds good. >> +(define (thermald-shepherd-service config) >> + (list >> + (shepherd-service >> + (provision '(thermald)) >> + (documentation "Run thermald cpu frequency scaling.") >> + (start #~(make-forkexec-constructor >> + '(#$(file-append thermald "/sbin/thermald") > > =E2=80=A6 and honor it here, and add it to guix.texi? > > OK with these changes, thank you! Ok! Still looking for your feedback on (gnu services pm), which I assume is probably yes. > Do you think it=E2=80=99s something we should add to =E2=80=98%base-servi= ces=E2=80=99, or is it > too hardware-dependent? > > Ludo=E2=80=99. I think we should provide something. However, I'm not sure the service in its current state would be ideal; one problem with it is that I had to manually turn on the `ignore-cpuid-check?' option. If thermald can't tell what your cpu type is, it won't start. On this libreboot'ed X200 at least, that was the case. However this probably shouldn't be off by default, because it seems that thermald uses some better settings if it *can* find an appropriate CPU. One option could be to provide a 'maybe option to ignore-cpuid-check? which we make the default, and wait to see if the service immediately exits (How would we do this? Watch for a string from stdout/stderr along with an error code?) It's also possible that the tlp package would be better, but it looks like that conflicts with upower-service, so maybe not. (If a solution is not obvious, maybe we should open a bug on guix-bugs with "add a thermal management service to %base-services" and track this there?) WDYT? Anyway, new patches attached. - Chris --=-=-= Content-Type: text/x-patch; charset=utf-8 Content-Disposition: inline; filename=0001-gnu-Add-thermald.patch Content-Transfer-Encoding: quoted-printable From=2056c7019d58d4a064fe44e626a1396b62cbf808b0 Mon Sep 17 00:00:00 2001 From: Christopher Allan Webber Date: Sat, 13 May 2017 19:36:01 -0500 Subject: [PATCH 1/2] gnu: Add thermald. * gnu/packages/admin.scm (thermald): New variable. =2D-- gnu/packages/admin.scm | 54 ++++++++++++++++++++++++++++++++++++++++++++++= +++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm index ff0431999..20cb8f180 100644 =2D-- a/gnu/packages/admin.scm +++ b/gnu/packages/admin.scm @@ -17,6 +17,7 @@ ;;; Copyright =C2=A9 2016 John Darrington ;;; Copyright =C2=A9 2017 Ben Sturmfels ;;; Copyright =C2=A9 2017 Ethan R. Jones +;;; Copyright =C2=A9 2017 Christopher Allan Webber ;;; ;;; This file is part of GNU Guix. ;;; @@ -80,7 +81,8 @@ #:use-module (gnu packages autotools) #:use-module (gnu packages gnome) #:use-module (gnu packages kerberos) =2D #:use-module (gnu packages gtk)) + #:use-module (gnu packages gtk) + #:use-module (gnu packages xml)) =20 (define-public aide (package @@ -2130,3 +2132,53 @@ logo, or any ASCII file of your choice. The main pu= rpose of Neofetch is to be used in screenshots to show other users what operating system or distribut= ion you are running, what theme or icon set you are using, etc.") (license license:expat))) + +(define-public thermald + (package + (name "thermald") + (version "1.6") + (source + (origin + (method url-fetch) + (uri (string-append "https://github.com/01org/thermal_daemon/archive= /v" + version ".tar.gz")) + (sha256 (base32 + "14klz9fnvi9jdlaqwrp61xa5nh051n8ykrs1fh1wxd7j66qf2fn6")))) + (build-system gnu-build-system) + (arguments + `(#:phases (modify-phases %standard-phases + (add-after + 'unpack 'autogen.sh-and-fix-paths + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + ;; upstartconfir is hardcoded to /etc/init and the = build + ;; system tries to mkdir that. We don't even need = upstart + ;; files at all; this is a fast and kludgy workarou= nd + (substitute* "data/Makefile.am" + (("upstartconfdir =3D /etc/init") + (string-append "upstartconfdir =3D " + out "/etc/init"))) + ;; Now run autogen + (zero? (system* "sh" "autogen.sh")))))) + #:configure-flags + (let ((out (assoc-ref %outputs "out"))) + (list (string-append "--sysconfdir=3D" + out "/etc") + (string-append "--with-udev-dir=3D" + out "/lib/udev") + (string-append "--with-dbus-sys-dir=3D" + out "/etc/dbus-1/system.d") + "--localstatedir=3D/var")))) + (native-inputs + `(("autoconf" ,autoconf) + ("automake" ,automake) + ("glib" ,glib "bin") ; for glib-genmarshal, etc. + ("pkg-config" ,pkg-config))) + (inputs + `(("dbus-glib" ,dbus-glib) + ("libxml2" ,libxml2))) + (home-page "https://01.org/linux-thermal-daemon/") + (synopsis "CPU scaling for thermal management") + (description "The Linux Thermal Daemon helps monitor and control tempe= rature +on systems running the Linux kernel.") + (license license:gpl2+))) =2D-=20 2.12.2 --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=0002-services-Add-thermald-service-type.patch Content-Transfer-Encoding: quoted-printable From=2096d1f717fb0f7592e698727cea9822b9f6817848 Mon Sep 17 00:00:00 2001 From: Christopher Allan Webber Date: Sat, 13 May 2017 19:37:02 -0500 Subject: [PATCH 2/2] services: Add 'thermald-service-type'. * gnu/services/admin.scm (): New record type. (thermald-shepherd-service, thermald-service-type): New variables. * doc/guix.texi (Thermal Management): New section documenting thermald. =2D-- doc/guix.texi | 28 +++++++++++++++++++++++++- gnu/services/admin.scm | 53 ++++++++++++++++++++++++++++++++++++++++++++++= ---- 2 files changed, 76 insertions(+), 5 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index 22dc8b3f9..4736f727e 100644 =2D-- a/doc/guix.texi +++ b/doc/guix.texi @@ -35,7 +35,8 @@ Copyright @copyright{} 2017 Mathieu Othacehe@* Copyright @copyright{} 2017 Federico Beffa@* Copyright @copyright{} 2017 Carlo Zancanaro@* Copyright @copyright{} 2017 Thomas Danckaert@* =2DCopyright @copyright{} 2017 humanitiesNerd +Copyright @copyright{} 2017 humanitiesNerd@* +Copyright @copyright{} 2017 Christopher Allan Webber =20 Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or @@ -14614,6 +14615,31 @@ Defaults to @samp{#f}. =20 @end deftypevr =20 + +The @code{(gnu services admin)} module provides an interface to +thermald, a CPU frequency scaling service which helps prevent overheating. + +@defvr {Scheme Variable} thermald-service-type +This is the service type for +@uref{https://01.org/linux-thermal-daemon/, thermald}, the Linux +Thermal Daemon, which is responsible for controlling the thermal state +of processors and preventing overheating. +@end defvr + +@deftp {Data Type} thermald-configuration +Data type representing the configuration of @code{thermald-service-type}. + +@table @asis +@item @code{ignore-cpuid-check?} (default: @code{#f}) +Ignore cpuid check for supported CPU models. + +@item @code{thermald} (default: @var{thermald}) +Package object of thermald. + +@end table +@end deftp + + @node Miscellaneous Services @subsubsection Miscellaneous Services =20 diff --git a/gnu/services/admin.scm b/gnu/services/admin.scm index 6ac24e32b..8b398cec0 100644 =2D-- a/gnu/services/admin.scm +++ b/gnu/services/admin.scm @@ -32,17 +32,27 @@ rottlog-configuration rottlog-configuration? rottlog-service =2D rottlog-service-type)) + rottlog-service-type + + thermald-configuration + thermald-service-type)) =20 ;;; Commentary: ;;; =2D;;; This module implements configuration of rottlog by writing +;;; Various administration services. +;;; +;;; Code: + + + +;;; +;;; Rotlog +;;; +;;; This service implements configuration of rottlog by writing ;;; /etc/rottlog/{rc,hourly|daily|weekly}. Example usage ;;; ;;; (mcron-service) ;;; (service rottlog-service-type (rottlog-configuration)) =2D;;; =2D;;; Code: =20 (define %rotated-files ;; Syslog files subject to rotation. @@ -118,4 +128,39 @@ (compose list rottlog-rottlog)))) (default-value (rottlog-configuration)))) =20 + + +;;; +;;; thermald +;;; +;;; This service implements cpu scaling. Helps prevent overheating! + +(define-record-type* + thermald-configuration make-thermald-configuration + thermald-configuration? + (ignore-cpuid-check? thermald-ignore-cpuid-check? ;boolean + (default #f)) + (thermald thermald-thermald ;package + (default thermald))) + +(define (thermald-shepherd-service config) + (list + (shepherd-service + (provision '(thermald)) + (documentation "Run thermald cpu frequency scaling.") + (start #~(make-forkexec-constructor + '(#$(file-append (thermald-thermald config) "/sbin/thermald") + "--no-daemon" + #$@(if (thermald-ignore-cpuid-check? config) + '("--ignore-cpuid-check") + '())))) + (stop #~(make-kill-destructor))))) + +(define thermald-service-type + (service-type + (name 'thermald) + (extensions (list (service-extension shepherd-root-service-type + thermald-shepherd-service))) + (default-value (thermald-configuration)))) + ;;; admin.scm ends here =2D-=20 2.12.2 --=-=-=-- --==-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEUQqGKOKndniPjHCcS8Alkl/49NMFAlkYfKcACgkQS8Alkl/4 9NM63RAAz/KRYVNAB/OiXL6e4SUIuuF68tv+hsu90YXuXQA20QkKKvhfFAhZT3uz s6zQeEZcAnf6y+VlBYMP8HiFEOyGVv541nc+vHXLgtbTMEqv0ndMRT5P2OXe0oGy a3Y4yYF75PLCOXp+Ltl7sERjqwSVsEZTJtqKcVKuvsd5MPHl8NJhPT58RGeNv+VC j6jJxccU0BcrHXQMrl8wLrMsKqdwGq6NZ1WL85u/pEFON63enAVPo7lGoFuxxAw3 1xd8k7KeO5qlC6YjZCWmq9owUH+IVTMsnXB/sUvbFCtag+/Sozp/XTeuPQx2RFqH +NBiUuVh6REcIjDnyiBM2XwvdsPKTarE0CErOJMcMTaRL00oRhTg+4pYngX5ooFg SMrgJ4NIe4CPmCIHNxnbxLLvdQvqzIJQMLAu9NiEWUF8BA5FIEi2whzfFWQ0zpJH p/kVNGBp3DBvXdwl6sqDB0EIcZvhFSJGFLJyID5z9Ieh0jg343dW/yH8ppMeTzRX XiUoCVWJGQSH+BKQKZBs8sGB02FkPOqBzWhizIMCEE8YY3OP1EaaXJzwgL+T6ru6 w519wjoRcBqKHQdxZQauPDAESmlRHLdQqAal9a5DMJ7j7RbDPVPAihzMtQKv3XCU jYNDoxMTz4y4NFgex7E/OEINWJ7sI2gK6ARWzcHlxTvtxfS10As= =Vx9B -----END PGP SIGNATURE----- --==-=-=--