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

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

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

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

答案1

据我所知,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

答案2

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

在我的安卓上,这个读数是1113600,所以这个单位为 kHz

答案3

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

答案4

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

相关内容