Round 317: Ipmitool ext, Lm-sensors ext, Turbostat ext, Cpupower ext, Numactl ext (20 commands)

ober

b5524313d6f450a63405a6420e24febc31c230b0

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index a3a227f..1d42ecc 100644
--- a/docs/jemacs-vs-emacs.md
+++ b/docs/jemacs-vs-emacs.md
@@ -4583,6 +4583,31 @@ No remaining Tier 1 gaps. All core editing, completion, and navigation features 
 | ebib-import-file | :orange_circle: | Import file into Ebib |
 | ebib-push-citation | :orange_circle: | Push Ebib citation to buffer |
 
+### Round 317 — Ipmitool ext, Lm-sensors ext, Turbostat ext, Cpupower ext, Numactl ext
+
+| Feature | Status | Notes |
+|---------|--------|-------|
+| `ipmitool-sensor` | :orange_circle: | List IPMI sensor readings |
+| `ipmitool-sdr` | :orange_circle: | Show SDR repository |
+| `ipmitool-sel` | :orange_circle: | Show system event log |
+| `ipmitool-chassis` | :orange_circle: | Show chassis status |
+| `lm-sensors-detect` | :orange_circle: | Detect hardware monitors |
+| `lm-sensors-show` | :orange_circle: | Show all sensor readings |
+| `lm-sensors-fan` | :orange_circle: | Show fan speeds |
+| `lm-sensors-temp` | :orange_circle: | Show temperatures |
+| `turbostat-show` | :orange_circle: | Show CPU frequency/power |
+| `turbostat-interval` | :orange_circle: | Monitor at interval |
+| `turbostat-summary` | :orange_circle: | Show turbostat summary |
+| `turbostat-package` | :orange_circle: | Show package stats |
+| `cpupower-frequency` | :orange_circle: | Show frequency info |
+| `cpupower-info` | :orange_circle: | Show CPU power info |
+| `cpupower-governor` | :orange_circle: | Set CPU governor |
+| `cpupower-idle` | :orange_circle: | Show idle state info |
+| `numactl-show` | :orange_circle: | Show NUMA policy |
+| `numactl-hardware` | :orange_circle: | Show NUMA topology |
+| `numactl-bind` | :orange_circle: | Bind to NUMA node |
+| `numactl-interleave` | :orange_circle: | Interleave across nodes |
+
 ### Round 316 — Smartctl ext, Hdparm ext, Sdparm ext, Nvme ext, Fio ext
 
 | Feature | Status | Notes |
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index a0574dd..b1b412d 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -23829,4 +23829,54 @@
   (let* ((echo (app-state-echo app)))
     (echo-read-string echo "Result files: "
       (lambda (files)
-        (echo-message! echo (str "Fio: comparing " files))))))
\ No newline at end of file
+        (echo-message! echo (str "Fio: comparing " files))))))
+
+;;; Round 317 — Turbostat ext, Cpupower ext, Numactl ext (batch 2)
+
+(def (cmd-turbostat-summary app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Turbostat: showing summary")))
+
+(def (cmd-turbostat-package app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Package ID: "
+      (lambda (pkg)
+        (echo-message! echo (str "Turbostat: showing package " pkg))))))
+
+(def (cmd-cpupower-frequency app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Cpupower: showing frequency info")))
+
+(def (cmd-cpupower-info app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Cpupower: showing CPU power info")))
+
+(def (cmd-cpupower-governor app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Governor: "
+      (lambda (gov)
+        (echo-message! echo (str "Cpupower: setting governor to " gov))))))
+
+(def (cmd-cpupower-idle app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Cpupower: showing idle state info")))
+
+(def (cmd-numactl-show app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Numactl: showing NUMA policy")))
+
+(def (cmd-numactl-hardware app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Numactl: showing hardware topology")))
+
+(def (cmd-numactl-bind app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "NUMA node: "
+      (lambda (node)
+        (echo-message! echo (str "Numactl: binding to node " node))))))
+
+(def (cmd-numactl-interleave app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Nodes: "
+      (lambda (nodes)
+        (echo-message! echo (str "Numactl: interleaving across " nodes))))))
\ No newline at end of file
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index 49d855e..c4db0e8 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -24540,3 +24540,47 @@
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Sdparm: listing parameters")))
 
+;;; Round 317 — Ipmitool ext, Lm-sensors ext, Turbostat ext, Cpupower ext, Numactl ext (batch 1)
+
+(def (cmd-ipmitool-sensor app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "IPMI: listing sensor readings")))
+
+(def (cmd-ipmitool-sdr app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "IPMI: showing SDR repository")))
+
+(def (cmd-ipmitool-sel app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "IPMI: showing system event log")))
+
+(def (cmd-ipmitool-chassis app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "IPMI: showing chassis status")))
+
+(def (cmd-lm-sensors-detect app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Sensors: detecting hardware monitors")))
+
+(def (cmd-lm-sensors-show app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Sensors: showing all readings")))
+
+(def (cmd-lm-sensors-fan app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Sensors: showing fan speeds")))
+
+(def (cmd-lm-sensors-temp app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Sensors: showing temperatures")))
+
+(def (cmd-turbostat-show app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Turbostat: showing CPU frequency/power")))
+
+(def (cmd-turbostat-interval app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Interval (seconds): "
+      (lambda (sec)
+        (echo-message! echo (str "Turbostat: monitoring every " sec "s"))))))
+
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index 11343dd..a960d80 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -8074,4 +8074,25 @@
   (register-command! 'fio-parse cmd-fio-parse)
   (register-command! 'fio-generate cmd-fio-generate)
   (register-command! 'fio-compare cmd-fio-compare)
+  ;; Round 317
+  (register-command! 'ipmitool-sensor cmd-ipmitool-sensor)
+  (register-command! 'ipmitool-sdr cmd-ipmitool-sdr)
+  (register-command! 'ipmitool-sel cmd-ipmitool-sel)
+  (register-command! 'ipmitool-chassis cmd-ipmitool-chassis)
+  (register-command! 'lm-sensors-detect cmd-lm-sensors-detect)
+  (register-command! 'lm-sensors-show cmd-lm-sensors-show)
+  (register-command! 'lm-sensors-fan cmd-lm-sensors-fan)
+  (register-command! 'lm-sensors-temp cmd-lm-sensors-temp)
+  (register-command! 'turbostat-show cmd-turbostat-show)
+  (register-command! 'turbostat-interval cmd-turbostat-interval)
+  (register-command! 'turbostat-summary cmd-turbostat-summary)
+  (register-command! 'turbostat-package cmd-turbostat-package)
+  (register-command! 'cpupower-frequency cmd-cpupower-frequency)
+  (register-command! 'cpupower-info cmd-cpupower-info)
+  (register-command! 'cpupower-governor cmd-cpupower-governor)
+  (register-command! 'cpupower-idle cmd-cpupower-idle)
+  (register-command! 'numactl-show cmd-numactl-show)
+  (register-command! 'numactl-hardware cmd-numactl-hardware)
+  (register-command! 'numactl-bind cmd-numactl-bind)
+  (register-command! 'numactl-interleave cmd-numactl-interleave)
 )