Intel i7-1065G7 non raggiunge la massima frequenza di turbo boost

Aug 18 2020

Ho un laptop con una CPU Intel i7-1065G7 . turbostatrapporti

35 * 100.0 = 3500.0 MHz max turbo 8 active cores
35 * 100.0 = 3500.0 MHz max turbo 7 active cores
35 * 100.0 = 3500.0 MHz max turbo 6 active cores
35 * 100.0 = 3500.0 MHz max turbo 5 active cores
35 * 100.0 = 3500.0 MHz max turbo 4 active cores
35 * 100.0 = 3500.0 MHz max turbo 3 active cores
38 * 100.0 = 3800.0 MHz max turbo 2 active cores
39 * 100.0 = 3900.0 MHz max turbo 1 active cores

(questi sono 4 core fisici / 8 virtuali) Quando lancio un grande carico single-thread (calcolando pi con mpfr) sulla cpu osservo che due core (forse un core fisico?) funzionano esattamente a 3500 MHz mentre gli altri hanno un valore inferiore frequenza. Ma non raggiungono mai le frequenze più alte di turbo boost.

Se disattivo alcuni dei nuclei CPU (ad esempio con echo 0 > /sys/devices/system/cpu/cpu[2-7]*/online) il portatile non raggiunge le frequenze di boost superiore turbo corrispondenti, con conseguente aumento delle prestazioni (un compito che ha in media 18,5 secondi prima ora prende 16.8).

Come posso fare in modo che il mio nuovo laptop raggiunga la massima velocità di clock quando non sono necessari tutti i core?

Sto usando Ubuntu 20.04 con kernel 5.4.0 su un laptop HP Envy x360.

Cosa mi aspetto: sul mio vecchio laptop con un i7-4712MQ turbostat

30 * 100.0 = 3000.0 MHz max turbo 4 active cores
30 * 100.0 = 3000.0 MHz max turbo 3 active cores
32 * 100.0 = 3200.0 MHz max turbo 2 active cores
33 * 100.0 = 3300.0 MHz max turbo 1 active cores

(anche questa è una macchina 4/8 core). Su questa macchina un carico single-core aumenta un core fino a quasi 3,3 GHz, con un carico a due core due clock a 3,2 GHz ecc.

Non ho controllato le singole frequenze della CPU su Windows, ma il task manager a volte visualizza frequenze superiori a 3,7 GHz.

Aggiornamento: Quindi il problema è scomparso ... non ho idea del perché. Ho disinstallato linux-cloud-toolsma non credo che questo dovrebbe essere il motivo.

Risposte

H2ONaCl Aug 18 2020 at 08:01

Hai scritto...

Quando lancio un grande carico a thread singolo

Se il tuo programma è a thread singolo, non è necessario che raggiunga la frequenza massima sugli altri thread, quindi non lo fa.

Il tuo collegamento è per il processore Intel® Core ™ i7-1065G7.

Il documento Intel che hai collegato dice che il massimo è 3900 MHz. I tuoi dati sembrano mostrare che c'è un core a 3900 MHz, quindi non so perché pensi che non abbia raggiunto il massimo. Hai postato questo ...

35 * 100.0 = 3500.0 MHz max turbo 8 active cores
35 * 100.0 = 3500.0 MHz max turbo 7 active cores
35 * 100.0 = 3500.0 MHz max turbo 6 active cores
35 * 100.0 = 3500.0 MHz max turbo 5 active cores
35 * 100.0 = 3500.0 MHz max turbo 4 active cores
35 * 100.0 = 3500.0 MHz max turbo 3 active cores
38 * 100.0 = 3800.0 MHz max turbo 2 active cores
39 * 100.0 = 3900.0 MHz max turbo 1 active cores

In generale, se la lettura non è la frequenza massima è perché o lo fa solo in modo intermittente, quindi la misurazione lo mostrerà solo in modo intermittente oppure non è necessario che sia alla frequenza massima perché c'è qualche vincolo come IO. Non ti preoccupare. Se scrivi un programma che non ha vincoli, in altre parole, è un thread con vincoli di calcolo, ti garantisco che andrà alla frequenza massima.

Un tempo trascorso di 18,5 s potrebbe non essere significativo a causa di effetti casuali che non si desidera utilizzare per trarre conclusioni. Lavori di lunga durata di 200 secondi o più potrebbero fornire dati più significativi.

thesps Sep 28 2020 at 19:04

Ho sperimentato qualcosa di simile, su una configurazione simile (CPU i7-9700K, Ubuntu 18.04). E penso che l'utilizzo della mia macchina possa essere simile: è una macchina desktop che uso per eseguire alcune applicazioni intensive (ma a thread singolo), possibilmente anche con un browser web e alcune app di messaggistica aperte. Ho trovato il suggerimento nei commenti sotto il post originale di funzionare, impostando l'affinità della CPU per i processi. Lo facevo io taskset[1].

Primo test (nessuna modifica alle impostazioni di affinità): tutti gli 8 core "inattivi" a circa il 10% di utilizzo. Avvio una singola attività a thread intensiva per la CPU. Un core salta al 100%, vedo 3,6 GHz (il massimo senza turbo) su tutti i core che utilizzano i7z.

Seconda prova: limita tutti i processi in esecuzione per core CPU 0 e 1, con: . Ora quei 2 core si trovano al 30-40%, il resto allo 0% (anche se alcuni altri core potrebbero iniziare a ottenere attività quando il sistema operativo avvia i processi). Quindi avvia la stessa attività a thread singolo e intensiva della CPU. Un core salta al 100%, ma ora vedo che raggiunge la frequenza turbo massima di 4,9 GHz. Successivamente ho reimpostato l'affinità per utilizzare tutti i core sostituendo l' intervallo con , nel mio caso.for i in `sudo ps -aux | awk '{ print $2 }'`; do sudo taskset -a -p -c 0-1 $i; done0-10-7

[1] http://manpages.ubuntu.com/manpages/focal/man1/taskset.1.html