# [Semi-Risolto] Circa P-state.

## ciro64

Ciao ... ho un sistema con cpu Intel i7 4771 (Haswell) @ 3,5 GHz.

In menuconfig di kernel trovo "P-state" per i processori Intel >= Sandy-Bridge.

Problema: se installo cpupower per monitorare le variazioni di frequenza, cpupower non fa lo start ... rimane quindi inattivo (rc-update add cpupower default && rc)

Togliendo P-state da kernel cpupower funziona.......

Vorrei un po' approfondire questo argomento; e capire quale possa essere la cosa più corretta da farsi.

Grazie per qualsiasi suggerimento  :Smile: 

----------

## fedeliallalinea

Semplicemente cpupower non funziona con p-state ma ha bisogno del modulo acpi-cpufreq. Inoltre p-state ha solo due governor ovvero performance e powersave (simile a ondemand di  acpi-cpufreq). 

Per poter influenzare p-state poi utilizzare i file che si trovano sotto /sys/devices/system/cpu/intel_pstate. Per maggiori informazioni leggere qui.

Inoltre esiste anche il demone thermald (gia' presente nel portage tree) che funziona con p-state per non surriscaldare troppo la cpu (questo programma non l'ho mai provato).

Se ti interessa su phoronix c'e' un test di comparazione fra p-state e cpufreq

----------

## ciro64

Grazie infinite della risposta; quindi secondo Phoronix (che seguo di tanto in tanto) noto che è meglio usare P-state per le performances; Siccome ho un PC desktop penso che adotterò questa "via" ... se avessi un laptop rimarrei allo stato attuale.

Però ... se cpupower non va, che software mi può far vedere quale modalità sta usando in un determinato momento il processore ?

e ....

che ne pensi di

```

sandro@ci74771ht ~ $ eix ncpufre

* sys-power/ncpufreqd

     Available versions:  2.4

     Homepage:            https://bitbucket.org/nelchael/ncpufreqd

     Description:         Daemon controlling CPU speed and temperature

```

?

 comunque provo ora con P-state e ncpufreqd.

Riguardo le temperature magari proverò anche ol software che mi hai consigliato; usando a volte boinc che è il più "esoso" di risorse che sinora abbia visto, ho preso un dissipatore a liquido (Corsair H80i) in quanto col dissipatore di intel nel box della cpu i cores arrivavano ai 100 °C; adesso con un carico boinc + altro i cores arrivano max 80°C; cpu non è overclockata anche perchè con l'overclocking le temperature diventano "pericolose" a parer mio usando overclocking "fro FSB" (non avendo cpu col moltiplicatore sbloccato devo agire sul FSB incrementando le velocità anche di RAM ecc).

----------

## fedeliallalinea

 *ciro64 wrote:*   

> Però ... se cpupower non va, che software mi può far vedere quale modalità sta usando in un determinato momento il processore?

 

Puoi vederlo con il comando:

```
$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
```

Ho trovato questo programma che aiuta a impostare p-state senza dovere passare dai vari file sotto /sys.

----------

## ciro64

Dunque ... ho provato a vedere se P-state fosse abilitato in Fedora 24; ed ho usato l'"applet" per vedere come andava; e l'applet difatti vari dagli 800 MHz ai 3,5 GHz.

Problema: non conosco systemd ..... quindi non so che servizio venga utilizzato in fedora.

Riprovando in Gentoo con la stessa configurazione ottengo nell'applet di mate 3,9 GHz costante (che poi sar3ebbe la velocità massima in turbo mode)

Torno a chiedermi se c'è qualcosa di simile anche nei vari servizi in OpenRC.

perchè quel che vedo è:

```

ci74771ht ~ #  cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor 

performance

performance

performance

performance

performance

performance

performance

performance

ci74771ht ~ # /etc/init.d/ncpufreqd start                                

 * WARNING: ncpufreqd has already been started

ci74771ht ~ # /etc/init.d/ncpufreqd status

 * status: crashed

   

ci74771ht ~ # pstate-frequency 

usage:

pstate-frequency [verbose] [ACTION] [option(s)]

verbose:

    unprivileged:

    -d | --debug     Print debugging messages to stdout (multiple)

    -q | --quiet     Supress all non-error output (multiple)

actions:

    unprivileged:

    -H | --help      Display this help and exit

    -V | --version   Display application version and exit

    -G | --get       Access current CPU values

    --delay          Delay execution by 5 seconds

    privileged:

    -S | --set       Modify current CPU values

options:

    unprivileged:

    -c | --current   Display the current user set CPU values

    -r | --real      Display the real time CPU frequencies

    privileged:

    -p | --plan      Set a predefined power plan

    -m | --max       Modify current CPU max frequency

    -g | --governor  Set the cpufreq governor

    -n | --min       Modify current CPU min frequency

    -t | --turbo     Modify curent CPU turbo boost state

    --sleep          Sleep before setting CPU frequencies

ci74771ht ~ # man pstate-frequency

Non c'è il manuale per pstate-frequency

ci74771ht ~ # pstate-frequency -c 

usage:

pstate-frequency [verbose] [ACTION] [option(s)]

verbose:

    unprivileged:

    -d | --debug     Print debugging messages to stdout (multiple)

    -q | --quiet     Supress all non-error output (multiple)

actions:

    unprivileged:

    -H | --help      Display this help and exit

    -V | --version   Display application version and exit

    -G | --get       Access current CPU values

    --delay          Delay execution by 5 seconds

    privileged:

    -S | --set       Modify current CPU values

options:

    unprivileged:

    -c | --current   Display the current user set CPU values

    -r | --real      Display the real time CPU frequencies

    privileged:

    -p | --plan      Set a predefined power plan

    -m | --max       Modify current CPU max frequency

    -g | --governor  Set the cpufreq governor

    -n | --min       Modify current CPU min frequency

    -t | --turbo     Modify curent CPU turbo boost state

    --sleep          Sleep before setting CPU frequencies

ci74771ht ~ # pstate-frequency -r

usage:

pstate-frequency [verbose] [ACTION] [option(s)]

verbose:

    unprivileged:

    -d | --debug     Print debugging messages to stdout (multiple)

    -q | --quiet     Supress all non-error output (multiple)

actions:

    unprivileged:

    -H | --help      Display this help and exit

    -V | --version   Display application version and exit

    -G | --get       Access current CPU values

    --delay          Delay execution by 5 seconds

    privileged:

    -S | --set       Modify current CPU values

options:

    unprivileged:

    -c | --current   Display the current user set CPU values

    -r | --real      Display the real time CPU frequencies

    privileged:

    -p | --plan      Set a predefined power plan

    -m | --max       Modify current CPU max frequency

    -g | --governor  Set the cpufreq governor

    -n | --min       Modify current CPU min frequency

    -t | --turbo     Modify curent CPU turbo boost state

    --sleep          Sleep before setting CPU frequencies

ci74771ht ~ # 

```

Non so se tornare indietro  :Neutral: 

----------

## fedeliallalinea

Per prima cosa vedi cosa e' settato con il comando:

----------

## fedeliallalinea

Per prima cosa vedi cosa e' settato con il comando:

```
# pstate-frequency -G
```

Poi controlla da linea di comando se effettivamente non funziona lo scaling della frequenza con

```
$ watch -n 0,5 'cat /proc/cpuinfo | grep "MHz"'
```

Poi puoi vedere di giocare con pstate-frequency e cambiare i governor con il comando:

```
# pstate-frequency -S -g <numero>
```

Dove il numero e' uno di questi (quelli fra parentesi):

 *Quote:*   

> There are three user recommended power plans:
> 
> 1. powersave (1) Sets the minimum and maximum scaling frequencies to the
> 
> lowest available and disables Turbo Boost.
> ...

 

A me sul portatile funziona egregiamente (anche la durata della batteria non e' male, chiaro che dipende dalle operazioni che sto facendo) e vedo che le cpu scalano la frequenza.

----------

## ciro64

In primis ... grazie per l'attenzione e le risposte  :Smile: 

elenco i vari passaggi:

1)

```

ci74771ht ~ # pstate-frequency -G

pstate-frequency version 3.3.3

    pstate::CPU_DRIVER   -> intel_pstate

    pstate::CPU_GOVERNOR -> performance

    pstate::TURBO        -> 0 [ON]

    pstate::CPU_MIN      -> 20% [800000KHz]

    pstate::CPU_MAX      -> 100% [3900000KHz]

```

E ... correttamente possiamo vedere che va da "minimo" di 800 MHz ai 3,9 GHz (Max + Turbo).

2) Usando watch -n 0,5 'cat /proc/cpuinfo | grep "MHz"', vedo che la frequenza rimane sui 3,5 GHz. non scala ad 800 MHz.

3)

```

ci74771ht ~ # pstate-frequency -S -g 0

pstate-frequency version 3.3.3

    pstate::CPU_DRIVER   -> intel_pstate

    pstate::CPU_GOVERNOR -> performance

    pstate::TURBO        -> 0 [ON]

    pstate::CPU_MIN      -> 20% [800000KHz]

    pstate::CPU_MAX      -> 100% [3900000KHz]

ci74771ht ~ # pstate-frequency -S -g 1

pstate-frequency version 3.3.3

    pstate::CPU_DRIVER   -> intel_pstate

    pstate::CPU_GOVERNOR -> powersave

    pstate::TURBO        -> 0 [ON]

    pstate::CPU_MIN      -> 20% [800000KHz]

    pstate::CPU_MAX      -> 100% [3900000KHz]

ci74771ht ~ # pstate-frequency -S -g 2

ERROR: governor argument '2' is a number

ci74771ht ~ # pstate-frequency -S -g 3

ERROR: governor argument '3' is a number

ci74771ht ~ # pstate-frequency -S -g 4

ERROR: governor argument '4' is a number

```

Mi prende solo i valori 0 e 1; coi 2, 3, 4 ottengo errore.  :Neutral: 

----------

## fedeliallalinea

 *ciro64 wrote:*   

> Scusa la mia ignoranza ... magari manca qualche settaggio in kernel ?

 

Quello che ho attivato nel kernel lo trovi qua sotto il punto Power management.

----------

## ciro64

Accidenti .... il tuo "system-report" è quasi "Divino"  :Surprised:   :Surprised:   :Surprised: 

Fantastico ... sei un Genio......

Nel frattempo ho fatto un paio di tests usando 0 e 1 per il programmino sopracitato e non noto differenze prestazionali:

```

ci74771ht ~ $ phoronix-test-suite benchmark c-ray

/usr/bin/phoronix-test-suite: riga 39: ./pts-core/hooks/startup/template.sh: Permesso negato

Phoronix Test Suite v6.2.1

    Installed: pts/c-ray-1.1.0

System Information

Hardware:

Processor: Intel Core i7-4771 @ 3.90GHz (8 Cores), Motherboard: ASUS Z97-AR, Memory: 16384MB, Disk: 120GB Samsung SSD 840 + 1000GB Seagate ST1000DM003-9YN1, Graphics: NVIDIA GeForce GTX 660 2048MB (1006/3004MHz), Audio: Realtek ALC892

Software:

OS: Gentoo Intel-haswell-2016-07-07, Kernel: 4.4.6-gentoo (x86_64), Desktop: KDE Frameworks 5, Display Server: X Server 1.16.4, Display Driver: NVIDIA 361.28, OpenGL: 4.4.0, Compiler: GCC 4.9.3 + Clang 3.7.1 + LLVM 3.7.1, File-System: ext4, Screen Resolution: 1920x1080

    Would you like to save these test results (Y/n): n

C-Ray 1.1:

    pts/c-ray-1.1.0

    Test 1 of 1

    Estimated Trial Run Count:    3

    Estimated Time To Completion: 1 Minute (20:36 CEST)

        Started Run 1 @ 20:35:24

        Started Run 2 @ 20:35:39

        Started Run 3 @ 20:35:54  [Std. Dev: 0.06%]

    Test Results:

        15.194

        15.184

        15.175

    Average: 15.18 Seconds

```

Usando il cpupower (cioè senza P-state abilitato) in questo caso arriva a 15,22 secondi ..... quindi una "inezia" dovuta magari a qualche servizio che è entrato in funzione al cron ecc....

Solo non so come fare per "fargli vedere" anche le ulteriori opzioni (cioè la 2, 3, 4)  :Neutral: 

Riguardo il tuo kernel ... usi la use "experimental" in local use flags ? io si , in modo da fargli usare il -march=native in quanto usando -march=haswell differisce di un paio di istruzioni per la virtualizzazione rispetto ad un 4770K.

```

# euse -E experimental -p sys-kernel/gentoo-sources

```

Scusa se non è un "post" il mio "aulico".

Riguardo kernel non ci son molte cose su cui metter mano:

```

ci74771ht ~ # zcat /proc/config.gz | grep -i p |grep -i state

CONFIG_NEED_DMA_MAP_STATE=y

CONFIG_ACPI_SYSTEM_POWER_STATES_SUPPORT=y

CONFIG_X86_INTEL_PSTATE=y

# Intel MIC Coprocessor State Management (COSM) Drivers

```

Ma ... complimenti ... hai anche un sistema sconvolgente  :Razz: 

----------

## fedeliallalinea

 *ciro64 wrote:*   

> Solo non so come fare per "fargli vedere" anche le ulteriori opzioni (cioè la 2, 3, 4) 

 

Si effettivamente nemmeno a me funzionano. Cmq puoi modificare la frequena min/max e il turbo boost.

 *ciro64 wrote:*   

> Riguardo il tuo kernel ... usi la use "experimental" in local use flags ? io si , in modo da fargli usare il -march=native in quanto usando -march=haswell differisce di un paio di istruzioni per la virtualizzazione rispetto ad un 4770K.

 

No, non uso questa use flag. 

Che kernel/versione usi?

----------

## ciro64

```

ci74771ht ~ # uname -a

Linux ci74771ht 4.4.6-gentoo #1 SMP PREEMPT Fri Jul 15 21:45:58 CEST 2016 x86_64 Intel(R) Core(TM) i7-4771 CPU @ 3.50GHz GenuineIntel GNU/Linux

# grep too-s /etc/portage/package.use 

sys-kernel/gentoo-sources experimental

```

Con la USE experimental arriva a riconoscere fino ai "Broadwell" che sono la versione precedente del tuo "Skylake" (non so se prossimamente vi sarà anche per Broadwell-E ovvero le ultime cpu con una marea di cores/threads (fino 10 cores / 20 threads) mi pare); ma costano un sacco.

Comunque la mia configurazione non era molto dissimile alla tua riguardo acpi/power control.

Uhm ... parlando di kernel config, mi "arriva" un "pensiero associativo" riguardo la scelta dello scheduler; siccome ho root , swap e root in ssd (per Genial-too Linux), qualcuno che penso sia in gamba consigliava lo scheduler deadline, mentre io ho il "cfq" e con la use experimental mi propone anche il "BFQ" .... però magari questo andrà visto in separata sede ....

Ora continuo con altri esperimenti.

Tu invece che versione di kernel stai usando ?

e .... grazie infinite per la pazienza _'

----------

## fedeliallalinea

 *ciro64 wrote:*   

> Tu invece che versione di kernel stai usando ?

 

Io udo la 4.5.1 che non è più nel portage tree, dovrei passare alla 4.6 prosdimamente. 

I log dicono qualcosa? 

```
$ dmesg | grep - i pstate
```

----------

## ciro64

Dunque ... oggi sto battendo il record di ricompilazioni kernel  :Very Happy: 

comunque con la situazione "senza P-state, dmesg non mi dice nulla; ora sto ricompilando con P-state per far nuovi esperimenti e tra max 15 minuti ti do il responso come Post scriptum di questo stesso post.

a tra poco  :Smile: 

----------

## ciro64

Mi scuso per "doppio post", ma questo argomento possa davvero interessare anche altri;

Utilizzando P-state (attivatoo in kernel-config), con il programma scaricato da git come indicato da Fedeliallalinea (Grazie Grande  :Smile: ), per ora riesco ad usare solo 2 modalità; ovver 0 o 1; con 0 vien selezionata la modalità performance e i cores (indi anche parlando di threads) viaggiano a 3,5 GHz (che è la frequenza "nominale" della mia cpu (i7 4771).

Se uso il valore 1 posso notare che c'è forse un lieve scaling maggiore riguardo frequenze dei cores (ma questo solo "ad occhio")

Compilando kernel, per esempio, ma con qualsiasi software "heavy", la frequenxa si "stabilizza" sia con modalità 0 che 1 su:

cpu MHz         : 3699.882

che è la "via di mezzo" tra la max freq di mia cpu (3,5 GHz) e la modalità "Trubo (fino a 3,9 GHz)

usando "1" ripeto c'è un lievissimo miglior scaling delle frequenze ma quasi impercettibile che in "idle" mi sembra  inadeguato .... mi aspetterei di vedere (usando il governor powersave) una tendenza maggiormente verso frequenze più basse.

Non so se questo feedback possa tornar utile.

Hello to All  :Smile: 

Grazie Fedeliallalinea di tutti i tuoi interventi  :Smile: 

----------

## ciro64

Ciao; post analogo qui.

Purtroppo continuo a fare esperimenti; però se abilito "Intel P state", le frequenze rimangono sempre troppo alte;

Ho provato a fare 2 tests : ricompilazione di kernel usando P State (time genkernel all) e disabilitandolo; risultato sembra paradossalmente più rapido il metodo senza P State attivo, anche se le frequenze (usando il comando watch ecc ecc) arrivano max 3500,1 MHz, mentre col P-state arrivano a 3700.

Sto diventando deficiente (già lo son sicuramente .....)  :Sad: 

Purtroppo non riesco a trovare "l'anello mancante della cat3ena" ......

Del resto mi sembra uno spreco inutile in Idle aver Frequenze elevate .....

Su Fedora 24 ripeto con attivo il P state lo scaling funziona bene); ma essa usa systemd; perciò torno a chiedermi .... che programma vien usato per gestire le modalità in termine di frequenza di una cpu con systemd rispetto al "parco" offerto da OpenRC ? Non so... (comunque non cambierei mai OpenRC per Systemd che per me è solo un casino e impiega un sacco di tempo, mentre con OpenRC tutto può funzionare ad hoc ed ho un boot in circa 15 secondi con una sacco di servizi attivi) _'

----------

## ciro64

chiedo scusa se sta divenendo quasi un "monologo" ...... e mi scuso per posts multipli.

Comunque usando come "stress-test boinc" che fra tutti i softwares che conosco è il più devastante per la cpu, noto che la frequenza col P-state si stabilizza a 3,5 GHz .... quindi, probabilmente tiene anche conto delle temperature dei cores nello scaling della frequenza dei suddetti (pensavo fosse un'opzione solo per Broadwell-X e Skylake); resta in sintesi il problema che non scende però, in idle, di frequenza; al che tolgo P-state in kernel ed uso i "classici" governors con cpupower. (ondemand per me).

Beh questa discussione la metto come "Pseudo-risolta" .... però se qualcuno ha delle idee migliori .... Grazie  :Smile: 

Con Stima.

Ciao  :Smile: 

----------

## fedeliallalinea

 *ciro64 wrote:*   

> per ora riesco ad usare solo 2 modalità; ovver 0 o 1; con 0 vien selezionata la modalità performance e i cores (indi anche parlando di threads) viaggiano a 3,5 GHz (che è la frequenza "nominale" della mia cpu (i7 4771)

 

Questo e' normale p-state ha solo queste due modalita', puoi variare la percentuale minima e massima di cpu da usare e abilitare/disabilitare il turbo boost.

Qua vedo un bug che senmbra simile al tuo (anche se il processore non e' identico), vedi se ne ricavi qualcosa.

----------

## ciro64

Ok Grazie .....

Comunque la mia cpu ha anche problemi con in u-code .... se lo abilito ottengo risultati "strani" a livello grafico.

Vedo un po' se riesco a otener nuove notizie;

Grazie ancora Fedeliallalinea  :Smile: 

----------

