web-dev-qa-db-ja.com

コンピュータのメモリが少ないと、CPU使用率が高くなる可能性がありますか?

私の最後の 質問 から、別の質問が私の頭に浮かびました。そこに記載されているように、メモリが少ないと、オペレーティングシステムはWindowsでページファイルを使用します。メモリが少ないと、スーパーフェッチや...などのサービスがさらに機能します。だから私の質問はそれです:

低リソース状態でのメモリ管理の必要性により、低メモリはより多くのCPU使用率(わずかに多く)を引き起こす可能性がありますか?答えが「はい」の場合、それは賢明ですか?

1
yekanchi

メモリが少ないと、オペレーティングシステムは、最近使用されていないアプリケーションからページファイルにメモリをプッシュします。これには、データをディスクに書き込む動作を管理するためにCPUオーバーヘッドがいくらかかかります。

後でアプリケーションがディスクにページアウトされたメモリの読み取りまたは書き込みを行うと、「ページフォールト」例外が発生します。次に、タスクが一時停止され、OSはメモリがディスク上のどこに格納されているかを把握し、それを物理RAMに読み込み、アプリケーションのページテーブルを変更して、新しい物理メモリの場所を指すようにしてから、タスクの一時停止を解除します。

そのすべての作業コストsome十分な物理メモリが利用可能であった場合に必要とされなかったであろうCPU時間の量。他の事業に比べると比較的小さいと思われますが、それでもかなりの金額です。

そうです、メモリが少ないとCPU使用率が高くなる可能性があります。

問題は、非常に低いメモリがメモリ不足を引き起こし、システムが大量のデータをページインおよびページアウトするため、ディスクの入出力時間が他のすべてよりも支配的になる可能性があることです。

3
Mokubai

クイックアンサー:はい...ええと、ある種...しかし極端な場合には、少なくともCPU使用率に関しては逆の効果があります。

最近の「RAMが不足している」という典型的なケースでは、ハードページフォールト率はそれほど高くなりませんが、全体的なページフォールト率は高くなります(追加のフォールトはソフトフォールトです)。ソフト障害にはディスクIOは含まれません。ただし、障害を解決するには、メモリマネージャでコードを実行する必要があります。

ソフトフォールトを解決するのにかかる時間は、約数百の命令時間と見積もっています。したがって、every命令を実行しようとすると、ソフトフォールトが発生した場合、作業が完了するまでに約300倍の時間がかかります。作業がすべてCPUバウンドであると仮定します。 (幸いなことに、ソフトフォールトを発生させる命令の割合はそれほど高くありません。)

ただし、これによって測定されたCPU使用率は増加しません!スレッドが実行されているか実行されていないかのどちらかであり、CPU使用率カウンターを見ると、ありません...まあ、ほとんど*ありません。 ..アプリのコードの実行に費やされた時間と、アプリに代わってソフト障害を解決するためにメモリマネージャーに費やされた時間の目に見える違い。 Mmは障害のあるプロセスのコンテキストで実行されるため、そのCPU時間はプロセスの時間の一部になります。

* Mmはもちろんカーネルモードで実行されるため、カーネルモードとユーザーモードで費やされる時間に違いが現れます。

もちろん、アプリがメモリマネージャーで多くの時間を費やす必要がある場合は、実際の作業が大幅に少なくなります。ただし、測定されたCPU使用率%は変更されません。

will変更とは、スレッドまたはプロセスが同じ実際の作業を実行するために必要なCPU時間の合計(%ではなく秒)です。

より極端なケースは、ディスクとの間で頻繁にページングしている場合です。つまり、ハードページフォールトが発生しています。

これは実際にはreduce測定されたCPU使用率です。これは、ページングI/O(またはその他のI/O)が完了するのを待つために費やされる時間は、CPUでコードを実行するために費やされる時間ではないためです。 I/O中、要求しているスレッドは待機中、または* nixがそれを「ブロック」と呼んでいます。ストレージデバイス(ディスクまたはSSD)がI/Oを実行するのにかかる時間は、メモリマネージャーがI/Oをセットアップするために費やすCPU時間を完全に圧倒します。したがって、後者は無視できるようになります。これは、M.2SSDにもそれほど当てはまりません。

したがって、ハード障害率が高い状況では、CPU使用率がパーセンテージで表示されます削減。 (つまり、ドライブがCPUのボトルネックになっています。)アプリがデータファイルの読み取りに多くの時間を費やした場合と同じです。

ただし、もちろん、アプリが実行したい作業を完了するのにはるかに長い時間がかかることがわかります。ソフトフォールトの場合と同様に、はるかに悪いだけです。

n.b。:ページングに使用されるファイルはページファイルだけではありません!システム内のすべてのマップされたファイル(すべてのプロセスが使用しているすべてのexeとdll、およびntoskrnel自体を含む)は、本質的にはページファイルです。したがって、ページファイルを削除しても、ハード障害やディスクからのページングが解消されるわけではありません。

2
Jamie Hanrahan

メモリを使用するためにディスクにスワップすると、CPUのI/Oサイクルが長くなり、CPU/RAMのデータ供給速度が本質的に遅くなるため、より一般的なストールが発生すると思います。特に、RAMに関して常により多くの帯域幅を渇望しているRyzen CPUのようなCPUを使用している場合は、CPUに悪影響を及ぼし始める可能性があります。正確に何がページファイルを取得しているかに依存すると思いますが、基本的には、CPUが一部の呼び出しで待機する時間が長くなり、動作が遅くなります。これがあなたの質問に答えることを願っています:)

編集:ページファイリングの場所も重要です。たとえば、M.2 SSD(または任意のSSD)がSATAHDDよりもCPUに役立つと思います。

編集2:この投稿の下にあるジェイミーのコメントを読んでください。

1
tommy61157