"Možná by stačilo při napájení z baterie jen skriptem upřednostnit jádra E před P"
Někde jsem četl, že pro nízkou spotřebu se má používat P jádro. E jádro není efektivní v poměru Spotřeba/Výkon, ale v poměru Cena výroby/Výkon. Že pokud jde o nízkou spotřebu, P jádro na nízkých taktech je efektivnější, jak E jádro na nízkých taktech. E jádra existují proto, že jsou na výrobu levnější a ve vícevláknových úlohách dosahují slušného výkonu, bo jich je hodně.
To není tak úplně pravda. Podstatné také je, že jejich TDP má úplnou jinou charakteristiku. Při plném déle trvajícím výkonu je P jádro méně efektivní než E jádra. Naopak pro krátké úlohy je lepší použít P jádra; zvlášť pokud není potřeba plný výkon. Je to trochu neintuitivní.
Mimochodem, netušíte, jak se low level z userspace (/sys a /proc, nebo syscall) upřednostňuje E jádra?
Hrabal jsem se v tom před víc než půlrokem, a tehdy jsem rozumný způsob nenašel, jen natvrdo naházet affinitu jen na E, plus čiste in-kernel dokumentaci.
Což mi na druhou stranu stačilo, naházení affinity u firefoxu na E, a steamu na P mi plně vyhovuje, ale když už je tu o tom řeč..
Anebo něco jako:
for pid in /proc/[0-9]*; do taskset -a -c 4-7 -p "${pid##*/}";done
13. 1. 2026, 09:34 editováno autorem komentáře
Jasně, to je natvrdo, tam jsem se dostal taky. Ale doufal jsem, že to jde nějak "soft", preference scheduleru na E s tím, že když jsou plně vytížené, tak teprv pak přelejvat na P, a to jsem nenašel.
(jasně, dalo by se to dynamicky z userlandu, ale to pak dost ztrácí kouzlo, když v kernelu jestli jsem to pochopil to nějak připravené je).
BTW jádro vypnout jde, ale na Alder lake (jiný nemám) to má nehezkou konsekvenci, pokud se zaparkuje i CPU0 (které je P, Ečka to dává na konec), tak se (možná jen některé, nezkoumal jsem do hloubky) hry pod Protonem vyhroutí při spuštění. No a když se nezaparkuje CPU0, tak to preferuje všechno naschedulovat na něj od začátku a snaha udržet větráček většinu času zastavenej přijde vniveč.
Ne natvrdo, ale naměkko se to dělá právě manipulací těch EPP a EPB. To však funguje na každém notebooku jinak :( Asi to hlavně omezí TDP.
for i in /sys/devices/system/cpu/cpufreq/policy*/energy_performance_preference; do echo power > ${i};done
for i in /sys/devices/system/cpu/cpu*/power/energy_perf_bias; do echo 15 > ${i};done
Zkusím to doma, mám Raptor lake (13th)
Tak nulté P jádro mi ani vypnout nejde, není to boot core? Vypnutí ostatních P jader i nastavení afinity všech úloh na E jádra měřitelný efekt nemají.
Zato nastavení EPP má velký vliv. Skript by asi mohl vypadat jako tady, i když je to pro AMD. Jen je možné tam poslat místo balanced_power jen power a šetří to ještě více:
https://wiki.archlinux.org/title/Lenovo_ThinkPad_P14s_(AMD)_Gen_4#AMD_P-State_EPP
Ještě jak jsem to měřil. Na baterce 5 minut měřit pomocí
sudo powerstat 5 60
Jen nevím, proč to na začátku 3 minuty čeká.
Pak jsem přehrával 4k video a měřil spotřebu přes RAPL (teda asi ne tak přesně, jako ten předchozí příkaz, zato změří jen tu danou aplikaci)
sudo perf stat -e power/energy-cores/,power/energy-gpu/,power/energy-pkg/ mpv -fs jellyfish-200-mbps-4k-uhd-hevc-10bit.mkv
Měřitelný pozitivní dopad má také nastavit Runtime PM for PCI Device to auto z toho samého skriptu
Není to tak, že spotřeba roste více než lineárně s frekvencí? Teda pro výdrž baterky je nejlepší nejnižší frekvence. Danná úloha sice bude trvat déle, ale spotřebuje se méně W.h z baterie. A ty E jádra mývají nižší frekvence než P.