Wie bekomme ich eine ARM-CPU-Taktrate unter Linux?

16

Ich habe eine ARM-basierte Embedded-Maschine, die auf der S3C2416-Karte basiert. Nach den Spezifikationen, die ich zur Verfügung habe, sollte es einen 533-MHz-ARM9 (ARM926EJ-S gemäß /proc/cpuinfo) geben, jedoch "fühlt" sich die darauf ausgeführte Software langsam an, verglichen mit der gleichen Software auf meinem Android-Handy mit einer 528-MHz-ARM-CPU.

/proc/cpuinfosagt mir, dass BogoMIPS 266.24 ist. Ich weiß, dass ich BogoMIPS in Bezug auf die Leistung ("Bogo" = Schwindel) nicht vertrauen sollte, möchte jedoch eine Messung der tatsächlichen CPU-Geschwindigkeit erhalten. Auf x86 konnte ich die rdtscAnweisung verwenden, um den Zeitstempelzähler abzurufen, eine Sekunde zu warten (sleep (1)), den Zähler erneut abzulesen, um eine Annäherung an die CPU-Geschwindigkeit zu erhalten, und meiner Erfahrung nach lag dieser Wert nahe genug bei die reale CPU-Geschwindigkeit.

Wie kann ich die tatsächliche CPU-Geschwindigkeit eines bestimmten ARM-Prozessors ermitteln?

Aktualisieren

Ich habe diesen einfachen Pi-Rechner gefunden , den ich sowohl für mein Android-Handy als auch für das ARM-Board kompiliert habe. Die Ergebnisse sind wie folgt:

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)

Das ARM926EJ-S scheint also langsamer zu sein als mein Android-Handy, aber nicht zweimal langsamer, als ich es von den BogoMIPS-Zahlen erwartet hätte. Ich bin mir immer noch nicht sicher, wie schnell die ARM9-CPU ist.

MiKy
quelle
elinux.org/S3C2416 sagt 400MHz ?
ta.speot.is
Ja, das ist das Original. Ich hätte ein neueres Modell mit 533-MHz-CPU haben sollen. Deshalb überprüfe ich, ob ich das habe, was ich haben sollte.
MiKy
1
266.24*2=532.48Es scheint also tot zu sein. Meine 480MHz ARM CPU erhält 239,2, 439.2*2=478.4.
David Schwartz
Neben der CPU-Geschwindigkeit können viele Faktoren die Geschwindigkeit von Anwendungen beeinflussen, z. B. die RAM-Geschwindigkeit, die RAM-Busbreite und die Speicher- / NAND-Geschwindigkeit.
LawrenceC
1
Ich kenne den S3C2416. Es ist in der Tat ein ARM9 / ARMv4-Design, kein "Cortex" ARMv6- oder v7-Design. Der ARM in Ihrem Android-Smartphone ist wahrscheinlich ein Cortex, z. B. Cortex A5-Design.
MSalters

Antworten:

4

AFAICT Die Uhr eines S3C2416 sieht genauso aus wie die eines S3C2443 oder ähnlicher Prozessoren seiner Familie. Der Linux-Quellcode deutet darauf hin, dass es eine Reihe eng miteinander verbundener Uhren gibt.

Auswahlschnipsel:

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

Update von OP

Ich habe nach dieser Ausgabe von gesucht dmesg, aber ich konnte nichts finden - die dmesgAusgabe war übersät mit Debug-Meldungen, und der Anfang fehlte. Offensichtlich war der Kernel-Nachrichtenpuffer zu kurz, um alle Nachrichten aufzunehmen, bis ich eine Verbindung über Telnet herstelle. Durch /bin/dmesg > /tmp/dmesg.logfrühzeitiges Einsetzen des Startvorgangs konnte ich diese Ausgabe erhalten und bestätigte, was ich wissen wollte:

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
quelle
9

Versuchen Sie es cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq.

Auf meinem Android heißt das 1113600, das ist also in kHz .

ThatGraemeGuy
quelle
Leider ls -l /sys/devices/system/cpu/cpu0/gibt mir null Ergebnisse. Anscheinend unterstützt das Board keine Frequenzskalierung (oder der Kernel ist zu alt).
MiKy
1
Ich glaube, es ist in KHz laut kernel.org/doc/Documentation/cpu-freq/user-guide.txt
Gabe
Ein Teil des Baums fehlt in Debian 3.16.7-ckt25-2. cpufreqfehlt unter /sys/devices/system/cpu/cpu0/(und anderen cpus). Es ist ein frühes ARMv8 / Aarch64-Mustang-Board, aber ich bin mir nicht sicher, ob es Teil des Problems ist. Ein ARMv8 / Aarch64 HiKey, auf dem 3.18.0-linaro-hikey ausgeführt wird, hat den Baum.
Jww
Gibt es nicht auf einem Raspberry Pi 3 B +, auf dem auch 64-Bit-Debian läuft. Benötigen Sie ein Paket, um es zu bekommen?
Jon Harrop
1

Wenn Sie unter Linux den hwinfoBefehl haben, müssen Sie (als root) Folgendes tun:
hwinfo --cpu | grep Clock

Tom
quelle
Dies ist ein SuSE-Tool und normalerweise nicht standardmäßig auf anderen Distributionen verfügbar.
Evi1M4chine
Für Debian Jessie: "Paket hwinfo ist nicht verfügbar, wird aber von einem anderen Paket referenziert."
Jww
hwinfo ist in Debian verfügbar: packages.debian.org/sid/admin/hwinfo
David Lechner
Das Greifen nach Clock auf einer ARM926EJ-S-CPU ist jedoch leer
David Lechner,
Leer auf einem Raspberry Pi 3 B +, auf dem auch 64-Bit-Debian läuft.
Jon Harrop
-1

dmidecodeist ein nützliches kleines Tool, das das, was sich aktuell in der DMITabelle befindet, in einem lesbaren Format ablegt. Wenn Sie dmidecode | grep "Current Speed"(als root oder mit sudo) eine ausführen, wird die CPU - Geschwindigkeit ausgegeben, die derzeit in der angezeigt wird DMI.

qweet
quelle
Das wäre toll, leider habe ich eine eingeschränkte Umgebung, also kein Python.
MiKy
@MiKy: Wenn ich das richtig sehe, ist dmidecode C, nativ.
Bobby
4
Ist DMI nicht ein BIOS-Ding, das es auf ARM-Plattformen nicht gibt?
LawrenceC
3
Das "D" steht für Desktop , sodass dieses eingebettete System möglicherweise nicht über dieses Symbol verfügt.
MSalters
1
Für Debian Jessie: "Paket dmidecode ist nicht verfügbar, wird aber von einem anderen Paket referenziert." Soweit ich weiß, verwenden ARM-Boards kein PC-BIOS.
Jww