Puncte:-1

Cum îmi pot face CPU să funcționeze la viteză maximă eludând scalarea CPU?

drapel sa

Rulez CentOS 7 (7.9.2009) (kernel 3.10.0-1160.49.1.el7.x86_64) pe un laptop destul de vechi (Lenove T61) cu un procesor dual core (CPU Intel(R) Core(TM)2 Duo) T7300 @ 2,00 GHz). Driverul pentru scalarea CPU este acpi-cpufreq, iar când este pe performanţă guvernator, pot face ca procesorul să funcționeze la viteza maximă a procesorului, așa cum este enumerată în /sys/devices/system/cpu/cpufreq/policy0/cpuinfo_max_freq, și observați acest lucru făcând:

$ grep -i mhz /proc/cpuinfo 
CPU MHz: 2001.000
CPU MHz: 2001.000

și este constant la această viteză. Pot verifica acest lucru făcând:

$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
2001000
$ sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq 
2001000

Încerc să rulez la o frecvență constantă pentru un program în timp real care numără ciclurile de ceas al procesorului pentru sincronizare. Am compilat un nucleu personalizat (5.10.83-rt58) pentru a suporta o bucată de hardware care nu este acceptată în nucleul implicit CentOS (3.10.0). Scalarea procesorului determină, de obicei, frecvența ceasului să sară, dar am descoperit că pot obține o frecvență constantă setând toate valorile în /sys/devices/system/cpu/cpu*/cpuidle/state*/disable la 1. Cand verific frecventa:

$ grep -i mhz /proc/cpuinfo 
CPU MHz: 1995.106
CPU MHz: 1995.106

nu este chiar la 2001MHz așa cum se vede cu nucleul 3.10.0. Următoarea comandă verifică acest lucru:

$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
1995106

Dar rezultatul:

$ sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq
2001000

e diferit. Întrebarea mea este: știe cineva de ce procesorul meu nu funcționează la frecvența maximă (2001MHz), dar la ~6MHz mai puțin? S-a schimbat ceva drastic în scalarea CPU între nucleul 3.10 și 5.10?

Paul Gear avatar
drapel cn
Această întrebare este mai bine adresată pe [Super User](https://superuser.com/).
Puncte:1
drapel cn

Încerc să rulez la o frecvență constantă pentru un program în timp real care numără ciclurile de ceas al procesorului pentru sincronizare.

Această abordare este problematică, așa cum procesoare moderne de scalare a performanței nu vor rula la o singură frecvență. Numărul exact al ciclului lor depinde de condițiile termice. Poate că priza dvs. este atât de ușor defectă. Și kernel-ul personalizat ar putea avea diferențe arbitrare față de cel al lui Red Hat, așa că da, este posibil ca (sau microcodul) să pună procesorul în moduri diferite.

Utilizați API-urile timer furnizate. subliniază în timp real Linux a aplicare ciclică de bază. Observați utilizarea clock_nanosleep() cu CLOCK_MONOTONIC.

Referința de programare a timpului ESR este o istorie decentă a motivului pentru care există câteva zeci de funcții de timp.


Pentru a modifica guvernatoarele CPU și alte reglaje din motive de latență și putere, aruncați o privire la tuned. De exemplu, profilul de latență-performanță.

Mitch avatar
drapel sa
Mulțumesc pentru răspuns, foarte perspicace, dar „procesoarele moderne de scalare a performanței nu vor rula la o singură frecvență” nu este adevărat, îmi pot face CPU-ul să funcționeze la o frecvență constantă de 2001 MHz folosind kernel-ul 3.10. Am alte mașini care rulează CentOS7 (procesor Intel Core I5) și pot obține nucleul 3.10 pentru a rula procesorul la o frecvență constantă. Simt că ar putea exista un steag de kernel sau ceva pentru asta despre care nu știu, deoarece nu sunt un expert în kernel.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.