web-dev-qa-db-ja.com

LinuxでARM CPUクロック速度を取得する方法は?

S3C2416ボードをベースにしたARMベースの組み込みマシンを持っています。私が入手した仕様によると、533 MHzのARM9(/proc/cpuinfoに準拠したARM926EJ-S)があるはずですが、その上で実行されるソフトウェアは、私のAndroid上の同じソフトウェアと比較して「遅い」と感じます528 MHz ARM CPUを搭載した電話。

/proc/cpuinfoは、BogoMIPSが266.24であることを教えてくれます。パフォーマンス( "Bogo" = bogus)に関してBogoMIPSを信頼すべきではないことはわかっていますが、実際のCPU速度を測定したいと思います。 x86では、rdtsc命令を使用してタイムスタンプカウンターを取得し、1秒待って(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)

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の数値から予想される2倍の速度ではありません。 ARM9 CPUのクロック速度はまだわかりません。

16
MiKy

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
4
MSalters

cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freqをお試しください。

私のAndroidこれは1113600を読み取りますので、これは kHzです です。

9
ThatGraemeGuy

Linuxでは、hwinfoコマンドがある場合、(rootとして)問題が発生します。
hwinfo --cpu | grep Clock

1
Tom