Mam wbudowaną maszynę opartą na ARM opartą na płycie S3C2416. Zgodnie ze specyfikacjami, które mam dostępne, powinien być ARM9 533 MHz (zgodnie z ARM926EJ-S /proc/cpuinfo
), jednak oprogramowanie działające na nim „czuje się” powolne, w porównaniu z tym samym oprogramowaniem na moim telefonie z Androidem z procesorem ARM 528 MHz.
/proc/cpuinfo
mówi mi, że BogoMIPS to 266,24. Wiem, że nie powinienem ufać BogoMIPS pod względem wydajności („Bogo” = fałszywy), jednak chciałbym uzyskać pomiar rzeczywistej szybkości procesora. Na x86 mogłem użyć rdtsc
instrukcji, aby uzyskać licznik znaczników czasu, odczekać sekundę (tryb uśpienia (1)), ponownie odczytać licznik, aby uzyskać przybliżenie szybkości procesora, i zgodnie z moim doświadczeniem ta wartość była wystarczająco bliska, aby rzeczywista prędkość procesora.
Jak znaleźć rzeczywistą szybkość procesora danego procesora ARM?
Aktualizacja
Znalazłem ten prosty kalkulator Pi , który skompilowałem zarówno dla mojego telefonu z Androidem, jak i płyty ARM. Wyniki są następujące:
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)
Wygląda więc na to, że ARM926EJ-S jest wolniejszy niż mój telefon z Androidem, ale nie dwa razy wolniejszy, niż bym się spodziewał po danych BogoMIPS. Nadal nie jestem pewien szybkości zegara procesora ARM9.
266.24*2=532.48
Wygląda na to, że jest martwy. Mój procesor ARM 480 MHz otrzymuje 239,2439.2*2=478.4
.Odpowiedzi:
AFAICT zegar S3C2416 wygląda tak samo jak zegar S3C2443 lub podobnych procesorów z jego rodziny. Kod źródłowy Linux na to wskazuje, że istnieje szereg ściśle powiązanych zegarów.
Fragment wyboru:
Aktualizacja z OP
Szukałem tego wyniku
dmesg
, ale nic nie znalazłem -dmesg
wynik był zaśmiecony komunikatami debugowania i brakowało początku. Najwyraźniej bufor komunikatów jądra był zbyt krótki, aby pomieścić wszystkie wiadomości, dopóki nie połączę się przez telnet. Umieszczając na/bin/dmesg > /tmp/dmesg.log
wczesnym etapie procesu uruchamiania, byłem w stanie uzyskać te dane wyjściowe, potwierdzając to, co chciałem wiedzieć:źródło
Spróbować
cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq
.Na moim Androidzie jest to 1113600, więc jest to w kHz .
źródło
ls -l /sys/devices/system/cpu/cpu0/
daje mi zero wyników. Wygląda na to, że płyta nie obsługuje skalowania częstotliwości (lub jądro jest za stare).cpufreq
brakuje pod/sys/devices/system/cpu/cpu0/
(i innymi procesorami). Jest to wczesna płyta ARMv8 / Aarch64 Mustang, ale nie jestem pewien, czy jest to część problemu. ARMv8 / Aarch64 HiKey z systemem 3.18.0-linaro-hikey ma drzewo.W systemie Linux, jeśli masz
hwinfo
polecenie, to (jako root) problem:hwinfo --cpu | grep Clock
źródło
dmidecode
jest przydatnym małym narzędziem, które zrzuca to, co jest aktualnie wDMI
tabeli, do formatu, który można odczytać. Wykonaniedmidecode | grep "Current Speed"
(jako root lub sudo) wydrukuje prędkość procesora, która jest aktualnie raportowana wDMI
.źródło