[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/cpupower 3b29497bc3 01/35: here's the first piece
From: |
ELPA Syncer |
Subject: |
[elpa] externals/cpupower 3b29497bc3 01/35: here's the first piece |
Date: |
Thu, 5 May 2022 15:57:43 -0400 (EDT) |
branch: externals/cpupower
commit 3b29497bc39c14ea27be47837be190db56a79d12
Author: smeister <smeister@awstruepower.com>
Commit: smeister <smeister@awstruepower.com>
here's the first piece
---
cpupower.el | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 93 insertions(+)
diff --git a/cpupower.el b/cpupower.el
new file mode 100644
index 0000000000..ca09046dd3
--- /dev/null
+++ b/cpupower.el
@@ -0,0 +1,93 @@
+;;; -*- lexical-binding: t -*-
+(setq lexical-binding t)
+
+
+(defconst cpupower-cmd
+ "sudo cpupower"
+ "cpupower command, might need a 'sudo' infront of it")
+
+(defconst cpupower--compatible-versions
+ '("5.4")
+ "Versions of cpupower which cpupower.el can work with")
+
+(defun cpupower--num-cpus ()
+ "Determine how many CPUs are on this system
+
+Done by cat-ing /proc/cpuinfo and counting lines with
+\"processor\" in them.
+
+TODO: do this in a less bad way?"
+ (let ((cpu-count 0))
+ (with-temp-buffer
+ (insert-file-contents "/proc/cpuinfo")
+ (while (search-forward "processor" nil t)
+ (cl-incf cpu-count)))
+ cpu-count))
+
+(defun cpupower--get-available-governors ()
+ "Get a list of all valid governors for this system."
+ (let ((governors-per-cpu))
+ (cl-loop for cpu-num in (number-sequence 0 (cpupower--num-cpus))
+ for cpu-governors-file = (format
"/sys/devices/system/cpu/cpu%d/cpufreq/scaling_available_governors" cpu-num)
+ while (file-exists-p cpu-governors-file)
+ do (push (split-string
+ (with-temp-buffer
+ (insert-file-contents cpu-governors-file)
+ (buffer-string)))
+ governors-per-cpu))
+ (cl-loop with valid-governors = (car governors-per-cpu)
+ for other-governor-set in (cdr governors-per-cpu)
+ do (setq other-governor-set
+ (cl-intersection valid-governors other-governor-set))
+ finally return valid-governors)))
+
+(defun cpupower--run (subcommand)
+ "Execute cpupower with SUBCOMMAND string."
+ (with-temp-buffer
+ (let ((command (format "%s %s" cpupower-cmd subcommand)))
+ (message "running: %s" command)
+ (shell-command command (current-buffer))
+ (buffer-string))))
+
+(defun cpupower-info ()
+ (interactive)
+ (message (cpupower--run "--cpu all frequency-info")))
+
+(defun cpupower-set-governor (governor)
+ (interactive "sGovernor: ")
+ (let ((valid-governors (cpupower--get-available-governors)))
+ (unless (member governor valid-governors)
+ (error "Invalid governor: %s, must be one of %s" governor
valid-governors))
+ (cpupower--run (format "--cpu all frequency-set -g %s" governor))
+ (cpupower-info)))
+
+(defun cpupower--get-version ()
+ (let* ((output (cpupower--run "--version"))
+ (tokens (split-string output)))
+ (when (string-equal (car tokens) "cpupower")
+ (cadr tokens))))
+
+(defun cpupower-get-frequencies ()
+ (interactive)
+ (let* ((output (cpupower--run "--cpu all frequency-info -f"))
+ (tokens (split-string output))
+ (frequencies))
+ (cl-loop with next-token-is-frequency = nil
+ for token in tokens
+ if next-token-is-frequency
+ do (progn
+ (push (string-to-number token) frequencies)
+ (setq next-token-is-frequency nil))
+ else
+ do (when (string-equal token "frequency:")
+ (setq next-token-is-frequency t))
+ finally return frequencies)))
+
+(defun cpupower-helm-set-governor ()
+ (interactive)
+ (cpupower-set-governor
+ (helm :sources (helm-build-sync-source "cpu-governors"
+ :candidates (cpupower--get-available-governors))
+ :buffer "*helm set cpu governor*")))
+
+(provide 'cpupower)
- [elpa] externals/cpupower b3742b03bf 15/35: Merge branch 'formalize', (continued)
- [elpa] externals/cpupower b3742b03bf 15/35: Merge branch 'formalize', ELPA Syncer, 2022/05/05
- [elpa] externals/cpupower bdc0013d83 33/35: version 1.0.1?, ELPA Syncer, 2022/05/05
- [elpa] externals/cpupower b6c476e8f1 27/35: do these need to be out here?, ELPA Syncer, 2022/05/05
- [elpa] externals/cpupower 0325122de5 31/35: Merge remote-tracking branch 'origin/version-check', ELPA Syncer, 2022/05/05
- [elpa] externals/cpupower 3824c2aae4 25/35: remove that warning?, ELPA Syncer, 2022/05/05
- [elpa] externals/cpupower c62689f72e 24/35: now without cat-ing random files, ELPA Syncer, 2022/05/05
- [elpa] externals/cpupower d2e1eacaba 13/35: ok, that looks reasonable, ELPA Syncer, 2022/05/05
- [elpa] externals/cpupower 40e5ece723 17/35: Merge branch 'with-readme', ELPA Syncer, 2022/05/05
- [elpa] externals/cpupower f661743bcf 19/35: :shrug:, ELPA Syncer, 2022/05/05
- [elpa] externals/cpupower 24bd212efe 28/35: ok, got those backwards, ELPA Syncer, 2022/05/05
- [elpa] externals/cpupower 3b29497bc3 01/35: here's the first piece,
ELPA Syncer <=
- [elpa] externals/cpupower 7b0e057ca6 05/35: ok, I think it works now., ELPA Syncer, 2022/05/05
- [elpa] externals/cpupower 4e85b4dc02 04/35: Initial commit, ELPA Syncer, 2022/05/05
- [elpa] externals/cpupower d38011bbb9 06/35: Merge branch 'starting' into 'main', ELPA Syncer, 2022/05/05
- [elpa] externals/cpupower db7bf2406c 12/35: a bit more, ELPA Syncer, 2022/05/05
- [elpa] externals/cpupower 3501256e73 14/35: okay., ELPA Syncer, 2022/05/05
- [elpa] externals/cpupower b661a409c6 16/35: :shrug:, ELPA Syncer, 2022/05/05
- [elpa] externals/cpupower fa9888163d 03/35: more?, ELPA Syncer, 2022/05/05
- [elpa] externals/cpupower 5efe8c1f7d 11/35: clean up pass, ELPA Syncer, 2022/05/05
- [elpa] externals/cpupower 9f283594a9 20/35: :shrug:, ELPA Syncer, 2022/05/05
- [elpa] externals/cpupower 40952ede70 32/35: using keyword recommended by the manual, ELPA Syncer, 2022/05/05