如何在Linux中获得ARM CPU时钟速度?


16

我有一台基于S3C2416板的基于ARM的嵌入式计算机。根据我现有的规格,应该有一个533 MHz的ARM9(根据的ARM926EJ-S /proc/cpuinfo),但是,与运行528MHz ARM CPU的Android手机上的相同软件相比,在其上运行的软件“感觉”较慢。

/proc/cpuinfo告诉我BogoMIPS是266.24。我知道我不应该在性能方面相信BogoMIPS(“ Bogo” =虚假的),但是我想对实际CPU速度进行评估。在x86上,我可以使用rdtsc指令获取时间戳计数器,等待一秒钟(sleep(1)),再次读取该计数器以获得CPU速度的近似值,根据我的经验,该值足够接近实际的CPU速度。

如何找到给定ARM处理器的实际CPU速度?

更新资料

我找到了这个简单的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)

安卓系统

# 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 CPU的时钟速度。



是的,那是原始版本,我应该有一个拥有533MHz CPU的较新型号,这就是为什么我要检查我是否应拥有的
型号

1
266.24*2=532.48因此,似乎已经死了。我的ARM为480MHz CPU得到239.2, 439.2*2=478.4
David Schwartz 2012年

除了CPU速度外,还有许多其他因素会影响应用程序的速度,例如RAM速度,RAM总线宽度和存储/ NAND速度。
LawrenceC

1
我对S3C2416很熟悉。这确实是一个ARM9 / ARMv4设计,而不是“ Cortex” ARMv6或v7设计。您的Android智能手机中的ARM可能是Cortex,例如Cortex A5设计。
MSalters 2012年

Answers:


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

从OP更新

我一直在寻找来自的输出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

9

尝试 cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq

在我的Android上,其读数为1113600,因此以kHz为单位


不幸的ls -l /sys/devices/system/cpu/cpu0/是给我零结果。主板似乎不支持频率缩放(或内核太旧)。
MiKy 2012年


Debian 3.16.7-ckt25-2中缺少部分树。(以及其他CPU)cpufreq下缺少/sys/devices/system/cpu/cpu0/。它是早期的ARMv8 / Aarch64野马板,但是我不确定这是否是问题的一部分。该树具有运行3.18.0-linaro-hikey的ARMv8 / Aarch64 HiKey。
jww

运行64位Debian的Raspberry Pi 3 B +也不存在。您需要包装吗?
乔恩·哈罗普

1

对于Linux,如果您有hwinfo命令,则(以root用户)发出:
hwinfo --cpu | grep Clock


这是一个SuSE工具,通常默认情况下在其他发行版中不可用。
Evi1M4chine 2015年

对于Debian Jessie:“软件包hwinfo不可用,但由另一个软件包引用。”
jww


grepping ARM926EJ-S CPU上的Clock却变空了
David Lechner

在运行64位Debian的Raspberry Pi 3 B +上也为空。
乔恩·哈罗普

-1

dmidecode是一个有用的小工具,它将DMI表中当前的内容转储为您可以阅读的格式。dmidecode | grep "Current Speed"(以root或sudo身份执行)将打印出当前在中报告的CPU速度DMI


那就太好了,不幸的是我的环境有限,即没有Python。
MiKy 2012年

@MiKy:如果我看得正确,则dmidecode是C,本机。
鲍比

4
DMI是否不是BIOS的东西,而ARM平台上不存在?
LawrenceC

3
“ D”代表台式机,因此该嵌入式系统很可能没有它。
MSalters 2012年

1
对于Debian Jessie:“软件包dmidecode不可用,但由另一个软件包引用。” 据我所知,ARM板不使用PC BIOS。
jww
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.