システム管理者の間でよくある質問:「このマシンにダミーの CPU 負荷をすばやく生成するにはどうすればよいですか?」 1 つ以上のコアにわたる単純な 100% の CPU 負荷で十分な場合、カスタム ソリューションの構築は驚くほど簡単です。
シングルコア ソリューション (ワンライナー)
この 1 行の C コードをコンパイルして実行すると、1 つのコアが 100% の使用率で固定されます。
<code class="language-c">int main() {while (1) {}}</code>
gcc -o stressme stressme.c
(または Windows では cl stressme.c
) を使用してコンパイルし、./stressme
(または stressme.exe
) で実行します。 複数のコアに負荷をかけるには、プログラムの複数のインスタンスを実行するだけです。
マルチコア ソリューション (マルチスレッド)
より制御されたマルチコア ストレス テストについては、4 つの POSIX スレッドを使用するこのマルチスレッド バージョンを検討してください。
<code class="language-c">#include <pthread.h> #include <unistd.h> #define NUM_THREADS 4 void *loop(void *arg) { while (1) {} } int main() { pthread_t threads[NUM_THREADS]; for (int i = 0; i < NUM_THREADS; i++) { pthread_create(&threads[i], NULL, loop, NULL); } for (int i = 0; i < NUM_THREADS; i++) { pthread_join(threads[i], NULL); } return 0; }</code>
gcc -o multistress multistress.c -pthread
でコンパイルします。
仕組み
コア機能は単純な無限ループ (while (1) {}
) です。 アセンブリ レベルでは、これは継続的な jmp
命令に変換され、CPU 使用率が最大化されます。 最新のプリエンプティブ マルチタスク オペレーティング システムでは、システムが完全に応答しなくなることなく、このループがプロセッサ時間を消費できます。プロセスはまだ終了できます。 対照的に、古い協調マルチタスク システムは、このようなループが原因でフリーズする可能性があります。
<code class="language-assembly">global _start _start: jmp _start</code>
以上がCPU の割合を計算する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。