Comment obtenir une vitesse d'horloge CPU ARM sous Linux?

16

J'ai une machine embarquée ARM basée sur la carte S3C2416. Selon les spécifications dont je dispose, il devrait y avoir un ARM9 à 533 MHz (ARM926EJ-S selon /proc/cpuinfo), mais le logiciel qui y fonctionne "semble" lent, par rapport au même logiciel sur mon téléphone Android avec un processeur ARM à 528 MHz.

/proc/cpuinfome dit que BogoMIPS est 266.24. Je sais que je ne dois pas faire confiance à BogoMIPS en ce qui concerne les performances ("Bogo" = faux), mais je voudrais obtenir une mesure sur la vitesse réelle du processeur. Sur x86, je pouvais utiliser l' rdtscinstruction pour obtenir le compteur d'horodatage, attendre une seconde (veille (1)), relire le compteur pour obtenir une approximation de la vitesse du processeur, et selon mon expérience, cette valeur était assez proche de la vitesse réelle du processeur.

Comment puis-je trouver la vitesse réelle du processeur d'un processeur ARM donné?

Mise à jour

J'ai trouvé cette simple calculatrice Pi , que j'ai compilée à la fois pour mon téléphone Android et la carte 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, mais pas deux fois plus lentement que je ne m'y attendrais d'après les chiffres de BogoMIPS. Je ne suis toujours pas sûr de la vitesse d'horloge du processeur ARM9.

MiKy
la source
elinux.org/S3C2416 dit 400MHz ?
ta.speot.is
Oui, c'est l'original, j'aurais dû avoir un modèle plus récent avec un processeur 533 MHz, c'est pourquoi je vérifie si j'ai ce que je devrais avoir ...
MiKy
1
266.24*2=532.48Il semble donc que ce soit mort. CPU ARM Mon 480MHz obtient 239,2, 439.2*2=478.4.
David Schwartz
Outre la vitesse du processeur, de nombreuses choses peuvent affecter la vitesse des applications, telles que la vitesse de la RAM, la largeur du bus RAM et la vitesse de stockage / NAND.
LawrenceC
1
Je connais le S3C2416. C'est en effet un design ARM9 / ARMv4, pas un design "Cortex" ARMv6 ou v7. L'ARM de votre smartphone Android est probablement un Cortex, par exemple un Cortex A5.
MSalters

Réponses:

4

AFAICT l'horloge d'un S3C2416 ressemble à celle d'un S3C2443, ou des processeurs similaires de sa famille. Le code source Linux pour cela suggère qu'il existe un certain nombre d'horloges étroitement liées.

Extrait de choix:

    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 depuis OP

Je cherchais cette sortie dmesg, mais je n'ai rien trouvé - la dmesgsortie était jonchée de messages de débogage et le début manquait. Clairement, le tampon de messages du noyau était trop court pour contenir tous les messages jusqu'à ce que je me connecte par telnet. En mettant /bin/dmesg > /tmp/dmesg.logtôt dans le processus de démarrage, j'ai pu obtenir cette sortie, 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
MSalters
la source
9

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

Sur mon Android, cela indique 1113600, c'est donc en kHz .

ThatGraemeGuy
la source
Malheureusement, cela ls -l /sys/devices/system/cpu/cpu0/ne me donne aucun résultat. Il semble que la carte ne supporte pas la mise à l'échelle des fréquences (ou que le noyau est trop ancien).
MiKy
1
Je crois que c'est en KHz selon kernel.org/doc/Documentation/cpu-freq/user-guide.txt
Gabe
Une partie de l'arborescence manque dans Debian 3.16.7-ckt25-2. cpufreqest manquant sous /sys/devices/system/cpu/cpu0/(et d'autres processeurs). C'est une ancienne carte Mustang ARMv8 / Aarch64, mais je ne sais pas si cela fait partie du problème. Un ARMv8 / Aarch64 HiKey exécutant 3.18.0-linaro-hikey a l'arborescence.
Jww
N'existe pas sur un Raspberry Pi 3 B + exécutant Debian 64 bits également. Avez-vous besoin d'un colis pour l'obtenir?
Jon Harrop
1

Avec Linux, si vous avez la hwinfocommande, alors (en tant que root) , lancez :
hwinfo --cpu | grep Clock

À M
la source
Il s'agit d'un outil SuSE et généralement pas disponible par défaut sur d'autres distributions.
Evi1M4chine
Pour Debian Jessie: "Le paquet hwinfo n'est pas disponible, mais est référencé par un autre paquet."
jww
hwinfo est disponible dans Debian: packages.debian.org/sid/admin/hwinfo
David Lechner
la recherche d'horloge sur un processeur ARM926EJ-S est cependant vide
David Lechner
Vide sur un Raspberry Pi 3 B + exécutant Debian 64 bits également.
Jon Harrop
-1

dmidecodeest un petit outil utile qui sauvegarde ce qui se trouve actuellement dans le DMItableau dans un format que vous pouvez lire. Faire un dmidecode | grep "Current Speed"(en tant que root ou avec sudo) imprimera la vitesse du processeur actuellement signalée dans le DMI.

qweet
la source
Ce serait génial, malheureusement j'ai un environnement limité, c'est-à-dire pas de Python.
MiKy
@MiKy: Si je vois cela correctement, dmidecode est C, natif.
Bobby
4
Le DMI n'est-il pas un BIOS, qui n'existe pas sur les plateformes ARM?
LawrenceC
3
Le «D» signifie bureau , donc il est probable que ce système intégré ne l'aura pas.
MSalters
1
Pour Debian Jessie: "Le paquet dmidecode n'est pas disponible, mais est référencé par un autre paquet." Pour autant que je sache, les cartes ARM n'utilisent pas de BIOS PC.
jww