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

14

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

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

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

Обновить

я нашел этот простой пи калькулятор , который я скомпилировал как для своего телефона 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.

MiKy
источник
elinux.org/S3C2416 говорит 400МГц?
ta.speot.is
Да, это оригинал, я должен был получить более новую модель с процессором 533 МГц, поэтому я проверяю, получил ли я то, что должен был иметь ...
MiKy
1
266.24*2=532.48 Так что кажется, что он мертв. Мой процессор ARM 480MHz получает 239,2, 439.2*2=478.4,
David Schwartz
Помимо скорости процессора, на скорость приложений может влиять множество факторов, например, скорость ОЗУ, ширина шины ОЗУ и скорость хранения / NAND.
LawrenceC
1
Я знаком с S3C2416. Это действительно дизайн ARM9 / ARMv4, а не дизайн Cortex ARMv6 или v7. ARM в вашем Android-смартфоне, вероятно, является Cortex, например Cortex A5 дизайн.
MSalters

Ответы:

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
MSalters
источник
7

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

На моем Android это читает 1113600, так что это в кГц ,

ThatGraemeGuy
источник
к несчастью ls -l /sys/devices/system/cpu/cpu0/ дает мне ноль результатов. Похоже, плата не поддерживает масштабирование частоты (или ядро ​​слишком старое).
MiKy
1
Я считаю, что это в кГц в соответствии с kernel.org/doc/Documentation/cpu-freq/user-guide.txt
Gabe
Часть дерева отсутствует в Debian 3.16.7-ckt25-2. cpufreq отсутствует под /sys/devices/system/cpu/cpu0/ (и другие процессоры). Это ранняя плата ARMv8 / Aarch64 Mustang, но я не уверен, является ли она частью проблемы. У дерева ARMv8 / Aarch64 HiKey под управлением 3.18.0-linaro-hikey есть дерево.
jww
1

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

Tom
источник
Это инструмент SuSE и обычно не доступен по умолчанию в других дистрибутивах
Evi1M4chine
Для Debian Джесси: «Пакет hwinfo недоступен, но на него ссылается другой пакет».
jww
hwinfo доступен в Debian: packages.debian.org/sid/admin/hwinfo
David Lechner
Похоже, что часы на процессоре ARM926EJ-S пустуют
David Lechner
-1

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

qweet
источник
Это было бы здорово, к сожалению, у меня ограниченная среда, то есть нет Python.
MiKy
@MiKy: Если я правильно понимаю, dmidecode - C, нативный.
Bobby
О, да, я смотрел на репозиторий Debian dmidecode armel, и он указывал Python в качестве зависимости. Я постараюсь скомпилировать его и посмотреть, как оно пойдет.
MiKy
4
Разве DMI - это не BIOS, которого нет на платформах ARM?
LawrenceC
3
"D" обозначает рабочий стол , так что есть вероятность, что это встроенный система не будет иметь его.
MSalters