Kernel 6.3 und das neue AMD P-State EPP Scaling

4nanai

Captain
Registriert
Dez. 2004
Beiträge
3.457
In vielen Rolling Release Distros sollte Kernel 6.3 Einzug gehalten haben und damit auch das neue AMD P-State EPP Scaling, welches mit
Code:
amd_pstate=active
als Kernel-Parameter "scharf" geschaltet werden kann.

Das EPP Scaling verspricht ein besseres Energiemanagement für neuere AMD CPUs. Relevante CB News: https://www.computerbase.de/2023-04...effizientere-patches-und-zen-4-mehr-leistung/

TLP unterstützt in der aktuellen Alpha (1.6.0) bereits EPP und das Setzen der verschiedenen Scaling Driver (performance, balance-performance, balance-power, power): https://download.linrunner.de/packages/
Wer TLP nicht benötigt, kann die verschiedenen Scaling Driver beispielsweise auch mit cpupower setzen.

Phoronix Benchmarks für Consumer CPUs: https://www.phoronix.com/review/amd-pstate-epp-ryzen-mobile

cpu-peak-freq-highest-cpu-core-frequency-monitor-ptssm.jpg


cpu-power-consumption-monitor-ptssm.jpg




Meine Erfahrungen mit dem EPP Scaling sind durchweg positiv. Mit 10W Powerlimit und epp powersave läuft mein 5625U im Regelfall komplett lüfterlos, beispielsweise auch beim Schauen von 1080p Videos im Browser oder anderen leichten Workloads wie Office. Ggü. dem alten pstate driver ist die CPU-Temperatur im Teillast-Betrieb gut 5°C geringer, bei den genannten Workloads bin ich stets zwischen 40°C und 50°C.
Zwar noch nicht getestet, wie jetzt die Laufzeit auf Batterie ist, aber es schaut zumindest vielversprechend aus.

Screenshot_20230511_140036.jpg

Das System fühlt sich auch trotz des 10W Powerlimits stets sehr responsiv an. Gefühlt mehr als beim alten schedultil P-State, was sich zumindest durch die höheren zugelassenen Taktraten beim Boost erklären lässt.


Mehr Details zu amd_pstate=passive, amd_pstate=active, amd_pstate=guided:
https://lwn.net/ml/linux-kernel/20230113052141.2874296-1-wyes.karny@amd.com/
 
  • Gefällt mir
Reaktionen: EdwinOdesseiron, drake23, emerald und 8 andere
Gestern hab' ich mir das Ding kompiliert. Gut zu wissen, dass ich das manuell aktivieren muss.
 
Soweit richtig.
Kernel 6.3 und amd_pstate=active.
Fehlen tut ab >= Zen2 (also z. B. Ryzen 3700X) und CPPC im BIOS/UEFI enabled.
Default ist bei mir (Manjaro, Ryzen 3700X) governer powersave und EPP hint performance.
Ab TLP 1.6.0 wird amd_pstate_epp unterstützt und default EPP hint wird wohl balanced performance sein.
 
  • Gefällt mir
Reaktionen: 4nanai
Bei mir läuft anstatt tlp der Power-Profiles-Daemon.
Damit kann man das auch alles einstellen.
 
Erst ne Frage @4nanai bzw. die Runde, danach Rant über Phoronix.

Hast du die Möglichkeit zu messen wie viel deine Maschine bei geringer Last braucht? Also z.B. Video laufen lassen und dann Energiebedarf (nicht Leistung) über 10Minuten unter verschiedenen Governor zu ermitteln?

#######
(begründeter) Rant über Phoronix

Ja gut Phoronix.. Benches laufen lassen bis zum Umfallen ohne eine tiefgreifende Betrachtung, ob die Testfälle relevant sind, noch welche Aussagekraft wirklich dahintersteckt :/
Phoronix lässt Benchmarks laufen, bei denen der Lastfall mehr oder weniger ist einen oder mehrere Kerne recht ordentlich auszulasten. Die Strategie aller Govonor ist an der Stelle die Last festzustellen und die Arbeitsfrequenz entsprechend der konfigurierten Strategie und Grenzen auf das konfigurierte Maximum anzuheben. Einen Unterschied gibt es da fast nur bei den konfigurierten Maximalfrequenzen der Governor. Der interessante, wesentliche Teil der Governor fällt dabei hinten runter. Wie schaut das Ramping aus und welche Betriebspunkte stellen die Governor während des Rampings bei Lastwechseln ein. Also wechselt die CPU beim Wechsel von "keinerlei Last" zu "es gibt was zu Rechnen" innerhalb von µs von C-State zu "Boost", oder fährt der Governor verschiedene Frequenzen an und es dauert 100te ms bis Sekunden bis "Boost" anliegt? Dieses Ramping macht im Alltag wesentlich aus, wie reaktionsfreudig sich ein System verhält und wie effizient es ist.
Naja und Phoronix misst lediglich die Leistung, die das System braucht. Nicht jedoch die Energie, die für das Abarbeiten einer Aufgabe notwendig ist. Wenn die Aufgabe mit GovA und GovB je 1 bzw. 5min dauert, die Leistung A 20W bei B jedoch 5W, dann schaut bei Phoronix GovB ersteinmal sparsamer aus. Was aber nicht stimmt, da der Energiebedarf A bei 72kWs liegt und bei B bei 90kWs. A ist also eine ganze Ecke besser, im Falle eines Benchmarks mit durchgehend hoher Rechenlast.
Naja und der Fall, "wenig Last, wechselnde Lastzustände" wird gar nicht betrachtet :(

Edit um es zu veranschaulichen. Das Ramping der AMD Zen-Cores im Valve Steamdeck. Da geht es recht zügig los, dass die CPU ihre Basisfrequenz erreicht, bis die Höchstgeschwindigkeit erreicht ist, geht aber fast eine Sekunde ins Land. Mit einer entsprechenden Hysterese beim zurückfahren der CPU-Frequenz kann die CPU so optimale Arbeitspunkte ansteuern, anstatt immer zwischen Boost und Idle zu wechseln. Das ist aber keine optimale Lösung für minimierte Reaktionszeit bzw. minimalen Lag.
Link zum Bild, bin zu faul das manuell in den Post zu verbringen.
Quelle: https://chipsandcheese.com/2023/03/05/van-gogh-amds-steam-deck-apu/
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Arc Angeling
Piktogramm schrieb:
Hast du die Möglichkeit zu messen wie viel deine Maschine bei geringer Last braucht? Also z.B. Video laufen lassen und dann Energiebedarf (nicht Leistung) über 10Minuten unter verschiedenen Governor zu ermitteln?

Kann ich mal bei Gelegenheit machen, im Moment läuft die Kiste fast nur am Dock. Auf jeden Fall interessanter Einwand im Bezug auf die Phoronix-Testmethodik.

Einigen wir uns auf irgendein Referenzvideo mit Auflösung und Abspielmethode, um das Ganze vergleichbar zu halten?
 
@4nanai
Such dir ne (öffentliche) Playlist von Youtube und gut ist.
Vergleichbarkeit ist an der Stelle sowieso kaum gegeben. Mit jeder abweichenden Komponente des Systems, abweichender Softwarekonfiguration inkl. Version ist da so viel Differenz zwischen den Systemen, dass etwaige Tests verschiedener Systeme eh nicht vergleichbar sein werden.

Governor zu testen bzw. generell das Laufzeitverhalten komplexer Systeme unter komplexen Zustands(-änderungen) ist wirklich arg aufwendig.

edit: Zwischen verschiedenen Tests wäre es wahrscheinlich schlau den Browsercache zu leeren. Ansonsten wird es ein Test des Energiebedarfs von Browsern mit/ohne bereits gecachten Daten
 
Hat das ganze schon jemand auf Opensuse getestet? Ich kam bisher nicht dazu, bzw. war ich mir nicht ganz sicher was der beste Weg ist die Kerneleparameter zu editieren. Es gibt ja eine Möglichkeit über yast.
Der Editor in Grub ist soweit ich weiß nicht permanent? Kann auch falsch liegen. Außerdem hab ich ihm grub nicht die richtige Stelle gefunden.
 
Also bei mir will es irgendwie nicht:
Code:
❯ cpupower frequency-info                                                                                              ─╯
analyzing CPU 0:
  driver: acpi-cpufreq
  CPUs which run at the same hardware frequency: 0
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency:  Cannot determine or is not supported.
  hardware limits: 2.20 GHz - 4.65 GHz
  available frequency steps:  3.70 GHz, 2.80 GHz, 2.20 GHz
  available cpufreq governors: ondemand performance schedutil
  current policy: frequency should be within 2.20 GHz and 3.70 GHz.
                  The governor "ondemand" may decide which speed to use
                  within this range.
  current CPU frequency: Unable to call hardware
  current CPU frequency: 2.20 GHz (asserted by call to kernel)
  boost state support:
    Supported: yes
    Active: no
Code:
GRUB_CMDLINE_LINUX_DEFAULT="splash=silent quiet amdgpu.ppfeaturemask=0xffffffff mitigations=auto amd_pstate=active"

Und im BIOS CPPC von Auto auf Enabled.

Code:
❯ lscpu                                                                                                                ─╯
Architecture:            x86_64
  CPU op-mode(s):        32-bit, 64-bit
  Address sizes:         48 bits physical, 48 bits virtual
  Byte Order:            Little Endian
CPU(s):                  12
  On-line CPU(s) list:   0-11
Vendor ID:               AuthenticAMD
  Model name:            AMD Ryzen 5 5600X 6-Core Processor
    CPU family:          25
    Model:               33
    Thread(s) per core:  2
    Core(s) per socket:  6
    Socket(s):           1
    Stepping:            0
    Frequency boost:     enabled
    CPU(s) scaling MHz:  47%
    CPU max MHz:         4650.2920
    CPU min MHz:         2200.0000
    BogoMIPS:            7386.24
    Flags:               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse
                         2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid e
                         xtd_apicid aperfmperf rapl pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcn
                         t aes xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dno
                         wprefetch osvw ibs skinit wdt tce topoext perfctr_core perfctr_nb bpext perfctr_llc mwaitx cpb c
                         at_l3 cdp_l3 hw_pstate ssbd mba ibrs ibpb stibp vmmcall fsgsbase bmi1 avx2 smep bmi2 erms invpci
                         d cqm rdt_a rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_oc
                         cup_llc cqm_mbm_total cqm_mbm_local clzero irperf xsaveerptr rdpru wbnoinvd arat npt lbrv svm_lo
                         ck nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold avic v_vmsav
                         e_vmload vgif v_spec_ctrl umip pku ospke vaes vpclmulqdq rdpid overflow_recov succor smca fsrm
Virtualization features:
  Virtualization:        AMD-V
Caches (sum of all):
  L1d:                   192 KiB (6 instances)
  L1i:                   192 KiB (6 instances)
  L2:                    3 MiB (6 instances)
  L3:                    32 MiB (1 instance)
NUMA:
  NUMA node(s):          1
  NUMA node0 CPU(s):     0-11
Vulnerabilities:
  Itlb multihit:         Not affected
  L1tf:                  Not affected
  Mds:                   Not affected
  Meltdown:              Not affected
  Mmio stale data:       Not affected
  Retbleed:              Not affected
  Spec store bypass:     Mitigation; Speculative Store Bypass disabled via prctl
  Spectre v1:            Mitigation; usercopy/swapgs barriers and __user pointer sanitization
  Spectre v2:            Mitigation; Retpolines, IBPB conditional, IBRS_FW, STIBP always-on, RSB filling, PBRSB-eIBRS Not
                          affected
  Srbds:                 Not affected
  Tsx async abort:       Not affected
 
@4nanai
❯ uname -r ─╯
6.3.1-2-default
 
Kann mir jemand sagen ob, bzw. wie ich unter Zorin OS den neuen 6.3 Kernel einbinden kann?

Ich bin neu bei Linux, habe mal vor 3 Jahren Kodachi getestet und war ziemlich zufrieden. Leider hat der Laptop viel zu viel Strom verbraucht (Laufzeit war bescheiden) und ein Wechsel zu win10 hat die Laufzeit einfach so verdoppelt.

Ich hoffe mit meinem aktuellen Laptop HP Elitebook 845 G9 läuft alles via ZorinOS. Als Alternative installiere ich sonst Linux Mint.

Bitte um kurze Info bzgl. Einbindung eines neuen Kernels (6.3).

Zuletzt, wie installiere ich neue Versionen von Programmen und Treibern wenn diese nicht als flatpack angeboten werden?

VG Michael
 
Snakeeater schrieb:
@4nanai
❯ uname -r ─╯
6.3.1-2-default

Eigenartig. Sieht bei mir auf dem Desktop so aus:

Code:
cpupower frequency-info                                                                      
analyzing CPU 8:
  driver: amd_pstate_epp
  CPUs which run at the same hardware frequency: 8
  CPUs which need to have their frequency coordinated by software: 8
  maximum transition latency:  Cannot determine or is not supported.
  hardware limits: 550 MHz - 4.88 GHz
  available cpufreq governors: performance powersave
  current policy: frequency should be within 550 MHz and 4.88 GHz.
                  The governor "powersave" may decide which speed to use
                  within this range.
  current CPU frequency: Unable to call hardware
  current CPU frequency: 3.68 GHz (asserted by call to kernel)
  boost state support:
    Supported: yes
    Active: no

6.3.3-arch1-1
 
Mal gucken vielleicht ist es auch eine Opensuse Spezialität, vielleicht hat ja ein Nutzer hier Erfolg.
 
Kein Plan was passiert ist, aber nun zeigt er
Code:
❯ cpupower frequency-info                                                                                              ─╯
analyzing CPU 0:
  driver: amd_pstate_epp
  CPUs which run at the same hardware frequency: 0
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency:  Cannot determine or is not supported.
  hardware limits: 550 MHz - 4.65 GHz
  available cpufreq governors: performance powersave
  current policy: frequency should be within 550 MHz and 4.65 GHz.
                  The governor "powersave" may decide which speed to use
                  within this range.
  current CPU frequency: Unable to call hardware
  current CPU frequency: 3.52 GHz (asserted by call to kernel)
  boost state support:
    Supported: yes
    Active: no
Leider habe ich jetzt Probleme mit meiner neuen GPU, ich hoffe das hat nichts mit den pstate zu tun. ^^
 
Fedora 38 mit 6.3.x Kernel und "amd_pstate=active" :

Code:
:~$ cpupower frequency-info  
analyzing CPU 15:
  driver: amd_pstate_epp
  CPUs which run at the same hardware frequency: 15
  CPUs which need to have their frequency coordinated by software: 15
  maximum transition latency:  Cannot determine or is not supported.
  hardware limits: 550 MHz - 4.55 GHz
  available cpufreq governors: performance powersave
  current policy: frequency should be within 550 MHz and 4.55 GHz.
                  The governor "powersave" may decide which speed to use
                  within this range.
  current CPU frequency: Unable to call hardware
  current CPU frequency: 3.53 GHz (asserted by call to kernel)
  boost state support:
    Supported: yes
    Active: yes
    Boost States: 0
    Total States: 3
    Pstate-P0:  3400MHz
    Pstate-P1:  2800MHz
    Pstate-P2:  2200MHz

🥳
 
Kann mir jemand "Idiotensicher" erklären wie ich das unter endeavourOS aktiviere?
Keine Ahung wie und wo ich da Kernelparameter stzem kann.
Ich nutze kein Grub sondern systemd.

Vielen Dank.
 
Bei systemd-boot:
1. Herausfinden was deine standardmäßige Boot-Configdatei ist: grep default /boot/loader/loader.conf (ich gehe mal davon aus, dass du immer diese Option bootest)
2. Die Datei die er damit anzeigt (z.B. linux.conf) im Texteditor öffnen (liegt unter /boot/loader/entries/)
3. Alles in der Zeile "options" sind Kernel-Parameter. Diese kannst du einfach aneinanderreihen, mit Leerzeichen getrennt. Z.B. "options amd_pstate=active amd_pstate.shared_mem=1". Die vorhandenen Optionen lässt du natürlich drin stehen.
4. Datei speichern und Bootloader updaten: sudo bootctl update
5. Rebooten. Er sollte nun bei deiner Standard-Bootauswahl die neuen Kernelparameter aktivieren. Du kannst prüfen was deine Kernelparameter sind, wenn du schon gebootet hast: cat /proc/cmdline
 
  • Gefällt mir
Reaktionen: ufopizza, Piktogramm und maikrosoft
Snakeeater schrieb:
Hat das ganze schon jemand auf Opensuse getestet? Ich kam bisher nicht dazu, bzw. war ich mir nicht ganz sicher was der beste Weg ist die Kerneleparameter zu editieren. Es gibt ja eine Möglichkeit über yast.
Der Editor in Grub ist soweit ich weiß nicht permanent? Kann auch falsch liegen. Außerdem hab ich ihm grub nicht die richtige Stelle gefunden.
Hab's eben unter Tumbleweed eingerichtet.

Mit nano die /etc/default/grub editiert (amd_pstate=active ergänzt), danach update-bootloader und nach einem Reboot war das Modul aktiv.

Mein 5700g geht jetzt im idle auf 400Mhz statt auf 1400Mhz.

Mehr hab ich noch nicht getestet ;)
 
Die Aktivierung von P-State scheint nicht generell bei >=Zen2 zu funktionieren. Wenn das Bios keine Option zum aktivieren von CPPC hat, dann ist es zwecklos. Hier der Fall bei einem Thinkpad L14 AMD 20U5 mit Ryzen 7 4750 (Zen2).
 
Zurück
Oben