(Translated by https://www.hiragana.jp/)
スラッシング - Wikipedia コンテンツにスキップ

スラッシング

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(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がその性能せいのうをフルに発揮はっきできるようになる。しかしここで、AB物理ぶつりメモリじょう隣接りんせつかつ連続れんぞく[7]していて、キャッシュメモリも 128Kバイトだったとする(仮想かそう記憶きおく方式ほうしきでは現実げんじつにはこりにくいが)。プログラムは A先頭せんとうからデータをし、計算けいさんほどこして B先頭せんとうむ。しかし、この仮定かていのような配置はいちであった場合ばあいA からんだデータと Bむデータはキャッシュメモリじょうおな位置いち(ライン)になってしまうため、ループするたびにかいぬし記憶きおくにアクセスせざるをなくなり[8]性能せいのう劇的げきてき低下ていかする。仮想かそう記憶きおく方式ほうしきであったとしても、キャッシュが仮想かそうインデックス方式ほうしきであった場合ばあいおなじことが容易ようい発生はっせいする。このとき、キャッシュメモリがセットアソシアティブ方式ほうしきやフルアソシアティブ方式ほうしきであれば、この問題もんだいをほぼ回避かいひできる。

TLBにおけるスラッシング

[編集へんしゅう]

TLBでもスラッシングが発生はっせいする場合ばあいがある。TLBはいわばページテーブルのキャッシュのようなものであり、短時間たんじかん多数たすうのページにアクセスするプログラムを実行じっこうするとTLBミスが多発たはつし、その解決かいけつ時間じかんついやすことになる。これをTLBのスラッシングとぶ。このときには当然とうぜんながらキャッシュヒットりつ低下ていかともなうことが想定そうていされる。このような事態じたいオブジェクト指向しこうプログラミングがさかんになって、発生はっせいする可能かのうせいたかくなった。局在きょくざいてきなメモリアクセスと、そうではないキャッシュミスをこすメモリアクセスの比率ひりつわった。プロセッサー設計せっけいしゃはこの時代じだい変遷へんせんり、よりおおきなキャッシュメモリやTLBを搭載とうさいすること、アクセスするであろうメモリの予測よそく投機とうきてき実行じっこう実装じっそうした。

しかしキャッシュメモリとTLBなどのプロセッサがわだけの対応たいおうだけでは十分じゅうぶんではなく、またプロセッサの巨大きょだい高価こうかなキャッシュメモリの増大ぞうだいによるコストぞう、それらが消費しょうひする電力でんりょくねつ問題もんだい深刻しんこくになった(たとえばインテルXeonプロセッサのなかには、汎用はんようのCPUに匹敵ひってきする巨大きょだいなパッケージに巨大きょだいヒートシンクけたものもあった)。

この問題もんだい解決かいけつすべくいち記憶きおく高速こうそくとそれをむすぶバスの強化きょうかおこなわれている。CPUバス駆動くどう周波数しゅうはすうが1GHzをえ10Gbyte/びょうもの帯域たいいきつプロセッサも存在そんざいする。

脚注きゃくちゅう

[編集へんしゅう]
  1. ^ a b Mike Loukides ちょ砂原すなはら秀樹ひでき 監訳かんやく『UNIXシステムチューニング』アスキー出版しゅっぱんきょく、1991ねん7がつ21にち、163-164ぺーじISBN 4-7561-0077-5 
  2. ^ P.HAYES, JOHN (1978,1979). Computer Architecture and Organization. pp. 359-360. ISBN 0-07-027363-4 
  3. ^ J.DONOVAN, JOHN (1972). systems programming. pp. 378. ISBN 0-07-085175-1 
  4. ^ スワップファイル、ページファイル、スワップパーティションページング領域りょういきなど名称めいしょう実装じっそうによりことなる。
  5. ^ ただし、Windowsのような動的どうてきにスワップ領域りょういき確保かくほ拡大かくだいできる実装じっそうでは連続れんぞくせいはあまり期待きたいできない。
  6. ^ GNU mallocアルゴリズムでは適用てきようできない場合ばあいがある。
  7. ^ 具体ぐたいてきには、物理ぶつりメモリアドレスの上位じょういビット(キャッシュメモリでのフレームアドレス)がAとBとでことなり、かつ、下位かいビット(エントリアドレス)が、どういち要素ようそ番号ばんごうのAとBにつき同一どういつとなるような場合ばあい
  8. ^ どういちエントリにことなるフレームアドレスが転送てんそうされるとかならずラインのえが発生はっせいするため。キャッシュメモリのダイレクトマップ方式ほうしき参照さんしょう

関連かんれん項目こうもく

[編集へんしゅう]