Linux(Ubuntu)のプログラムでCPU(ARM)周波数を変更したい。
CでCPU周波数のスケーリングとコアAPIの無効化はありますか?
もしあれば、APIはマルチコアCPUで各コアを処理できますか?
Linux で周波数を制御するには、いくつかの方法があります。IA32_PERF_CTL レジスターを使用して、サポートされている Intel プロセッサーの電源状態を設定できます。ただし、Intel CPU だけでなく、sysfs ファイル システムを介してエクスポートされた cpufreq インターフェイスを使用することもできます。
/sys/devices/system/cpu/cpuX/* で変更できるパラメーターを確認できます。いくつかのヒントを次に示します。
周波数スケーリングをオフにするには、プロセッサをさまざまな状態にする戦略を処理するガバナーを使用します。たとえば、完全なパフォーマンスを得るには、次のようにします。
echo performance > /sys/devices/system/cpu/cpuX/cpufreq/scaling_governor
複数のガバナーがあり、ここで確認できます。
cat /sys/devices/system/cpu/cpuX/cpufreq/scaling_available_governors
ファイル システム インターフェイスを介してこれにアクセスするのは面倒です。cpufreqs メンバーにアクセスするために libudev を使用できます。チュートリアルについては、 udev のドキュメントとこちらを参照してください。
各コアを個別に処理することに関する 1 つの制限。これは、CPU のサポートに依存します。ハードウェアの単純な制限として、2 つ以上のコアを同じ周波数で実行する必要がある場合があります。回答については、この投稿を参照してください。
/sys
おそらくファイルシステムとファイルシステムを使用し、/proc/
それらの下にあるファイルに書き込む必要があります。/sys/devices/system/cpu/
cpufreq-setが動的周波数スケーリングについて何をしているかを調べます。
system(3)
ところで、コマンドでフォークできますcpufreq-set
。
(これらの側面に関するARMプロセッサの特性はわかりません)