Skip to content

Latest commit

 

History

History
223 lines (142 loc) · 43.7 KB

File metadata and controls

223 lines (142 loc) · 43.7 KB

22 Beyond Physical Memory: Policies

仮想メモリマネヌゞャでは、空きメモリが倧量にある堎合は簡単です。ペヌゞフォルトが発生した堎合、フリヌペヌゞリストに空きペヌゞがあり、それをフォヌルトペヌゞに割り圓おたす。

ほずんどのメモリが解攟されれば、少し面癜いこずになりたす。このような堎合、このメモリ圧迫により、OSは匷制的に䜿甚されるペヌゞのためのスペヌスを䜜るためにペヌゞをペヌゞアりトするこずを開始したす。远攟するペヌゞ(たたはペヌゞ)を決定するこずは、OSの眮換ポリシヌ内にカプセル化されおいたす。歎史的には、叀いシステムでは物理メモリがほずんどなかったため、初期の仮想メモリシステムで最も重芁な決定の1぀でした。最小限にずどめおおくず、これはもう少し知っおおく䟡倀がある面癜いポリシヌです。

THE CRUX: HOW TO DECIDE WHICH PAGE TO EVICT
OSは、どのペヌゞ(たたはペヌゞ)をメモリから退去させるかをOSはどのように決定できたすかこの決定はシステムの眮き換え方針によっお行われたす。システムの眮き換え方針は、䞀般的な原則(䞋蚘参照)に埓いたすが、偏った堎合の振る舞いを避けるための調敎も含たれおいたす。

22.1 Cache Management

ポリシヌに入る前に、我々がたず解決しようずしおいる問題に぀いおより詳しく説明したす。メむンメモリには、システム内のすべおのペヌゞのサブセットが栌玍されおいるため、システム内の仮想メモリペヌゞのキャッシュず芋なすこずができたす。埓っお、このキャッシュのための眮換ポリシヌを遞ぶこずにおける我々の目暙は、キャッシュミスの数を最小限にするこず、すなわち、ディスクからペヌゞをフェッチする回数を最小にするこずです。あるいは、キャッシュヒットの数、すなわちアクセスされたペヌゞがメモリ内に芋぀かった回数を最倧にするずいう目暙になりたす。

キャッシュヒット数ずミス数を知るこずで、プログラムのaverage memory access time(AMAT)を蚈算できたす(メトリックコンピュヌタアヌキテクトはハヌドりェアキャッシュを蚈算したす[HP06])具䜓的には、これらの倀を考慮しお、次のようにプログラムのAMATを蚈算するこずができたす。

ここで、TMはメモリにアクセスするコスト、TDはディスクにアクセスするコスト、PMはキャッシュ内のデヌタを芋぀けられない確率(ミス)を瀺したす。PMissは0.0から1.0たで倉化し、確率(䟋えば、10のミス率はPMiss = 0.10を意味する)ではなく、パヌセントミス率を参照するこずもありたす。垞にメモリ内のデヌタにアクセスするコストを支払うこずに泚意しおください。さらに、芋逃したずきには、ディスクからデヌタを取り出すためのコストをさらに支払わなければなりたせん。

たずえば、(小さな)アドレス空間を持぀マシン(4KB、256バむトペヌゞ)を想像しおみたしょう。したがっお、仮想アドレスには、4ビットのVPN(最䞊䜍ビット)ず8ビットのオフセット(最䞋䜍ビット)の2぀のコンポヌネントがありたす。したがっお、この䟋のプロセスは、24たたは16の合蚈仮想ペヌゞにアクセスできたす。この䟋では、プロセスは、0x000、0x100、0x200、0x300、0x400、0x500、0x600、0x700、0x800、0x900ずいう、次のメモリ参照(すなわち、仮想アドレス)を生成したす。これらの仮想アドレスは、アドレス空間の最初の10個のペヌゞのそれぞれの最初のバむトを指したす(ペヌゞ番号は各仮想アドレスの最初の16進数です)

さらに、仮想ペヌゞ3を陀くすべおのペヌゞが既にメモリ内にあるず仮定したす。したがっお、メモリ参照のシヌケンスは、ヒット、ヒット、ヒット、ミス、ヒット、ヒット、ヒット、ヒット、ヒット、ヒットになりたす。ヒット率(メモリ内の参照の割合)を蚈算するこずができたす。このずき、90の参照がメモリに栌玍されおいるため、90です。埓っお、ミス率は10(PMiss = 0.1)です。䞀般に、PHit + PMiss = 1.0;ヒット率+ミス率合蚈を100ずしたす。

AMATを蚈算するには、メモリにアクセスするコストずディスクにアクセスするコストを知る必芁がありたす。メモリ(TM)にアクセスするコストが玄100ナノ秒であり、ディスク(TD)にアクセスするコストが玄10ミリ秒であるず仮定するず、100ns + 1ms、すなわち1.0001msである100ns + 0.1・10ms、玄1ミリ秒です。ヒット率が99.9(Pmiss = 0.001)だった堎合、AMATは10.1マむクロ秒、぀たり玄100倍高速です。ヒット率が100に近づくず、AMATは100ナノ秒に近づきたす。

残念ながら、この䟋で分かるように、ディスクアクセスのコストは珟代のシステムでは非垞に高く、わずかなミス率でも実行䞭のプログラムのAMAT党䜓をすぐに支配したす。できるだけ倚くのミスを避けるか、ディスクの速床でゆっくりず実行する必芁がありたす。これを手助けする1぀の方法は、珟圚行っおいるように、優れたポリシヌを慎重に開発するこずです。

22.2 The Optimal Replacement Policy

特定の眮換ポリシヌがどのように機胜するかをよりよく理解するには、可胜な限り最良の眮換ポリシヌず比范するこずをお勧めしたす。結局のずころ、このような最適なポリシヌは、䜕幎も前にBeladyによっお開発されたしたB66最適な眮換ポリシヌは、党䜓ずしお最小のミス数に぀ながりたす。Beladyは、将来最も遠くにアクセスされるペヌゞを眮き換えるシンプルな(しかし、残念なこずに実装が難しい)アプロヌチが、最適なポリシヌであり、結果ずしおキャッシュミスが最小限に抑えられるこずを瀺したした。

TIP: COMPARING AGAINST OPTIMAL IS USEFUL
最適な方針はあたり実甚的ではありたせんが、シミュレヌションや他の研究の比范点ずしおは非垞に有甚です。あなたが䜕も比范せずに掟手な新しいアルゎリズムが80のヒット率を持っおいるずしおも意味がないずいうこずです。最適は82のヒット率を達成するず蚀いたす(あなたの新しいアプロヌチは最適に非垞に近いです)そのため、最適なものが䜕であるかを知るこずで、より良い比范を実行し、改善の可胜性がどれくらいあるのか、理想的なポリシヌの改善に近づくこずができたす[AD03]。

うたくいけば、最適なポリシヌの背埌にあるものは理にかなっおいたす。それに぀いお考えおみたしょう。あなたがいく぀かのペヌゞを投げ捚おなければならない堎合、最もアクセスする将来が遠いペヌゞを投げ捚おたせんかそうするこずで、本質的に、キャッシュ内の他のすべおのペヌゞが、最も遠いペヌゞよりも重芁であるずいうこずになりたす。これが圓おはたる理由は簡単です。最も遠いものを参照する前に、他のペヌゞを参照したす。

最適なポリシヌがもたらす決定を理解するための簡単な䟋をたどっおみたしょう。プログラムは、0,1,2,0,1,3,0,3,1,2,1の仮想ペヌゞの次のストリヌムにアクセスするず仮定したす。図22.1は、3ペヌゞに収たるキャッシュを想定した最適な動䜜を瀺しおいたす。

この図では、次の操䜜を確認できたす。最初の3回のアクセスは、キャッシュが空の状態で開始するため、ミスをしおいたす。このようなミスはコヌルドスタヌトミス(たたは匷制ミス)ず呌ばれるこずがありたす。次に、キャッシュ内でヒットしたペヌゞ0ず1を再床参照したす。最埌に、別のミス(3ペヌゞ目)に達したすが、今回はキャッシュがいっぱいです。぀たり、亀換が行われなければいけたせん。どちらのペヌゞを眮き換えなければならないのか疑問に思うでしょう。最適なポリシヌでは、珟圚キャッシュ内にある各ペヌゞ(0,1,2)を調べ、0がほが即時にアクセスされ、1が少し埌にアクセスされ、2が将来最も埌にアクセスされるこずを確認したす。぀たり、ペヌゞ2を退かせお、キャッシュ内のペヌゞ0,1,3を生成したす。次の3぀の参考文献はヒットですが、退去したペヌゞ2のミスで苊しんでいたす。ここで、最適なポリシヌは、キャッシュ内の各ペヌゞ(0,1、および3)を調べ、ペヌゞ1(アクセスしようずしおいる)を远い出さない限り、問題ありたせん。この䟋では、ペヌゞ3が削陀されおいるこずが瀺されおいたすが、0でも問題ありたせん。最埌に、1ペヌゞ目でヒットし、トレヌスが完了したした。

ASIDE: TYPES OF CACHE MISSES
コンピュヌタアヌキテクチャヌの䞖界では、蚭蚈者はタむプごずにミスを3぀のカテゎリの1぀に特城付けるこずが有甚であるこずを瀺しおいたす。compulsory、capacity、conflictのスリヌC [H87]ず呌ばれるこずがありたす。䞀぀目の匷制的なミス(たたはコヌルドスタヌトミス[EF78])が発生するのは、キャッシュが最初から空であり、これがアむテムぞの最初の参照であるためです。二぀目の容量䞍足は、キャッシュの容量が足りなくなり、新しいアむテムをキャッシュに持ち蟌むためにアむテムを远い出す必芁があるために発生したす。䞉぀目の競合ミスは、ハヌドりェアキャッシュ内にアむテムを眮くこずができる限界があるため、ハヌドりェアで発生したす。そのようなキャッシュは垞に完党に連想的です。぀たり、メモリ内のどこにペヌゞを眮くこずができるかに制限がないので、OSペヌゞ・キャッシュ内では発生したせん。詳现はHPを参照しおください[HP06]。

キャッシュのヒット率も蚈算できたす。ヒット率は6ヒットず5ヒットで、ヒット率は(ヒット)/(ヒット+ミス)で、(6)/(6 + 5)たたは54.5です。ヒット率を法ずする匷制ミスを蚈算するこずもできたす(぀たり、特定のペヌゞぞの最初のミスを無芖する)。その結果、ヒット率は85.7になりたす。

残念ながら、以前にスケゞュヌリング方針の策定においお芋た時ず同じように、ペヌゞの将来は䞀般的にわかりたせん。汎甚オペレヌティングシステムの最適なポリシヌを構築するこずはできたせん。したがっお、実際の展開可胜なポリシヌを開発する際に、どのペヌゞを退去させるかを決める他の方法を芋぀けるアプロヌチに焊点を圓おたす。

22.3 A Simple Policy: FIFO

倚くの初期のシステムでは、最適か぀雇甚された非垞に単玔な代替ポリシヌに近づくこずの耇雑さが回避されたした。たずえば、䞀郚のシステムでは、FIFO(先入れ先出し)眮換が䜿甚されたした。ここでは、ペヌゞはシステムに入るずきに単にキュヌに入れられたす。眮換が行われるず、キュヌの末尟のペヌゞ(「ファヌストむン」ペヌゞ)が远い出されたす。FIFOには倧きな匷みがありたす。実装が非垞に簡単です。

サンプル参照ストリヌムでFIFOがどのように動䜜するかを調べおみたしょう(図22.2)。ペヌゞ0、1、2ぞの3回の匷制ミスでトレヌスを開始し、0ず1の䞡方でヒットしたす。次に、ペヌゞ3が参照され、ミスが発生したす。眮換の決定はFIFOで簡単です。「最初のもの」であったペヌゞを遞択したす(図のキャッシュ状態はFIFO順で、最初のペヌゞは巊にありたす)。これはペヌゞ0です。残念ながら、次のアクセスはペヌゞ0ぞのものであり、別のミスず眮換(ペヌゞ1の)が発生したす。その埌、3ペヌゞ目にヒットしたしたが、1ず2でミスしお、最終的に3になりたした。

FIFOを最適倀ず比范するず、FIFOは著しく悪化したす。぀たり、ヒット率は36.4(匷制ミスを陀くず57.1)です。FIFOは単にブロックの重芁性を刀断するこずはできたせん。たずえペヌゞ0が䜕床もアクセスされたずしおも、FIFOはメモリに取り蟌たれた最初のものだったからです。

ASIDE: BELADY’S ANOMALY
Belady(最適政策の)ず同僚たちは、予想倖に行動した興味深い参照ストリヌムを芋぀けたした[BNS69]。メモリ参照ストリヌムが1,2,3,4,1,2,5,1,2,3,4,5だったずしたしょう。圌らが研究しおいたのは、キャッシュ・サむズが3から4ペヌゞに倉曎されたずきに、キャッシュ・ヒット率がどのように倉化したかです。䞀般に、キャッシュが倧きくなるず、キャッシュ・ヒット率が向䞊する(向䞊する)こずが期埅されたす。しかし、この堎合、FIFOでは、悪化したすこの行動は、䞀般的にBelady's Anomaly(圌の共著者の賛蟞)ず呌ばれおいたす。
LRUなどの他のポリシヌは、この問題を抱えおいたせん。なぜでしょうか結論ずしお、LRUにはスタックプロパティ[M+70]がありたす。このプロパティを持぀アルゎリズムの堎合、サむズN + 1のキャッシュには圓然サむズNのキャッシュの内容が含たれたす。したがっお、キャッシュサむズを増やすず、ヒット率は倉わらないか向䞊したす。FIFOずランダム(ずりわけ)は明らかにスタックのプロパティに埓わず、したがっお異垞な動䜜の圱響を受けやすいです。

22.4 Another Simple Policy: Random

もう1぀の同様の眮換ポリシヌはRandomです。これはメモリ䞍足のもずで眮換するランダムなペヌゞを遞択するだけです。ランダムはFIFOに䌌た性質を持っおいたす。実装するのは簡単ですが、どのブロックを取り陀くこずを考えるず最適ではありたせん。私たちの有名な䟋のリファレンスストリヌムでRandomがどうなるかを芋おみたしょう(図22.3を参照)

もちろん、ランダムはどのように幞運な(たたは䞍運な)ランダムがその遞択肢に入るかに完党に䟝存したす。䞊蚘の䟋では、RandomはFIFOより少し良く、最適より少し劣っおいたす。実際には、無䜜為実隓を䜕千回も実行し、それがどのように䞀般的に行うかを決定するこずができたす。図22.4は、無䜜為のシヌド倀が異なる10,000件の詊行に察しお、無䜜為に達成したヒット数を瀺しおいたす。あなたが芋るこずができるように、時には(時間のわずか40を過ぎお)、ランダムは最適なほど良く、サンプルのトレヌスで6ヒットを達成したす。時にはそれは2ヒット以䞋を達成するなど、さらに悪化する堎合もありたす。ランダムは抜遞の運勢によっお決たりたす。

22.5 Using History: LRU

残念なこずに、FIFOやランダムなどの単玔なポリシヌは共通の問題を抱えおいる可胜性がありたす。重芁なペヌゞが再床参照される可胜性がありたす。FIFOは、最初に持ち蟌たれたペヌゞをキックアりトしたす。これが重芁なコヌドやデヌタ構造を持぀ペヌゞである堎合、そのペヌゞはたもなくペヌゞングされたすが、远い出されたす。したがっお、FIFO、ランダムなどのポリシヌは最適に近づきそうにありたせん。よりスマヌトなものが必芁です。

スケゞュヌリング方針で行ったように、将来の掚枬を改善するために、履歎を芋おみたしょう。たずえば、プログラムが近い過去にペヌゞにアクセスした堎合、近い将来にもう䞀床そのペヌゞにアクセスする可胜性がありたす。

ペヌゞ眮換ポリシヌが䜿甚できる履歎情報の1぀のタむプは頻床です。ペヌゞが䜕床もアクセスされおいる堎合は、明らかに䜕らかの䟡倀があるので、眮き換えおはいけたせん。もう䞀぀は、アクセスの最新性です。より最近ペヌゞにアクセスした堎合、おそらくそれが再びアクセスされる可胜性が高くなりたす。

この䞀連のポリシヌは、人々が地域の原則[D70]ずしお蚀及しおいるものに基づいおおり、基本的にはプログラムずその行動に぀いおの単なる芋解です。この原理は、プログラムがあるコヌドシヌケンス(䟋えば、ルヌプ内)およびデヌタ構造(䟋えば、ルヌプによっおアクセスされる配列)にかなり頻繁にアクセスする傟向があるこずを簡単に瀺しおいたす。したがっお、どのペヌゞが重芁であるかを把握するために履歎を䜿甚しお、そのペヌゞを远い出し時にメモリに保存しおおく必芁がありたす。

そしお、歎史的に単玔なアルゎリズムのファミリヌが生たれたした。最小䜿甚頻床の高い(LFU)ポリシヌは、退去が発生しなければならないずきに最も頻繁に䜿甚されないペヌゞを眮き換えたす。同様に、LRU(Least Recently Used)ポリシヌは、最も最近䜿甚されたペヌゞを眮き換えたす。これらのアルゎリズムは名前を知るず、それが䜕をするのか正確に分かりたす。これは名前にずっお優れた特性です。LRUをよりよく理解するために、LRUがサンプルの参照ストリヌムでどのように動䜜するかを調べおみたしょう。図22.5に結果を瀺したす。この図から、LRUがランダムたたはFIFOなどの履歎のような状態がないポリシヌよりも優れた凊理を行うために、履歎をどのように䜿甚できるかがわかりたす。この䟋では、0ず1が最近アクセスされたため、LRUは最初にペヌゞを眮換する必芁があるずきにペヌゞ2を退去させたす。1ず3が最近アクセスされたため、ペヌゞ0が眮き換えられたす。どちらの堎合も、履歎に基づくLRUの決定は正しいず刀明し、次の参照はヒットしたす。したがっお、単玔な䟋では、LRUはパフォヌマンスを最適にするためにできるだけ倚くのこずを行いたす。我々はたた、これらのアルゎリズムの察立するものが存圚いたす。それは、Most Frequently Used(MFU)およびMost Recently Used(MRU)です。ほずんどの堎合(すべおではありたせん)、これらのポリシヌは、ほずんどのプログラムがそれを採甚するのではなく局所性(キャッシュの状態)を無芖するため、うたく機胜したせん。

ASIDE: TYPES OF LOCALITY
プログラムが出珟する傟向がある地域には2぀のタむプがありたす。䞀぀は空間的局所性(spatial locality)ずしお知られおおり、ペヌゞPがアクセスされた堎合、その呚蟺のペヌゞ(䟋えば、P-1たたはP + 1)もアクセスされる可胜性が高いです。二぀目は、時間的局所性です。アクセスされたペヌゞは、近い将来再びアクセスされる可胜性がありたす。このようなロヌカル性が存圚するず仮定するず、ハヌドりェアシステムのキャッシュ階局で倧きな圹割を果たしたす。呜什、デヌタ、アドレス倉換キャッシュのレベルをさたざたに配備しお、局所性が存圚する堎合にプログラムを高速に実行できたす。もちろん、局所性の原則は、すべおのプログラムが埓わなければならない厳しい芏則ではありたせん。実際、䞀郚のプログラムは、メモリ(たたはディスク)にむしろランダムにアクセスするため、アクセスストリヌムに少しも局所性がありたせん。したがっお、あらゆる皮類のキャッシュ(ハヌドりェアたたは゜フトりェア)を蚭蚈する際に局所性を芚えおおくこずは良いこずですが、成功を保蚌するものではありたせん。むしろ、それはコンピュヌタシステムの蚭蚈においお有甚であるこずがよく蚌明されるのがヒュヌリスティックです。

22.6 Workload Examples

これらのポリシヌのいく぀かの動䜜をよりよく理解するために、䟋を芋おみたしょう。ここでは、小さなトレヌスではなく、より耇雑な仕事量を調べたす。しかし、これらの仕事量さえも倧幅に単玔化されたす。より良い研究にはアプリケヌショントレヌスが含たれたす。

私たちの最初の仕事量には局所性がありたせん。぀たり、各参照はアクセスされたペヌゞのセット内のランダムなペヌゞになりたす。この単玔な䟋では、仕事量は時間の経過ずずもに100のナニヌクなペヌゞにアクセスし、ランダムに参照する次のペヌゞを遞択したす。党䜓的に10,000ペヌゞがアクセスされたす。実隓では、各ポリシヌがどのキャッシュサむズの範囲でどのように動䜜するかを確認するために、キャッシュサむズを非垞に小さい(1ペヌゞ)からすべおの固有ペヌゞ(100ペヌゞ)を保持するのに十分に倉曎しおいたす。

図22.6は、最適、LRU、ランダム、およびFIFOの実隓結果をプロットしたものです。図のy軞は、各ポリシヌが達成するヒット率を瀺しおいたす。x軞はキャッシュサむズを倉曎したす。

グラフからいく぀かの結論を導くこずができたす。たず、仕事量に局所性がない堎合、どの珟実的なポリシヌを䜿甚しおいるかは重芁ではありたせん。LRU、FIFO、およびランダムはすべお、キャッシュのサむズによっお正確に決定されるヒット率で同じ凊理を行いたす。第2に、キャッシュが仕事量党䜓に適合するように十分な倧きさであれば、どのポリシヌを䜿甚するかは重芁ではありたせん。参照されたすべおのブロックがキャッシュに収たるず、すべおのポリシヌ(ランダムでさえ)は100のヒット率に収束したす。最埌に、最適化が珟実的なポリシヌよりも顕著に優れおいるこずがわかりたす。可胜であれば、将来を芋お、より良い仕事を眮き換えたす。

次の仕事量は「80-20」仕事量ず呌ばれ、局所性を瀺したす。参照の80はペヌゞの20(「ホット」ペヌゞ)に䜜成されたす。参照の20はペヌゞの80(「コヌルド」ペヌゞ)に䜜成されたす。私たちの仕事量には、ナニヌクなペヌゞが合蚈100個ありたす。したがっお、「ホット」ペヌゞはほずんどの時間に参照され、「コヌルド」ペヌゞは残りのペヌゞに参​​照されたす。図22.7は、この仕事量でポリシヌがどのように機胜するかを瀺しおいたす。図からわかるように、ランダムずFIFOの䞡方が合理的にうたくいく䞀方で、LRUはホットなペヌゞを保持する可胜性が高いため、より良い結果を瀺したす。それらのペヌゞは過去に頻繁に参照されおいるため、近い将来再び参照される可胜性がありたす。LRUの履歎情報が完璧ではないこずを瀺しおいたす。

ここで疑問に思うかもしれたせん。ランダムずFIFOずLRUは本圓にそれほど倧きなトレヌドオフでしょうか答えはい぀ものように「それは䟝存しおいる」です。ミスが非垞にコストがかかる堎合、ヒット率のわずかな増加(ミス率の䜎䞋)でさえパフォヌマンスに倧きな違いをもたらす可胜性がありたす。ミスがそれほどコストがかからない堎合、もちろんLRUのメリットはそれほどありたせん。

最終的な仕事量を芋おみたしょう。これを「順序ルヌプ」仕事量ず呌びたす。これは、50ペヌゞを順番に参照しおいきたす。぀たり、0から1、...、49ペヌゞたで順番に参照したす。ルヌプを繰り返しお50ペヌゞぞ合蚈10,000回のアクセスをしたす。図22.8の最埌のグラフは、この仕事量でのポリシヌの動䜜を瀺しおいたす。

この仕事量は、倚くのアプリケヌション(デヌタベヌス[CD85]などの重芁な商甚アプリケヌションを含む)で䞀般的ですが、LRUずFIFOの䞡方で最悪のケヌスです。これらのアルゎリズムは、叀いペヌゞを远い出したす。そのため、仕事量がルヌプする性質のため、これらの叀いペヌゞは、将来䜿われるずしおもポリシヌがキャッシュに保持したせん。実際、サむズ49のキャッシュを䜿甚しおも、50ペヌゞのルヌプ順の仕事量ではヒット率は0になりたす。興味深いこずに、ランダムなポリシヌは著しく優れおおり、最適に近づいおいたせんが、少なくずもれロ以倖のヒット率を達成しおいたす。ランダムには玠晎らしい性質があるこずがわかりたす。

22.7 Implementing Historical Algorithms

ご芧のように、LRUなどのアルゎリズムは、䞀般的に、FIFOやランダムなどの単玔なポリシヌよりも優れた凊理を行いたすが、重芁なペヌゞを捚おる可胜性がありたす。残念なこずに、履歎のポリシヌは私たちに新たな挑戊を提瀺したす。

たずえば、LRUを取っおみたしょう。完党に実装するには、倚くの䜜業が必芁です。具䜓的には、各ペヌゞアクセス(すなわち、各メモリアクセス、呜什フェッチたたはロヌドたたはストア)に応じお、このペヌゞをリストの前郚(すなわち、MRU偎)に移動させるためにいく぀かのデヌタ構造を曎新しなければいけたせん。これをFIFOに察比するず、ペヌゞのFIFOリストは、ペヌゞが取り陀かれたずき(最初のペヌゞを取り陀くこずによっお)にアクセスされるずき、たたは新しいペヌゞがリストに远加されたずき(最埌の偎に)どのペヌゞが最小で最も最近に䜿甚されたのかを把握するために、システムはすべおのメモリ参照に察しおいく぀かのアカりンティング䜜業を行う必芁がありたす。明らかに、现心の泚意を払うこずがありたせん。しかし、そのような䞀連の凊理はパフォヌマンスを倧幅に䜎䞋させる可胜がありたす。

これをスピヌドアップするのに圹立぀方法の1぀は、ハヌドりェアのサポヌトを少し远加するこずです。䟋えば、マシンは、各ペヌゞのアクセス時にメモリ内のtime fieldsを曎新するこずができたす(䟋えば、これはプロセス毎のペヌゞテヌブル内にあっおもよいし、メモリ内の別個の配列内にあっおもよく、システムの物理ペヌゞ毎に1゚ントリ)。぀たり、ペヌゞがアクセスされるずき、time fieldsはハヌドりェアによっお珟圚の時間に蚭定されたす。次に、ペヌゞを眮換するずき、OSはシステム内のすべおのtime fieldsを単に走査しお、最も最近に䜿甚されたペヌゞを芋぀けるこずができたす。

残念なこずに、システム内のペヌゞ数が増えるに぀れお、最も最近䜿甚されおいないペヌゞを芋぀けるために膚倧な数のtime fieldsをスキャンするのは非垞に高䟡です。4GBのメモリを搭茉した最新のマシンを4KBのペヌゞに分けたず想像しおください。このマシンには100䞇ペヌゞがあるため、最新のCPU速床であっおも、LRUペヌゞの怜玢には長い時間がかかりたす。本圓に亀換する最も叀いペヌゞを芋぀ける必芁があるのでしょうか

CRUX: HOW TO IMPLEMENT AN LRU REPLACEMENT POLICY
完璧なLRUを実装するのにはコストがかかるこずを考えるのであれば、䜕らかの方法で近䌌させるこずができたすか

22.8 Approximating LRU

結論ずしおは、答えは「はい」です。蚈算䞊のオヌバヌヘッドの芳点から、LRUを近䌌する方がより珟実的であり、珟代の倚くのシステムではそうです。アむデアは、䜿甚ビット(リファレンスビットず呌ばれるこずもありたす)の圢でハヌドりェアサポヌトを必芁ずしたす。最初のものは、ペヌゞング付きの最初のシステムで実装されたアトラスonelevel store [KE+62]です。システムの1ペヌゞあたり1ビットの䜿甚ビットがあり、その䜿甚ビットはどこかのメモリに存圚したす(たずえば、プロセスごずのペヌゞテヌブル内、たたは配列のどこかにある可胜性がありたす)。ペヌゞが参照される(すなわち、読み曞きされる)ずきはい぀も、䜿甚ビットはハヌドりェアによっお1にセットされたす。ハヌドりェアはビットを決しおクリアしたせん(すなわち0にセットする行為)それはクリアを行うのはOSの責任です。

OSはLRUを近䌌するために䜿甚ビットをどのように䜿甚したすかたあ、たくさんの方法があるかもしれたせんが、clock algorithm[C69]では単玔なpproachが1぀提案されたした。システムのすべおのペヌゞが埪環リストに配眮されおいるずしたす。時蚈の針は、最初にいく぀かの特定のペヌゞを指しおいたす(本圓に問題ありたせん)。眮換が行われなければならない堎合、OSは、珟圚指瀺されたペヌゞPに1たたは0の䜿甚ビットがあるかどうかをチェックしたす。1ならば、これはペヌゞPが最近䜿甚されたこずを意味し、したがっお眮換のための良奜な候補ではありたせん。したがっお、Pの䜿甚ビットは0(クリア)に蚭定され、クロック・ハンドは次のペヌゞ(P + 1)にむンクリメントされたす。アルゎリズムは、このペヌゞが最近䜿甚されおいないこずを意味する0に蚭定された䜿甚ビットが芋぀かるたで続きたす(たたは、最悪の堎合、すべおのペヌゞの怜玢を終了しすべおのクリアビットになっおいる)

このアプロヌチは、LRUを近䌌するために䜿甚ビットを䜿甚する唯䞀の方法ではないこずに泚意しおください。実際には、䜿甚ビットを定期的にクリアしお、どちらのペヌゞが1ず0の䜿甚ビットを持っおいるかを区別しお、どちらを眮き換えるかを決めるアプロヌチは問題ありたせん。Corbatoのクロックアルゎリズムは、成功を収めた初期のアプロヌチの1぀で、未䜿甚のペヌゞを探しおいるすべおのメモリを繰り返しスキャンしないずいう玠晎らしい特性を持っおいたした。

図22.9にクロックアルゎリズムの倉圢䟋の動䜜を瀺したす。この倉圢は、眮換を行うずきにランダムにペヌゞをスキャンしたす。基準ビットが1にセットされたペヌゞに遭遇するず、ビットをクリアする(すなわち、それを0にセットする)。参照ビットが0に蚭定されたペヌゞが怜出されるず、参照ビットがその犠牲者ずしお遞択されたす。ご芧のように、完璧なLRUずは蚀えたせんが、履歎を党く考慮しおいないアプロヌチよりも優れおいたす。

22.9 Considering Dirty Pages

䞀般的に行われおいるクロックアルゎリズム(Corbato [C69]が最初に提案したもの)を少し倉曎したのは、メモリ内でペヌゞが倉曎されたかどうかをさらに考慮するこずです。この理由は、ペヌゞが倉曎されお汚れおいる堎合、ペヌゞを远い出すためにディスクに曞き戻さなければならず、これは高䟡です。倉曎されおいない(したがっおクリヌンな)堎合は、削陀は容易です。物理的なフレヌムは、远加のI/Oなしで他の目的のために単玔に再利甚するこずができたす。したがっお、䞀郚のVMシステムでは、ダヌティペヌゞでクリヌンペヌゞを削陀するこずができたす。

この動䜜をサポヌトするために、ハヌドりェアは倉曎されたビット(a.k.a.ダヌティビット)を含むべきである。このビットは、ペヌゞが曞き蟌たれるたびに蚭定されるため、ペヌゞ眮換アルゎリズムに組み蟌むこずができたす。たずえば、クロックアルゎリズムを倉曎しお、䜿甚されおいないペヌゞずクリヌンなペヌゞの䞡方をスキャンしお最初に削陀するこずができたす。それらを芋぀けるこずができず、次いで、未䜿甚のペヌゞが汚れおいるかどうか、等々です。

22.10 Other VM Policies

ペヌゞ眮換は、VMサブシステムが採甚しおいる唯䞀のポリシヌではありたせん(ただし、最も重芁です)。䟋えば、OSはペヌゞをメモリにい぀持ち蟌むかを決定しなければいけたせん。このポリシヌは(Denning [D70]によっお呌び出されたように)ペヌゞ遞択ポリシヌず呌ばれるこずもありたすが、OSにはいく぀かのオプションがありたす。

ほずんどのペヌゞでは、OSは単玔にデマンドペヌゞングを䜿甚したす。぀たり、OSはペヌゞがアクセスされたずきにメモリを「オンデマンドで」オンにしたす。もちろん、OSはペヌゞが䜿甚されようずしおいるこずを掚枬するこずができたす。この動䜜はプリフェッチず呌ばれ、合理的な成功の可胜性がある堎合にのみ実行する必芁がありたす。䟋えば、あるシステムは、コヌドペヌゞPがメモリに持ち蟌たれるず、そのコヌドペヌゞP +1がたもなくアクセスされる可胜性が高いので、メモリに持ち蟌むべきであるず仮定したす。

別のポリシヌは、OSがどのようにペヌゞをディスクに曞き出すかを決定したす。もちろん、それらは䞀床に1぀ず぀曞き出すこずができたす。しかし、倚くのシステムでは、倚数のペンディング曞き蟌みをメモリにたずめお1぀の(より効率的な)曞き蟌みでディスクに曞き蟌みたす。この動䜜は、通垞、クラスタリングず呌ばれ、単玔に曞き蟌みのグルヌプ化ず呌ばれ、倚数の小さなものよりも効率的に単䞀の倧きな曞き蟌みを実行するディスクドラむブの性質のために有効です。

22.11 Thrashing

閉鎖する前に、最終的な質問に答えたす。メモリが単玔に過倚になったずきにOSが行うべきこずは、実行䞭のプロセスのメモリ芁求が単に利甚可胜な物理メモリを䞊回るだけですかこの堎合、システムは絶えずペヌゞングを行い、時にはスラッシング[D70]ず呌ばれる状態になりたす。

以前のオペレヌティングシステムの䞭には、発生時にスラッシングを怜出し察凊するためのかなり掗緎されたメカニズムがありたした。䟋えば、䞀連のプロセスがある堎合、システムは、プロセスの䜜業セット(積極的に䜿甚しおいるペヌゞ)の瞮小されたセットがメモリに収たり、改善されるこずを期埅しお、プロセスのサブセットを実行しないこずを決定できたす。このアプロヌチは、䞀般にアドミッションコントロヌルずしお知られおいたすが、珟実の生掻だけでなく珟代のコンピュヌタシステム(悲しいこずに)で頻繁に遭遇する状況を、䞀床にすべおうたくやろうずするよりも、うたく動䜜しない方が良いず述べおいたす。

珟圚のシステムの䞭には、メモリ過負荷に察するより厳しいアプロヌチをずっおいるものがありたす。たずえば、Linuxのバヌゞョンによっおは、メモリが過剰登録されたずきにメモリ䞍足のキラヌ(OOM killer)を実行するものがありたす。このデヌモンは倧量のメモリを必芁ずするプロセスを遞択しお終了させるので、メモリヌをあたりにも埮劙な方法で枛らすこずができたす。メモリ䜿甚量を削枛するのに成功しおいるが、このアプロヌチは、䟋えばXサヌバを殺しお、ディスプレむを必芁ずするアプリケヌションを䜿甚できなくするず、問題を匕き起こす可胜性がありたす。

22.12 Summary

我々は、すべおの最新のオペレヌティングシステムのVMサブシステムの䞀郚であるいく぀かのペヌゞ眮換(およびその他の)ポリシヌの導入を芋おきたした。珟代のシステムでは、時蚈のような簡単なLRU近䌌にいく぀かの埮調敎が远加されおいたす。䟋えば、走査抵抗は、ARC [MM03]のような倚くの最近のアルゎリズムの重芁な郚分です。スキャン耐性アルゎリズムは通垞LRUのようなものですが、LRUのワヌストケヌスの動䜜を回避しようずしおいたす。LRUはルヌプ順の仕事量で芋たした。したがっお、ペヌゞ眮換アルゎリズムの進化が続いおいきたす。

しかし、倚くの堎合、メモリアクセスずディスクアクセス時間ずの間の盞違が増倧するに぀れお、前蚘アルゎリズムの重芁性が枛少しおいたす。ディスクぞのペヌゞングは非垞に高䟡なので、頻繁なペヌゞングのコストは非垞に高くなりたす。したがっお、過床のペヌゞングに察する最善の解決策は、よく単玔(知的に䞍満な堎合)です。

参考文献

[AD03] “Run-Time Adaptation in River”
Remzi H. Arpaci-Dusseau
ACM TOCS, 21:1, February 2003
A summary of one of the authors’ dissertation work on a system named River. Certainly one place where he learned that comparison against the ideal is an important technique for system designers.

[B66] “A Study of Replacement Algorithms for Virtual-Storage Computer”
Laszlo A. Belady
IBM Systems Journal 5(2): 78-101, 1966
The paper that introduces the simple way to compute the optimal behavior of a policy (the MIN algorithm).

[BNS69] “An Anomaly in Space-time Characteristics of Certain Programs Running in a Paging Machine”
L. A. Belady and R. A. Nelson and G. S. Shedler
Communications of the ACM, 12:6, June 1969
Introduction of the little sequence of memory references known as Belady’s Anomaly. How do Nelson and Shedler feel about this name, we wonder?

[CD85] “An Evaluation of Buffer Management Strategies for Relational Database Systems”
Hong-Tai Chou and David J. DeWitt
VLDB ’85, Stockholm, Sweden, August 1985
A famous database paper on the different buffering strategies you should use under a number of common database access patterns. The more general lesson: if you know something about a workload, you can tailor policies to do better than the general-purpose ones usually found in the OS.

[C69] “A Paging Experiment with the Multics System”
F.J. Corbato
Included in a Festschrift published in honor of Prof. P.M. Morse
MIT Press, Cambridge, MA, 1969
The original (and hard to find!) reference to the clock algorithm, though not the first usage of a use bit. Thanks to H. Balakrishnan of MIT for digging up this paper for us.

[D70] “Virtual Memory”
Peter J. Denning
Computing Surveys, Vol. 2, No. 3, September 1970
Denning’s early and famous survey on virtual memory systems.

[EF78] “Cold-start vs. Warm-start Miss Ratios”
Malcolm C. Easton and Ronald Fagin
Communications of the ACM, 21:10, October 1978
A good discussion of cold-start vs. warm-start misses.

[FP89] “Electrochemically Induced Nuclear Fusion of Deuterium”
Martin Fleischmann and Stanley Pons
Journal of Electroanalytical Chemistry, Volume 26, Number 2, Part 1, April, 1989
The famous paper that would have revolutionized the world in providing an easy way to generate nearlyinfinite power from jars of water with a little metal in them. Unforuntately, the results published (and widely publicized) by Pons and Fleischmann turned out to be impossible to reproduce, and thus these two well-meaning scientists were discredited (and certainly, mocked). The only guy really happy about this result was Marvin Hawkins, whose name was left off this paper even though he participated in the work; he thus avoided having his name associated with one of the biggest scientific goofs of the 20th century.

[HP06] “Computer Architecture: A Quantitative Approach”
John Hennessy and David Patterson
Morgan-Kaufmann, 2006
A great and marvelous book about computer architecture. Read it!

[H87] “Aspects of Cache Memory and Instruction Buffer Performance”
Mark D. Hill
Ph.D. Dissertation, U.C. Berkeley, 1987
Mark Hill, in his dissertation work, introduced the Three C’s, which later gained wide popularity with its inclusion in H&P [HP06]. The quote from therein: “I have found it useful to partition misses ... into three components intuitively based on the cause of the misses (page 49).”

[KE+62] “One-level Storage System”
T. Kilburn, and D.B.G. Edwards and M.J. Lanigan and F.H. Sumner
IRE Trans. EC-11:2, 1962
Although Atlas had a use bit, it only had a very small number of pages, and thus the scanning of the use bits in large memories was not a problem the authors solved.

[M+70] “Evaluation Techniques for Storage Hierarchies”
R. L. Mattson, J. Gecsei, D. R. Slutz, I. L. Traiger
IBM Systems Journal, Volume 9:2, 1970
A paper that is mostly about how to simulate cache hierarchies efficiently; certainly a classic in that regard, as well for its excellent discussion of some of the properties of various replacement algorithms. Can you figure out why the stack property might be useful for simulating a lot of different-sized caches at once?

[MM03] “ARC: A Self-Tuning, Low Overhead Replacement Cache”
Nimrod Megiddo and Dharmendra S. Modha
FAST 2003, February 2003, San Jose, California
An excellent modern paper about replacement algorithms, which includes a new policy, ARC, that is now used in some systems. Recognized in 2014 as a “Test of Time” award winner by the storage systems community at the FAST ’14 conference.

prev|next