「アイドル」CPU時間を使用すると、他のプログラムの速度が低下します。

「アイドル」CPU時間を使用すると、他のプログラムの速度が低下します。

以前 Folding@Home クライアントを実行していたとき、そして現在 BOINC を使用しているとき、常に「アイドル」CPU 時間を使用していました (これらのプログラムに馴染みのない方のために説明すると、これらのプログラムはコンピューター上で膨大な科学計算を実行するため、非常に集中的です)。ただし、Windows でも Linux でも、他の作業 (Firefox、Netbeans でのプログラミングなど) を実行しようとすると、これらのプログラムはすべて非常に遅くなることに気付きました。

今では、クライアントを 2 または 3 コア (4 コア システムを想定) でのみ実行できることがわかりましたが、この「アイドル」CPU 時間によって、通常優先度のプログラムの速度が低下する理由の方が興味深いです。通常優先度のプロセスは、アイドル優先度のプロセスよりも先に実行され、必要に応じて中断されるのではないでしょうか。OS がこれを管理するのが難しいのはなぜでしょうか。

答え1

これらのプログラムは実際には CPU の「アイドル」時間中に実行されているわけではなく、低優先度プロセスとして実行されています。OS が複数のアプリケーションを実行している場合、プロセス スケジューラを使用して、どのプロセスがどのくらいの頻度で CPU にアクセスするかを決定します。これをプリエンプティブ マルチタスクと呼びます。

スケジューラは、プロセスの優先度を使用して、どのプロセスが CPU にアクセスするかを決定します。スケジューラでは、通常の優先度のプロセスはアイドル優先度のプロセスよりも優先されますが、CPU は引き続き使用され、スレッドとプロセス間のコンテキスト切り替えにいくらかのオーバーヘッドが発生します。

CPU はアイドル サイクルを利用できなくなり、常に 100% で実行されるようになったため、スレッド切り替えのオーバーヘッドにより、一部のプロセスと割り込みが CPU がアイドル状態の場合よりも時間がかかる可能性があることは想像に難くありません。

これらのプログラムの中には、コンピュータが使用中の場合、実際にプロセスの実行を停止するオプションを持つものがあります。これらのプログラムは、マウスやキーボードのアクティビティを検出し、一定時間無効にしてから、コンピュータが再びアイドル状態になったと判断された時点で再起動します。このオプションを検討することをお勧めします。

もう一つ指摘しておきたいのは、CPU がアイドル状態のときは、フル稼働しているときよりも大幅に少ない電力しか消費しないということです。したがって、プログラムが「予備の」CPU サイクルを使用している間、PC の電力消費は簡単に 2 倍になり、毎月数ドルの電気代がかかります。

答え2

クリス・トンプソンの回答にいくつか細かいことを付け加えるだけでいいのですが、彼はすでに主要な部分を述べています。

もう少し強調すると、電力消費と電気代への影響は実に重大なものになる可能性があります。優先度の低いスレッドが追加されることで他のプログラムが影響を受ける理由は、プロセスを変更するときに追加の作業が必要になるためです (キャッシュとレジスタは実際に使用されています)。また、I/O 操作も実際に何らかの影響を与える可能性があります。これらのプログラムの作業のほとんどは CPU を集中的に使用するだけであり、プロセスの優先度によって影響を受ける可能性がありますが、追加の I/O を優先するのは困難です。また、メモリ使用量が増えるとシステムの速度も低下します。メモリがいっぱいになると、スワップによってシステムのパフォーマンスが大幅に低下する可能性があります。

消費電力について詳しく説明すると、Intel Core i7 Extreme Edition の実際の消費電力は、高負荷状態で約 300 ワット以上であることがわかりました。新しい Intel Core プロセッサには、アイドル状態のコアごとに CPU が電力を削減できる非常に優れた省電力機能があります。したがって、このようなプログラムを常に実行している場合は、150 ~ 200 ワット多く使用することになると思います (私が見つけた古い数値では、150 ワット以上の差がありました)。ただし、信頼できる数値が見つかっていないため、100 ワット多く使用すると仮定しましょう (CPU の発熱量が増えると、冷却システムも稼働する必要があることを忘れないでください)。つまり、PC が 24 時間 365 日稼働している場合は、100*24*30 = 72 kWh/月、または 864 kWh/年になります。

関連情報