Как получить тактовую частоту процессора ARM в Linux?

У меня есть встроенная машина на базе ARM на плате S3C2416. Согласно имеющимся у меня спецификациям, должен быть ARM9 533 МГц (ARM926EJ-S в соответствии с /proc/cpuinfo), однако программное обеспечение, работающее на нем, "чувствует" медленно, по сравнению с тем же программным обеспечением на моем телефоне Android с процессором ARM 528 МГц.

/proc/cpuinfo говорит мне, что BogoMIPS 266,24. Я знаю, что я не должен доверять BogoMIPS в отношении производительности ("Bogo" = поддельный), однако я хотел бы измерить фактическую скорость процессора. На x86 я мог бы использовать rdtsc инструкция, чтобы получить счетчик меток времени, подождите секунду (sleep(1)), снова прочитайте счетчик, чтобы получить приблизительную оценку скорости процессора, и, по моему опыту, это значение было достаточно близко к реальной скорости процессора.

Как я могу найти фактическую скорость процессора данного процессора ARM?

Обновить

Я нашел этот простой калькулятор Pi, который я скомпилировал как для своего телефона Android, так и для платы ARM. Результаты приведены ниже:

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)

Таким образом, кажется, что ARM926EJ-S медленнее, чем мой телефон на Android, но не в два раза медленнее, чем я ожидал по показателям BogoMIPS. Я все еще не уверен насчет тактовой частоты процессора ARM9.

4 ответа

Решение

AFAICT часы S3C2416 выглядят так же, как часы S3C2443 или аналогичных процессоров его семейства. Исходный код Linux для этого предполагает, что есть ряд тесно связанных часов.

Выбор фрагмента:

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

Обновление от ОП

Я искал этот вывод из dmesg, но я не смог ничего найти - dmesg вывод был завален сообщениями отладки, и начало отсутствовало. Ясно, что буфер сообщений ядра был слишком коротким, чтобы хранить все сообщения, пока я не подключусь по telnet. Положив /bin/dmesg > /tmp/dmesg.log в начале процесса запуска я смог получить этот вывод, подтверждающий то, что я хотел знать:

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

Пытаться cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq,

На моем андроиде это читает 1113600, так что это в кГц.

С Linux, если у вас есть hwinfo команда, затем (как root) выдайте:
hwinfo --cpu | grep Clock

dmidecode это полезный маленький инструмент, который сбрасывает то, что в настоящее время в DMI таблица в формате, который вы можете прочитать. Делать dmidecode | grep "Current Speed" (как root или с помощью sudo) распечатает скорость процессора, о которой в данный момент сообщается в DMI,

Другие вопросы по тегам