コンピュータサイエンスでは、メモリページングを備えたシステムでスラッシングが発生するのは、コンピュータの実メモリ(RAM)リソースが過剰に割り当てられている場合です。これにより、ページング(スワッピング、つまりページをディスクに移動すること)とページフォールトが絶えず発生し、ほとんどのアプリケーションレベルの処理が遅くなります。[ 1 ]これにより、コンピュータのパフォーマンスが低下したり、場合によっては崩壊したりします。この状況は、ユーザーが実行中のアプリケーションを閉じるか、アクティブなプロセスが追加の仮想メモリリソースを解放するまで、無期限に続く可能性があります。
初期化後、ほとんどのプログラムは、プログラムが必要とするメモリ総量に比べて、ごく少数のコードページとデータページ上で動作します。どの時点においても最も頻繁にアクセスされるページはワーキングセットと呼ばれ、これは時間とともに変化する可能性があります。
ワーキングセットがシステムの実ストレージページフレームの総数を大幅に上回っていない場合、仮想メモリシステムは最も効率的に動作し、ページフォールトの解決に費やされる計算量はごくわずかです。ワーキングセットの総数が増加するにつれて、ページフォールトの解決は管理可能な範囲にとどまりますが、フォールトの数が劇的に増加し、解決に費やす時間がプログラム本来の処理に費やす時間を圧倒する臨界点に達すると、この状態はスラッシングと呼ばれます。スラッシングは、巨大なデータ構造にランダムアクセスするプログラムで発生する可能性があります。これは、ワーキングセットが大きいため、継続的なページフォールトが発生し、システムが大幅に遅くなるためです。ページフォールトを解消するには、ディスクからすぐに再読み込みする必要のあるページを解放する必要がある場合があります。
この用語は、メモリ階層の他のレベル間の移動など、さまざまな類似現象にも使用されます。この場合、リソースの取得にかなりの時間が費やされるため、プロセスがゆっくりと進行します。
「スラッシング」という用語は、仮想メモリシステム以外の文脈でも使用されます。例えば、コンピューティングにおけるキャッシュの問題や、ネットワークにおける「シリーウィンドウ症候群」を説明する際に用いられます。
メモリのページングとスワッピングは、コンピュータのハードディスクなどの二次記憶装置の一部をキャッシュ階層の追加レイヤーとして扱うことで機能します。ページングとスワッピングにより、プロセスはメインメモリに物理的に存在するメモリよりも多くのメモリを使用できます。ページングされた仮想メモリをサポートするオペレーティングシステムは、プロセスに仮想アドレス空間を割り当て、各プロセスは実行コンテキスト内のアドレスをいわゆる仮想アドレスで参照します。そのアドレスにあるコードや変数などのデータにアクセスするには、プロセスは仮想アドレス変換と呼ばれるプロセスでアドレスを物理アドレスに変換する必要があります。事実上、物理メインメモリは仮想メモリのキャッシュとなり、仮想メモリは一般的にメモリページとしてディスクに格納されます。
プログラムには、オペレーティングシステムが必要とする一定数のページが割り当てられます。アクティブなメモリページは、RAMとディスクの両方に存在します。メインメモリがいっぱいになると、非アクティブなページはキャッシュから削除され、ディスクに書き込まれます。
プロセスがメインメモリをすべて使用していて、追加のメモリページが必要な場合、ページフォールトと呼ばれる深刻なキャッシュミスが連鎖的に発生し、多くの場合、オペレーティングシステムの応答性が著しく低下します。このプロセスと、無駄に繰り返されるページスワッピングは「スラッシング」と呼ばれます。スラッシングは、CPU使用率の急激な上昇を招き、システムを停止させてしまう可能性があります。最新のコンピュータでは、スラッシングはページングシステム(物理メモリが不足している場合やディスクアクセス時間が長すぎる場合)、I/O通信サブシステム(特に内部バスアクセスをめぐる競合)などで発生する可能性があります。
構成と関連するアルゴリズムによっては、システムのスループットとレイテンシが数桁低下する可能性があります。スラッシングとは、CPU が「生産的な」作業を減らし、「スワッピング」作業を増やすことです。上位レベルのメモリはメモリ階層の次の下位レベルの速度にしかならないため、メモリへのアクセス時間が全体的に増加する可能性があります。[ 2 ] CPU はページのスワッピングに忙しすぎて、必要なほどユーザーのプログラムや割り込みに応答できません。スラッシングは、メモリにページが多すぎて、各ページが別のページを参照している場合に発生します。実メモリは、すべてのページを格納するために容量を減らし、「仮想メモリ」を使用します。実行中の各ページが、現在実メモリ (RAM) にないページを要求すると、仮想メモリにいくつかのページを配置し、RAM 上の必要なページを調整します。CPU がこのタスクに忙しすぎると、スラッシングが発生します。
ページングされた仮想メモリシステムでは、スラッシングは、参照の局所性が不十分なプログラムまたはワークロードによって引き起こされる可能性があります。プログラムまたはワークロードのワーキング セットが物理メモリ内に効果的に保持できない場合、絶え間ないデータ スワッピング、つまりスラッシングが発生する可能性があります。この用語は、テープ オペレーティング システム時代に、データが高速に書き込まれたり読み出されたりしたときにテープが発する音を説明するために初めて使用されました。最悪のケースは、VAXプロセッサで発生する可能性があります。ページ境界をまたぐ単一のMOVL命令は、オペランド アドレスを含むロングワードがページ境界をまたぐ変位遅延アドレッシング モードを使用するソース オペランドと、オペランド アドレスを含むロングワードがページ境界をまたぐ変位遅延アドレッシング モードを使用するデスティネーション オペランドの両方がページ境界をまたぐ可能性があります。この単一の命令は 10 ページを参照します。すべてが RAM にない場合、それぞれがページ フォルトを引き起こします。したがって、この特定の命令に関係するページの総数は 10 ページであり、10 ページすべてが同時にメモリに存在する必要があります。 10ページのうちいずれか1ページを交換できない場合(例えば、他のページのためのスペースを確保するためなど)、命令はエラーとなり、10ページすべてを交換できるようになるまで、再起動の試みはすべて失敗します。
システムのスラッシングは、少数の実行中のプログラムからのページ要求の急激な増加が原因であることが多い。スワップトークン[ 3 ]は、軽量で動的なスラッシング保護メカニズムである。基本的な考え方は、システムにトークンを設定し、スラッシングが発生したときにページフォルトを持つプロセスにランダムにトークンを与えることである。トークンを持つプロセスには、ワーキングセットを構築するためにより多くの物理メモリページを割り当てる特権が与えられ、実行を迅速に終了してメモリページを他のプロセスに解放することが期待される。タイムスタンプを使用して、トークンを1つずつ渡す。スワップトークンの最初のバージョンはLinuxに実装されている。2番目のバージョンはプリエンプトスワップトークンと呼ばれる。この更新されたスワップトークンの実装では、各プロセスに優先度カウンタが設定され、スワップアウトページの数を追跡する。トークンは常に優先度の高いプロセス、つまりスワップアウトページ数が多いプロセスに与えられる。タイムスタンプの長さは一定ではなく、優先度によって決まります。プロセスのスワップアウトページの数が多いほど、そのプロセスのタイムスタンプは長くなります。
スラッシングはメモリやストレージの分野で最もよく知られていますが、以下のような他のリソースでも同様の現象が発生します。
for (k = 0; k < N; k += 256) v[k] += 1;です。[ 4 ]{{cite book}}: CS1 maint: 複数の名前: 著者リスト (リンク)