低いCPU速度でプログラムを実行しますか?

低いCPU速度でプログラムを実行しますか?

runat 400mhz ./my-program --argument-of="my program"固定(低)CPUクロック速度(たとえば、そのクロック速度を取得するため)を使用してLinux環境で特定のプログラムを実行することは、私にとって非常に便利です。

遅延が正確でない場合(たとえば、OSのスケジューラによってほぼ確実に異なる場合など)を殺さないように、プログラム内の各アセンブリコマンド間に遅延を生成する必要があります。

目標は、学校であまり重くないアプリケーションを書くときのアルゴリズム効率を非常に明確にすることです(3GHz CPUを使用すると、実際に最適化できる短い実行時間を持つ遅いアルゴリズムに気付くことが困難です)。また、リアルタイムで競争状況を把握するのに役立ちます。

そのようなツールがあることをご存知ですか?これを達成するためにハッキングできる通訳者の種類はありますか? gdbは比較的簡単な方法で助けることができますか?私はこれがLinuxプログラムの実行を制御するのに最も近いものだと思います。

CPUが制限されたVMで脆弱なシステムを実行することは、CPUが遅いように見えるため、別のオプションかもしれませんが、とにかく単一のプログラムを実行する方が良いでしょう。

答え1

あなたが探しているアプリケーションは次のとおりです。cpulimit。これは通常システムに含まれるコマンドではないため、ディストリビューションのパッケージマネージャ(Ubuntu / Debian)またはソースからインストールする必要があります。

Ubuntu/Debian

$ apt-cache search cpulimit
cpulimit - tool for limiting the CPU usage of a process

したがって、インストールは次のようになります。

$ sudo apt-get install cpulimit

ソースから

次のようにダウンロードしてください。

$ wget https://github.com/opsengine/cpulimit/archive/master.zip \
       -O cpulimit-master.zip

解凍してビルドします。

$ unzip cpulimit-master.zip ; cd cpulimit-master ; make

使用法

を使用してインストールできますが、make install今はビルドされたディレクトリで使用されます。

$ pwd
/home/saml/tst/96387/cpulimit-master
$ src/cpulimit -e firefox -l 30

これは、呼び出しプロセスをfirefox使用可能なCPU使用率の30%に制限します。

呼び出し後に実行中のプロセスにも適用できます。

$ pgrep firefox
1234

$ src/cpulimit -p 1234 -l 30

残りの使い方を見ることができますcpulimit

$ src/cpulimit 
Error: You must specify a cpu limit percentage
Usage: cpulimit [OPTIONS...] TARGET
   OPTIONS
      -l, --limit=N          percentage of cpu allowed from 0 to 400 (required)
      -v, --verbose          show control statistics
      -z, --lazy             exit if there is no target process, or if it dies
      -i, --ignore-children  don't limit children processes
      -h, --help             display this help and exit
   TARGET must be exactly one of these:
      -p, --pid=N            pid of the process (implies -z)
      -e, --exe=FILE         name of the executable program file or path name
      COMMAND [ARGS]         run this command and limit it (implies -z)

Report bugs to <[email protected]>.

Cyber​​citi.bizには、次の使用法に関する良いチュートリアルもあります。LinuxはプロセスごとのCPU使用量を制限します。

メモ:CPU使用率はパーセンテージに制限されるため、クアッドコアケース(4 CPU)がある場合は0%から400%の間に制限する必要があります。

答え2

プロセッサのクロックを設定できますが、特定のプログラムには設定できませんが、グローバルに設定できます。それはプロセッサが動作する方法ではありません。電力制限された環境(特にラップトップや他のモバイルデバイス)用のプロセッサは、さまざまな速度をサポートする傾向があります。

原則として、プロセスが予約されている場合(サポートされている場合)、プロセッサ速度を変更し、他のプロセスが予約されている場合はプロセッサ速度をリセットするように調整できます。私はこれをサポートするどのソフトウェアも知らず、おそらくカーネルにかなりの修正が必要になるでしょう。

Qemu(KVMがないため、純粋なソフトウェアエミュレーションを得ることができます)やBochsなどの遅い仮想マシンでプログラムを実行できます。

より低いCPU速度で実行すると、より多くの競合状態が公開される可能性が減少します。

プログラムがマルチスレッドの場合は、単一のプロセッサまたは特定のプロセッサセットtasksettaskset 3 myprogramCPU#0および#1でのみ実行)を使用するように強制できます。 1 つの CPU でプログラムを強制的に実行すると、競合状態が減少する可能性があります。

ユースケースに応じてゆっくり実行するのではなく、数回実行してみてください。たとえば、コンピュータの約10倍遅いデバイスでプログラムが特定の速度になるようにするには、プログラムを10回連続してテストします。プログラムを複数回実行すると、競合状態が発生する可能性が高くなります。

答え3

別のオプションは、低速のハードウェア(たとえば、安価なARMベースのボード)を使用することです。ラズベリーパイまたは(やや強力) Compulabスライストリムすべきこと。限られた量のメモリと遅いCPUがありますが、Linuxシステム全体を実行できます。 Fedora、Debian、その他の一部のディストリビューションにはARMバージョンがあります。

答え4

cpufreq-infoを使用すると、CPUでサポートされているすべてのCPUクロック速度を確認できます。 cpufreq-set を使用して CPU クロック速度を選択できます。

関連情報