出典 しゅってん : フリー百科 ひゃっか 事典 じてん 『ウィキペディア(Wikipedia)』
スラッシング (英 えい : Thrashing ) とは、仮想 かそう 記憶 きおく 環境 かんきょう 下 か において、物理 ぶつり メモリ が不足 ふそく 気味 ぎみ で、かつ動作 どうさ しているプロセスのアクセスパターンのために、ページアウトしたデータをすぐにページインするというようなことを頻繁 ひんぱん に繰返 くりかえ す必要 ひつよう が発生 はっせい していて、仮想 かそう 記憶 きおく を管理 かんり しているシステム(一般 いっぱん にはオペレーティングシステム )のそのような動作 どうさ の結果 けっか 、システムの動作 どうさ が極端 きょくたん に遅 おそ くなっている、というような状態 じょうたい [ 1] [ 2] [ 3] のことである。解決 かいけつ 策 さく の一 ひと つは十分 じゅうぶん なメモリを準備 じゅんび することである[ 1] 。
多 おお くの物理 ぶつり メモリを大量 たいりょう に必要 ひつよう とするプロセスが多数 たすう 走 はし っているような物理 ぶつり メモリ不足 ふそく の状態 じょうたい で、さらに各 かく プロセスのアクセスパターンに依 よ るが、ページイン(ディスクからページを読 よ み込 こ む)とページアウト(ディスクにページを書 か き込 こ む)が極端 きょくたん に高 こう 頻度 ひんど に発生 はっせい し、オペレーティングシステム (OS) がページング (ページイン、ページアウトの両者 りょうしゃ を指 さ す)に処理 しょり 能力 のうりょく を費 つい やしてしまい、アプリケーションの動作 どうさ を妨 さまた げてしまっている状態 じょうたい になる(正確 せいかく には、OSは入出力 にゅうしゅつりょく コマンドをディスクコントローラに発行 はっこう してほとんどの時間 じかん は待 ま っているだけであり、処理 しょり 能力 のうりょく 的 てき には正確 せいかく には暇 ひま である)。この状態 じょうたい から脱出 だっしゅつ するには、メモリを大量 たいりょう 消費 しょうひ しているアプリケーションを凍結 とうけつ または終了 しゅうりょう させるしかないが、コマンドの受付 うけつけ すらも困難 こんなん な状態 じょうたい であることが多 おお い。
多 おお くの実装 じっそう において、仮想 かそう 記憶 きおく のスワップ領域 りょういき の本体 ほんたい [ 4] は、ハードディスク 上 うえ に作 つく られたほぼ連続 れんぞく した領域 りょういき であることが多 おお い[ 5] 。しかし、この領域 りょういき の連続 れんぞく 性 せい は仮想 かそう 記憶 きおく ではアクセス場所 ばしょ を特定 とくてい するための処理 しょり 以外 いがい ではあまり大 おお きな意味 いみ を持 も たない。仮想 かそう 記憶 きおく を保存 ほぞん している領域 りょういき へのアクセスは、仮想 かそう 記憶 きおく へのページ割 わ り当 あ てが開始 かいし され始 はじ めた時点 じてん を除 のぞ き、運用 うんよう 状態 じょうたい ではほぼランダムなものになる。このため、ページングはハードディスクにとって最大 さいだい のアクセスタイムを伴 ともな う「常 つね にシーク動作 どうさ を伴 ともな う読 よ み書 か き」であり、それを実行 じっこう するのに必要 ひつよう な時間 じかん は高速 こうそく なものでも数 すう ミリ秒 びょう 、一般 いっぱん 的 てき なハードディスクでは十 じゅう 数 すう ミリ秒 びょう から数 すう 十 じゅう ミリ秒 びょう 必要 ひつよう とする。これはRAM へのアクセス時間 じかん の106 - 107 倍 ばい であり、それによりスラッシング中 ちゅう においてプログラム(OSを含 ふく む)の実行 じっこう 速度 そくど は極度 きょくど に低下 ていか する。このため、スラッシング状態 じょうたい に陥 おちい らないことがOSの可用性 かようせい 確保 かくほ 上 じょう 重要 じゅうよう な課題 かだい となる。
多 おお くのUNIX ではユーザーが確保 かくほ できるメモリ量 りょう を制限 せいげん する機能 きのう がある。資源 しげん の平等 びょうどう な分配 ぶんぱい はもちろん、管理 かんり 者 しゃ がコンピューターのコントロールを失 うしな うという最悪 さいあく の事態 じたい を避 さ けるためでもある。Microsoft Windows NT系 けい のOSでは、ページファイルを使用 しよう しなければメモリを確保 かくほ できない状態 じょうたい になると、システムコール のメモリ確保 かくほ 関数 かんすう は、ページングによってメモリが確保 かくほ されるまで要求 ようきゅう を受 う け付 つ けずエラーにし、理由 りゆう として物理 ぶつり メモリに空 あ きがないことを通知 つうち し、なるべくページファイルを使 つか わないようアプリケーションに促 うなが す。アプリケーションはこの情報 じょうほう を元 もと に不 ふ 必要 ひつよう なメモリをOSに返却 へんきゃく したり、あるいはメモリを必要 ひつよう とした操作 そうさ を却下 きゃっか することができる。もちろん、ページングが成功 せいこう するまで待機 たいき し、仮想 かそう 記憶 きおく によって取得 しゅとく されたメモリ空間 くうかん を利用 りよう することもできる。しかし、この方法 ほうほう は最悪 さいあく の場合 ばあい OS自体 じたい がページアウトされる危険 きけん 性 せい があり、システムの著 いちじる しい速度 そくど 低下 ていか を招 まね き、ユーザーには歓迎 かんげい されない結果 けっか をもたらすだろう。
近年 きんねん においてスラッシングは比較的 ひかくてき 容易 ようい に回避 かいひ 可能 かのう な現象 げんしょう となった。理由 りゆう としては、
メモリの低廉 ていれん 化 か ・高密度 こうみつど 化 か によって必要 ひつよう 十分 じゅうぶん な物理 ぶつり メモリを準備 じゅんび することができるようになった
共有 きょうゆう ライブラリ によってアプリケーションのメモリ利用 りよう 効率 こうりつ が向上 こうじょう した
よりよいワーキングセット・ページ置換 ちかん アルゴリズム の採用 さいよう によって仮想 かそう 記憶 きおく を実現 じつげん する手法 しゅほう が効率 こうりつ 的 てき になった
ハードディスクの記録 きろく 密度 みつど 向上 こうじょう によりI/O時間 じかん が高速 こうそく 化 か された
バスマスタI/OによりCPU 時間 じかん を消費 しょうひ せずディスクI/Oができるようになった
カーネルのマルチスレッド 化 か によってページフォールトを起 お こしたプロセス以外 いがい のプロセスをブロックしなくなった
積極 せっきょく 的 てき なページのクリーニングによりディスクI/Oを伴 ともな わないページ獲得 かくとく が期待 きたい できるようになった
等 ひとし があげられる。
ただし、上記 じょうき の理由 りゆう としてあげた要件 ようけん を満 み たさない場合 ばあい や、例 たと えば物理 ぶつり メモリが1GBしかないのに2GBのメモリを使 つか うアプリケーションを動 うご かした等 ひとし の場合 ばあい は、依然 いぜん としてスラッシングが起 お きうる。近年 きんねん は高 こう 画素 がそ の画像 がぞう データや動画 どうが 、3Dゲームなど、一般 いっぱん 向 む けの用途 ようと でもメモリ消費 しょうひ が増加 ぞうか しており、スラッシングの発生 はっせい 率 りつ は再 ふたた び増加 ぞうか 傾向 けいこう にあると考 かんが えられる。
スラッシングを完全 かんぜん に予防 よぼう するには、仮想 かそう 記憶 きおく を使 つか わないという戦略 せんりゃく がある。多 おお くのリアルタイムオペレーティングシステム が仮想 かそう 記憶 きおく を使 つか わないのは、スラッシングはもとより、ページングによる遅延 ちえん を避 さ けるためである。一般 いっぱん 的 てき なヒープ 管理 かんり アルゴリズム [ 6] ではメモリのフラグメンテーション によって消費 しょうひ される使用 しよう されているメモリと使用 しよう されていないメモリの合計 ごうけい は、使用 しよう されているメモリの2倍 ばい を超 こ えない。それは、使用 しよう されていないメモリ断片 だんぺん が使用 しよう したいメモリ断片 だんぺん よりも大 おお きければ、その使用 しよう されていないメモリ断片 だんぺん は使用 しよう されるからである。よって使用 しよう するメモリ見込 みこ み量 りょう の2倍 ばい 以上 いじょう 物理 ぶつり メモリがあれば仮想 かそう 記憶 きおく を準備 じゅんび する必要 ひつよう はない。ただし、メモリオーバーフローが全 まった く起 お きえない、またはメモリオーバーフローのエラー処理 しょり を全 すべ てのプログラムが適切 てきせつ に行 おこな う前提 ぜんてい であり、そもそも適切 てきせつ な処理 しょり 方法 ほうほう が難 むずか しいアプリケーションの存在 そんざい も考慮 こうりょ した上 うえ で慎重 しんちょう に選択 せんたく すべき戦略 せんりゃく である。スラッシングではないただのページングであれば、リアルタイム性 せい を重視 じゅうし しないOSでは問題 もんだい にならない。
キャッシュメモリの構造 こうぞう
キャッシュメモリ を使用 しよう するパターンによっては、頻繁 ひんぱん に同 おな じキャッシュラインを別 べつ の用途 ようと (つまり別 べつ の物理 ぶつり アドレスに対応 たいおう する内容 ないよう )で置 お き換 か えてしまう現象 げんしょう が発生 はっせい する。これをキャッシュメモリのスラッシング(キャッシュスラッシング)と呼 よ ぶ。例 たと えば、128Kバイトの配列 はいれつ A の各 かく 要素 ようそ に何 なん らかの演算 えんざん を施 ほどこ して、同 おな じサイズの配列 はいれつ B に結果 けっか を格納 かくのう していく場合 ばあい を考 かんが えてみよう。一般 いっぱん に、A[0] からデータを読 よ み込 こ むとメモリ上 じょう の A[0] を含 ふく むある程度 ていど のサイズの内容 ないよう がキャッシュに取 と り込 こ まれる。これによって A[1] 、A[2] とアクセスしたときにキャッシュメモリにヒットしてCPUがその性能 せいのう をフルに発揮 はっき できるようになる。しかしここで、A と B が物理 ぶつり メモリ上 じょう で隣接 りんせつ かつ連続 れんぞく [ 7] していて、キャッシュメモリも 128Kバイトだったとする(仮想 かそう 記憶 きおく 方式 ほうしき では現実 げんじつ には起 お こりにくいが)。プログラムは A の先頭 せんとう からデータを取 と り出 だ し、計算 けいさん を施 ほどこ して B の先頭 せんとう に書 か き込 こ む。しかし、この仮定 かてい のような配置 はいち であった場合 ばあい は A から読 よ み込 こ んだデータと B に書 か き込 こ むデータはキャッシュメモリ上 じょう の同 おな じ位置 いち (ライン)になってしまうため、ループするたびに二 に 回 かい 主 ぬし 記憶 きおく にアクセスせざるを得 え なくなり[ 8] 、性能 せいのう は劇的 げきてき に低下 ていか する。仮想 かそう 記憶 きおく 方式 ほうしき であったとしても、キャッシュが仮想 かそう インデックス方式 ほうしき であった場合 ばあい は同 おな じことが容易 ようい に発生 はっせい する。このとき、キャッシュメモリがセットアソシアティブ方式 ほうしき やフルアソシアティブ方式 ほうしき であれば、この問題 もんだい をほぼ回避 かいひ できる。
TLB でもスラッシングが発生 はっせい する場合 ばあい がある。TLBはいわばページテーブル のキャッシュのようなものであり、短時間 たんじかん に多数 たすう のページにアクセスするプログラムを実行 じっこう するとTLBミスが多発 たはつ し、その解決 かいけつ に時間 じかん を費 つい やすことになる。これをTLBのスラッシングと呼 よ ぶ。このときには当然 とうぜん ながらキャッシュヒット率 りつ の低下 ていか を伴 ともな うことが想定 そうてい される。このような事態 じたい はオブジェクト指向 しこう プログラミングが盛 さか んになって、発生 はっせい する可能 かのう 性 せい が高 たか くなった。局在 きょくざい 的 てき なメモリアクセスと、そうではないキャッシュミスを起 お こすメモリアクセスの比率 ひりつ が変 か わった。プロセッサー設計 せっけい 者 しゃ はこの時代 じだい の変遷 へんせん を読 よ み取 と り、より大 おお きなキャッシュメモリやTLBを搭載 とうさい すること、アクセスするであろうメモリの予測 よそく と投機 とうき 的 てき 実行 じっこう を実装 じっそう した。
しかしキャッシュメモリとTLBなどのプロセッサ側 がわ だけの対応 たいおう だけでは十分 じゅうぶん ではなく、またプロセッサの巨大 きょだい 化 か と高価 こうか なキャッシュメモリの増大 ぞうだい によるコスト増 ぞう 、それらが消費 しょうひ する電力 でんりょく と熱 ねつ の問題 もんだい が深刻 しんこく になった(例 たと えばインテル のXeon プロセッサの中 なか には、汎用 はんよう 機 き のCPUに匹敵 ひってき する巨大 きょだい なパッケージに巨大 きょだい なヒートシンク を取 と り付 つ けたものもあった)。
この問題 もんだい を解決 かいけつ すべく一 いち 次 じ 記憶 きおく の高速 こうそく 化 か とそれを結 むす ぶバスの強化 きょうか が行 おこな われている。CPUバス の駆動 くどう 周波数 しゅうはすう が1GHzを超 こ え10Gbyte/秒 びょう もの帯域 たいいき を持 も つプロセッサも存在 そんざい する。
^ a b Mike Loukides 著 ちょ 、砂原 すなはら 秀樹 ひでき 監訳 かんやく 『UNIXシステムチューニング』アスキー出版 しゅっぱん 局 きょく 、1991年 ねん 7月 がつ 21日 にち 、163-164頁 ぺーじ 。ISBN 4-7561-0077-5 。
^ P.HAYES, JOHN (1978,1979). Computer Architecture and Organization . pp. 359-360. ISBN 0-07-027363-4
^ J.DONOVAN, JOHN (1972). systems programming . pp. 378. ISBN 0-07-085175-1
^ スワップファイル、ページファイル、スワップパーティション 、ページング 領域 りょういき など名称 めいしょう は実装 じっそう により異 こと なる。
^ ただし、Windows のような動的 どうてき にスワップ領域 りょういき を確保 かくほ ・拡大 かくだい できる実装 じっそう では連続 れんぞく 性 せい はあまり期待 きたい できない。
^ GNU mallocアルゴリズムでは適用 てきよう できない場合 ばあい がある。
^ 具体 ぐたい 的 てき には、物理 ぶつり メモリアドレスの上位 じょうい ビット(キャッシュメモリでのフレームアドレス)がAとBとで異 こと なり、かつ、下位 かい ビット(エントリアドレス)が、同 どう 一 いち 要素 ようそ 番号 ばんごう のAとBにつき同一 どういつ となるような場合 ばあい 。
^ 同 どう 一 いち エントリに異 こと なるフレームアドレスが転送 てんそう されると必 かなら ずラインの入 い れ替 か えが発生 はっせい するため。キャッシュメモリ のダイレクトマップ方式 ほうしき 参照 さんしょう 。