14

У меня есть встроенная машина на базе 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 ответа4

8

Попробуйте cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq .

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

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
1

В Linux, если у вас есть команда hwinfo , тогда (как root) проблема:
hwinfo --cpu | grep Clock

-1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .