Come ottenere una velocità di clock della CPU ARM in Linux?


16

Ho una macchina embedded basata su ARM basata sulla scheda S3C2416. Secondo le specifiche che ho a disposizione dovrebbe esserci un ARM9 a 533 MHz (ARM926EJ-S secondo /proc/cpuinfo), tuttavia il software in esecuzione "sembra" lento, rispetto allo stesso software sul mio telefono Android con una CPU ARM a 528 MHz.

/proc/cpuinfomi dice che BogoMIPS è 266.24. So che non dovrei fidarmi di BogoMIPS per quanto riguarda le prestazioni ("Bogo" = fasullo), tuttavia vorrei ottenere una misurazione sulla velocità effettiva della CPU. Su x86, ho potuto usare le rdtscistruzioni per ottenere il contatore del timestamp, attendere un secondo (sleep (1)), leggere di nuovo il contatore per ottenere un'approssimazione sulla velocità della CPU e, secondo la mia esperienza, questo valore era abbastanza vicino a la vera velocità della CPU.

Come posso trovare la velocità effettiva della CPU di un determinato processore ARM?

Aggiornare

Ho trovato questo semplice calcolatore Pi , che ho compilato sia per il mio telefono Android che per la scheda ARM. I risultati sono i seguenti:

S3C2416

# cat /proc/cpuinfo
Processor   : ARM926EJ-S rev 5 (v5l)
BogoMIPS    : 266.24
Features    : swp half fastmult edsp java 
...
#./pi_arm 10000
Calculation of PI using FFT and AGM, ver. LG1.1.2-MP1.5.2a.memsave
...
8.50 sec. (real time)

androide

# cat /proc/cpuinfo
Processor   : ARMv6-compatible processor rev 2 (v6l)
BogoMIPS    : 527.56
Features    : swp half thumb fastmult edsp java 
# ./pi_android 10000
Calculation of PI using FFT and AGM, ver. LG1.1.2-MP1.5.2a.memsave
...
5.95 sec. (real time)

Quindi sembra che ARM926EJ-S sia più lento del mio telefono Android, ma non due volte più lento di quanto mi aspetterei dalle cifre di BogoMIPS. Non sono ancora sicuro della velocità di clock della CPU ARM9.



Sì, questo è l'originale, avrei dovuto avere un modello più recente con CPU a 533 MHz, ecco perché sto verificando se ho quello che avrei dovuto ...
MiKy

1
266.24*2=532.48Quindi sembra che sia morto. Il mio 480MHz ARM CPU ottiene 239,2, 439.2*2=478.4.
David Schwartz,

Ci sono molte cose che possono influenzare la velocità delle applicazioni oltre alla velocità della CPU, come la velocità della RAM, la larghezza del bus RAM e la velocità di archiviazione / NAND.
LawrenceC

1
Conosco l'S3C2416. È davvero un design ARM9 / ARMv4, non un design "Cortex" ARMv6 o v7. Il ARM nel tuo smartphone Android probabilmente è un Cortex, ad esempio il design Cortex A5.
Salterio il

Risposte:


4

AFAICT l'orologio di un S3C2416 sembra proprio quello di un S3C2443 o processori simili della sua famiglia. Il codice sorgente di Linux suggerisce che ci sono una serie di orologi strettamente correlati.

Snippet di scelta:

    pll = get_mpll(mpllcon, xtal);
    clk_msysclk.clk.rate = pll;

    fclk = pll / get_fdiv(clkdiv0);
    hclk = s3c2443_prediv_getrate(&clk_prediv);
    hclk /= s3c2443_get_hdiv(clkdiv0);
    pclk = hclk / ((clkdiv0 & S3C2443_CLKDIV0_HALF_PCLK) ? 2 : 1);

    s3c24xx_setup_clocks(fclk, hclk, pclk);

    printk("CPU: MPLL %s %ld.%03ld MHz, cpu %ld.%03ld MHz, mem %ld.%03ld MHz, pclk %ld.%03l MHz\n",
           (mpllcon & S3C2443_PLLCON_OFF) ? "off":"on",
           print_mhz(pll), print_mhz(fclk),
           print_mhz(hclk), print_mhz(pclk));

Aggiornamento dall'OP

Ho cercato questo output da dmesg, ma non sono riuscito a trovare nulla: l' dmesgoutput era disseminato di messaggi di debug e mancava l'inizio. Chiaramente il buffer dei messaggi del kernel era troppo breve per contenere tutti i messaggi fino a quando non mi connettevo tramite telnet. Mettendo /bin/dmesg > /tmp/dmesg.logall'inizio del processo di avvio, sono stato in grado di ottenere questo output, confermando ciò che volevo sapere:

Linux version 2.6.21 (gcc version 4.2.2)
CPU: ARM926EJ-S revision 5 (ARMv5TEJ)
Machine: SMDK2416
...
CPU S3C2416 EVT3
S3C24XX Clocks, (c) 2004 Simtec Electronics
S3C2416: mpll on 534.000 MHz, cpu 534.000 MHz, mem 133.500 MHz, pclk 66.750 MHz

9

Prova cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq.

Sul mio Android si legge 1113600, quindi questo è in kHz .


Purtroppo non ls -l /sys/devices/system/cpu/cpu0/mi sta dando risultati. Sembra che la scheda non supporti il ​​ridimensionamento di frequenza (o che il kernel sia troppo vecchio).
MiKy


Parte dell'albero manca in Debian 3.16.7-ckt25-2. cpufreqmanca sotto /sys/devices/system/cpu/cpu0/(e altri CPU). È una prima scheda ARMv8 / Aarch64 Mustang, ma non sono sicuro che faccia parte del problema. Un HiKey ARMv8 / Aarch64 con 3.18.0-linaro-hikey ha l'albero.
jww

Non esiste su un Raspberry Pi 3 B + che esegue anche Debian a 64 bit. Hai bisogno di un pacchetto per ottenerlo?
Jon Harrop,

1

Con Linux, se hai il hwinfocomando, allora (come root) problema:
hwinfo --cpu | grep Clock


Questo è uno strumento SuSE e di solito non è disponibile per impostazione predefinita su altre distribuzioni.
Evi1M4chine,

Per Debian Jessie: "Il pacchetto hwinfo non è disponibile, ma è indicato da un altro pacchetto".
jww

hwinfo è disponibile in Debian: pacchetti.debian.org/sid/admin/hwinfo
David Lechner

il grepping per Clock su una CPU ARM926EJ-S risulta vuoto
David Lechner

Vuoto su un Raspberry Pi 3 B + che esegue anche Debian a 64 bit.
Jon Harrop,

-1

dmidecodeè un piccolo strumento utile che scarica ciò che è attualmente nella DMItabella in un formato che puoi leggere. Fare un dmidecode | grep "Current Speed"(come root o con sudo) stamperà la velocità della CPU che è attualmente riportata nel DMI.


Sarebbe fantastico, purtroppo ho un ambiente limitato, cioè nessun Python.
MiKy

@MiKy: se lo vedo correttamente, dmidecode è C, nativo.
Bobby,

4
DMI non è una cosa del BIOS, che non esiste su piattaforme ARM?
LawrenceC

3
La "D" sta per desktop , quindi è probabile che questo sistema incorporato non lo abbia.
Salterio il

1
Per Debian Jessie: "Il pacchetto dmidecode non è disponibile, ma è indicato da un altro pacchetto". Per quanto ne so, le schede ARM non usano un BIOS per PC.
jww
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.