web-dev-qa-db-fra.com

Comment obtenir un ARM CPU Clock Speed ​​à Linux?

J'ai une machine intégrée basée au bras basée sur la carte S3C2416. Selon les spécifications que j'ai disponibles, il devrait y avoir un ARM9 de 533 MHz (Arm926EJ-S selon /proc/cpuinfo), Mais le logiciel s'allume sur elle "Sent" lent, par rapport au même logiciel sur mon Android Téléphone avec un CPU de 528 MHz ARM.

/proc/cpuinfo Cela me dit que Bogomips est 266.24. Je sais que je ne devrais pas faire confiance à Bogommes en ce qui concerne la performance ("Bogo" = Bogus), mais je voudrais obtenir une mesure sur la vitesse de la CPU réelle. Sur x86, je pourrais utiliser l'instruction rdtsc pour obtenir le compteur horaire, attendre une seconde (sommeil (1)), lisez à nouveau le comptoir pour obtenir une approximation de la vitesse de la CPU et, selon mon expérience, Cette valeur était suffisamment proche de la vitesse de la CPU réelle.

Comment puis-je trouver la vitesse du processeur réelle du processeur ARM?

Mise à jour

J'ai trouvé cette simple calculatrice PI , que j'ai compilée à la fois pour mon téléphone Android téléphone et le tableau ARM. Les résultats sont les suivants:

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)

Android

# 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)

Il semble donc que l'Arm926ej-S soit plus lent que mon téléphone Android téléphone, mais pas deux fois plus lent, comme je m'attendrais par les Chiffres Bogompips. Je ne suis toujours pas sûr de la vitesse d'horloge de la CPU Arm9.

16
MiKy

Afaict L'horloge d'un S3C2416 ressemble à celle d'un S3C2443 ou de processeurs similaires de sa famille. Le code source Linux pour celui-ci suggère qu'il existe un certain nombre d'horloges étroitement liées.

Choix Snippet:

    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));

Mise à jour de OP

Je cherchais cette sortie de dmesg, mais je n'ai pu rien trouver - la sortie dmesg a été jonchée de messages de débogage et le début manquait. Clairement, le tampon de message du noyau était trop court pour contenir tous les messages jusqu'à ce que je connecte par telnet. En mettant /bin/dmesg > /tmp/dmesg.log Tôt dans le processus de démarrage, j'ai pu obtenir cette production, confirmant ce que je voulais savoir:

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
4
MSalters

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

Sur mon Android Ceci lit 1113600, donc ceci est en khz .

9
ThatGraemeGuy