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

MiK*_*iKy 18 linux arm cpu-speed

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

/proc/cpuinfo告诉我 BogoMIPS 是 266.24。我知道我不应该相信 BogoMIPS 的性能(“Bogo”= bogus),但是我想测量实际 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)
Run Code Online (Sandbox Code Playgroud)

安卓

# 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)
Run Code Online (Sandbox Code Playgroud)

所以看起来 ARM926EJ-S 比我的 Android 手机慢,但没有我预期的 BogoMIPS 数据慢两倍。我仍然不确定 ARM9 CPU 的时钟速度。

Tha*_*Guy 11

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

在我的 android 上,它读取 1113600,所以这是 kHz


MSa*_*ers 6

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));
Run Code Online (Sandbox Code Playgroud)

从 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
Run Code Online (Sandbox Code Playgroud)