Jak uzyskać szybkość zegara procesora ARM w systemie Linux?

16

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/cpuinfomó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ć rdtscinstrukcji, 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.

MiKy
źródło
elinux.org/S3C2416 mówi 400MHz?
ta.speot.is
Tak, to jest oryginał, powinienem mieć nowszy model z procesorem
533 MHz
1
266.24*2=532.48Wygląda na to, że jest martwy. Mój procesor ARM 480 MHz otrzymuje 239,2 439.2*2=478.4.
David Schwartz
Istnieje wiele czynników, które mogą wpływać na szybkość aplikacji oprócz prędkości procesora, takich jak prędkość pamięci RAM, szerokość magistrali RAM i prędkość przechowywania / NAND.
LawrenceC
1
Znam S3C2416. To rzeczywiście projekt ARM9 / ARMv4, a nie projekt „Cortex” ARMv6 lub v7. ARM w twoim smartfonie z Androidem to prawdopodobnie Cortex, np. Projekt Cortex A5.
MSalters

Odpowiedzi:

4

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:

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

Aktualizacja z OP

Szukałem tego wyniku dmesg, ale nic nie znalazłem - dmesgwynik 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.logwczesnym etapie procesu uruchamiania, byłem w stanie uzyskać te dane wyjściowe, potwierdzając to, co chciałem wiedzieć:

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
źródło
9

Spróbować cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq.

Na moim Androidzie jest to 1113600, więc jest to w kHz .

ThatGraemeGuy
źródło
Niestety 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).
MiKy
1
Wierzę, że jest w KHz według kernel.org/doc/Documentation/cpu-freq/user-guide.txt
Gabe,
Brakuje części drzewa w Debianie 3.16.7-ckt25-2. cpufreqbrakuje 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.
jww
Nie istnieje również na Raspberry Pi 3 B + z 64-bitowym systemem Debian. Czy potrzebujesz pakietu, aby go zdobyć?
Jon Harrop,
1

W systemie Linux, jeśli masz hwinfopolecenie, to (jako root) problem:
hwinfo --cpu | grep Clock

Tomek
źródło
Jest to narzędzie SuSE i zwykle nie jest domyślnie dostępne w innych dystrybucjach.
Evi1M4chine,
W przypadku Debian Jessie: „Pakiet hwinfo nie jest dostępny, ale odnosi się do niego inny pakiet”.
jww
hwinfo jest dostępne w Debianie: packages.debian.org/sid/admin/hwinfo
David Lechner
grepping dla zegara na procesorze ARM926EJ-S jest jednak pusty
David Lechner
Pusty na Raspberry Pi 3 B + z 64-bitowym systemem Debian.
Jon Harrop
-1

dmidecodejest przydatnym małym narzędziem, które zrzuca to, co jest aktualnie w DMItabeli, do formatu, który można odczytać. Wykonanie dmidecode | grep "Current Speed"(jako root lub sudo) wydrukuje prędkość procesora, która jest aktualnie raportowana w DMI.

qweet
źródło
Byłoby wspaniale, niestety mam ograniczone środowisko, tj. Brak Pythona.
MiKy
@ MiKy: Jeśli dobrze to widzę, kod dmidecode to C, natywny.
Bobby
4
Czy DMI nie jest systemem BIOS, który nie istnieje na platformach ARM?
LawrenceC
3
„D” oznacza komputer stacjonarny , więc są szanse, że ten system osadzony go nie będzie.
MSalters
1
W przypadku Debian Jessie: „Pakiet dmidecode nie jest dostępny, ale odwołuje się do niego inny pakiet”. O ile mi wiadomo, płyty ARM nie używają BIOS-u komputera.
jww