Bagaimana cara mendapatkan kecepatan clock CPU ARM di Linux?

16

Saya memiliki mesin embedded berbasis ARM berbasis pada papan S3C2416. Menurut spesifikasi yang saya miliki harus ada ARM9 533 MHz (menurut ARM926EJ-S /proc/cpuinfo), namun perangkat lunak yang berjalan di atasnya "terasa" lambat, dibandingkan dengan perangkat lunak yang sama pada ponsel Android saya dengan CPU ARM 528MHz.

/proc/cpuinfomemberitahu saya bahwa BogoMIPS adalah 266,24. Saya tahu bahwa saya tidak boleh mempercayai BogoMIPS mengenai kinerja ("Bogo" = palsu), namun saya ingin mendapatkan pengukuran pada kecepatan CPU yang sebenarnya. Pada x86, saya bisa menggunakan rdtscinstruksi untuk mendapatkan penghitung cap waktu, tunggu sebentar (tidur (1)), baca lagi penghitung untuk mendapatkan perkiraan kecepatan CPU, dan menurut pengalaman saya, nilai ini cukup dekat untuk kecepatan CPU nyata.

Bagaimana saya bisa menemukan kecepatan CPU aktual dari prosesor ARM yang diberikan?

Memperbarui

Saya menemukan kalkulator Pi sederhana ini , yang saya susun untuk ponsel Android saya dan papan ARM. Hasilnya adalah sebagai berikut:

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)

Jadi sepertinya ARM926EJ-S lebih lambat dari ponsel Android saya, tetapi tidak dua kali lebih lambat seperti yang saya harapkan dari angka BogoMIPS. Saya masih tidak yakin tentang kecepatan clock CPU ARM9.

MiKy
sumber
elinux.org/S3C2416 mengatakan 400MHz?
ta.speot.is
Ya, itu asli, saya harus mendapatkan model yang lebih baru dengan CPU 533MHz, itu sebabnya saya memeriksa apakah saya mendapatkan apa yang seharusnya saya miliki ...
MiKy
1
266.24*2=532.48Jadi sepertinya sudah mati. CPU ARM 480MHz saya mendapat 239.2 439.2*2=478.4,.
David Schwartz
Ada banyak hal yang dapat mempengaruhi kecepatan aplikasi selain kecepatan CPU, seperti kecepatan RAM, lebar bus RAM, dan kecepatan penyimpanan / NAND.
LawrenceC
1
Saya kenal dengan S3C2416. Ini memang desain ARM9 / ARMv4, bukan desain "Cortex" ARMv6 atau v7. ARM di ponsel pintar Android Anda mungkin adalah Cortex, misalnya desain Cortex A5.
MSalters

Jawaban:

4

AFAICT jam S3C2416 terlihat seperti S3C2443, atau prosesor serupa dari keluarganya. The Linux source code untuk itu menunjukkan bahwa ada sejumlah jam erat terkait.

Cuplikan pilihan:

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

Perbarui dari OP

Saya telah mencari keluaran ini dari dmesg, tetapi saya tidak dapat menemukan apa pun - dmesgkeluarannya dipenuhi dengan pesan debug, dan awalnya tidak ada. Jelas buffer pesan kernel terlalu pendek untuk menampung semua pesan sampai saya terhubung dengan telnet. Dengan menempatkan /bin/dmesg > /tmp/dmesg.loglebih awal dalam proses startup, saya bisa mendapatkan output ini, mengkonfirmasikan apa yang ingin saya ketahui:

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

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

Di android saya ini berbunyi 1113600, jadi ini dalam kHz .

ThatGraemeGuy
sumber
Sayangnya ls -l /sys/devices/system/cpu/cpu0/memberi saya hasil nol. Sepertinya board tidak mendukung penskalaan frekuensi (atau kernel terlalu tua).
MiKy
1
Saya percaya ini dalam KHz menurut kernel.org/doc/Documentation/cpu-freq/user-guide.txt
Gabe
Bagian dari pohon hilang dari Debian 3.16.7-ckt25-2. cpufreqhilang di bawah /sys/devices/system/cpu/cpu0/(dan cpu lainnya). Ini adalah papan Mustang ARMv8 / Aarch64 awal, tapi saya tidak yakin apakah itu bagian dari masalahnya. Sebuah HiKey ARMv8 / Aarch64 menjalankan 3.18.0-linaro-hikey memiliki pohon.
jww
Tidak ada pada Raspberry Pi 3 B + yang menjalankan Debian 64-bit juga. Apakah Anda memerlukan paket untuk mendapatkannya?
Jon Harrop
1

Dengan Linux, jika Anda memiliki hwinfoperintah, maka masalah (sebagai root):
hwinfo --cpu | grep Clock

Tom
sumber
Ini adalah alat SuSE dan biasanya tidak tersedia secara default di distribusi lain.
Evi1M4chine
Untuk Debian Jessie: "Paket hwinfo tidak tersedia, tetapi disebut oleh paket lain."
jww
hwinfo tersedia di Debian: packages.debian.org/sid/admin/hwinfo
David Lechner
mencoba Clock dengan ARM926EJ-S CPU kosong
David Lechner
Kosongkan pada Raspberry Pi 3 B + yang menjalankan Debian 64-bit juga.
Jon Harrop
-1

dmidecodeadalah alat kecil yang berguna yang membuang apa yang ada di DMItabel ke dalam format yang dapat Anda baca. Melakukan dmidecode | grep "Current Speed"(sebagai root atau dengan sudo) akan mencetak kecepatan CPU yang saat ini sedang dilaporkan di Internet DMI.

qweet
sumber
Itu akan bagus, sayangnya saya memiliki lingkungan terbatas, yaitu tidak ada Python.
MiKy
@ MiKy: Jika saya melihat ini dengan benar, dmidecode adalah C, asli.
Bobby
4
Bukankah DMI itu BIOS, yang tidak ada pada platform ARM?
LawrenceC
3
"D" adalah kependekan dari desktop , jadi kemungkinan besar sistem embedded ini tidak akan memilikinya.
MSalters
1
Untuk Debian Jessie: "Paket dmidecode tidak tersedia, tetapi disebut oleh paket lain." Sejauh yang saya tahu, papan ARM tidak menggunakan PC BIOS.
jww