22

さまざまなページ置換アルゴリズムがどのように実行されるかをシミュレートするアプリケーションを開発するように依頼されたプロジェクトがあります(さまざまなワーキングセットサイズと安定期間を使用)。私の結果:

  • 垂直軸:ページフォールト
  • 横軸:ワーキングセットサイズ
  • 深さ軸:安定期間

私の結果は妥当ですか?LRUの方がFIFOよりも良い結果が得られると期待していました。ここでは、それらはほぼ同じです。

ランダムな場合、安定期間とワーキングセットのサイズはパフォーマンスにまったく影響を与えないようですか?FIFOおよびLRUと同様のグラフが最悪のパフォーマンスになると予想しましたか?参照文字列が非常に安定していて(小さなブランチ)、ワーキングセットのサイズが小さい場合でも、多くのブランチと大きなワーキングセットのサイズを持つアプリケーションよりもページフォールトが少ないはずです。

より詳しい情報

私のPythonコード| プロジェクトの質問

  • 参照文字列(RS)の長さ:200,000
  • 仮想メモリのサイズ(P):1000
  • メインメモリのサイズ(F):100
  • 参照された時間ページの数(m):100
  • ワーキングセットのサイズ(e):2-100
  • 安定性(t):0-1

ワーキングセットのサイズ(e)と安定期間(t)は、参照文字列の生成方法に影響します。

|-----------|--------|------------------------------------|
0           p        p+e                                  P-1

したがって、上記のサイズPの仮想メモリを想定します。参照文字列を生成するには、次のアルゴリズムが使用されます。

  • 参照文字列が生成されるまで繰り返します
    • m[p、p+e]で数字を選びます。mページが参照される回数をシミュレートまたは参照する
    • 乱数を選択、0 <= r <1
    • r<tの場合
      • 新しいpを生成する
      • else(++ p)%P

更新(@MrGomezの回答に応じて)

ただし、入力データをどのようにシードしたかを思い出してください。random.randomを使用して、制御可能なレベルのエントロピーでデータを均一に分散させます。このため、すべての値が同じように発生する可能性があり、浮動小数点空間でこれを作成したため、再発する可能性はほとんどありません。

私はを使用してrandomいますが、それも完全にランダムではありません。ワーキングセットのサイズとページ数の参照パラメーターを使用しても、参照はある程度の局所性で生成されますか?

numPageReferenced現在メモリ内にあるページをより多く参照し、FIFOよりもLRUのパフォーマンス上の利点を示すことを期待して、相対値を増やしてみnumFramesましたが、明確な結果は得られませんでした。参考までに、次のパラメーターを使用して同じアプリを試しました(ページ/フレームの比率は同じままですが、データのサイズを小さくして処理を高速化しました)。

--numReferences 1000 --numPages 100 --numFrames 10 --numPageReferenced 20

結果は

ここに画像の説明を入力してください

それでもそれほど大きな違いはありません。numPageReferencedに比べて増加した場合numFrames、LRUはメモリ内のページをより多く参照するため、パフォーマンスが向上するはずです。それとも私は何かを誤解していますか?

ランダムに、私は次の線に沿って考えています:

  • 高い安定性と小さなワーキングセットがあるとします。これは、参照されているページがメモリ内にある可能性が非常に高いことを意味します。では、ページ置換アルゴリズムを実行する必要性は低いのでしょうか。

うーん、多分私はこれについてもっと考えなければなりません:)

更新:安定性が低いと、ゴミ箱があまり目立たなくなります

ここに画像の説明を入力してください

ここでは、ワーキングセットのサイズがメモリ内のフレーム数(100)を超えているため、トラッシングを表示しようとしています。ただし、安定性が低い(高い)とスラッシングが目立たなくなることにt注意してください。なぜそうなるのでしょうか。安定性が低くなるとページフォールトが最大に近づくため、ワーキングセットのサイズはそれほど重要ではないという説明はありますか?

4

1 に答える 1

12

これらの結果は、現在の実装を考えると妥当です。ただし、その背後にある理論的根拠にはいくつかの議論があります。

アルゴリズム全般を検討する場合、現在検査中のアルゴリズムの特性を検討することが最も重要です。具体的には、コーナーケースとベストケースとワーストケースの条件に注意してください。あなたはおそらくこの簡潔な評価方法にすでに精通しているでしょう、それでこれは主にアルゴリズムのバックグラウンドを持っていないかもしれないここを読んでいる人々の利益のためです。

質問をアルゴリズムごとに分類し、コンテキスト内でそれらのコンポーネントのプロパティを調べてみましょう。

  1. FIFOは、ワーキングセット(長さ軸)のサイズが大きくなるにつれて、ページフォールトの増加を示します。

    これは正しい動作であり、FIFO交換に関するベラディの異常と一致しています。作業ページセットのサイズが大きくなると、ページフォールトの数も増えるはずです。

  2. FIFOは、システムの安定性( 1-深さ軸が低下するにつれてページフォールトの増加を示します。

    シードの安定性()のアルゴリズムに注目すると、安定性(S)が1に近づくif random.random() < stabilityと、結果の安定性が低下します。データのエントロピーを急激に増やすと、ページフォールトの数も急激に増え、ベラディの異常が伝播します。

    ここまでは順調ですね。

  3. LRUはFIFOとの整合性を示します。なんで?

    シードアルゴリズムに注意してください。標準のLRUは、より小さな操作フレームに構造化されたページング要求がある場合に最適です。順序付けられた予測可能なルックアップの場合、現在の実行フレームに存在しなくなった結果をエージングオフすることでFIFOを改善します。これは、段階的な実行とカプセル化されたモーダル操作に非常に便利なプロパティです。繰り返しますが、これまでのところ、とても良いです。

    ただし、入力データをどのようにシードしたかを思い出してください。を使用してrandom.random、制御可能なレベルのエントロピーでデータを均一に分散させます。このため、すべての値が同じように発生する可能性があり、浮動小数点空間でこれを作成したため、再発する可能性はほとんどありません。

    その結果、LRUは各要素が少数発生することを認識し、次の値が計算されたときに完全に破棄されます。したがって、ウィンドウから外れるときに各値を正しくページングし、FIFOとまったく同じパフォーマンスを提供します。システムが繰り返しまたは圧縮された文字スペースを適切に考慮している場合、著しく異なる結果が表示されます。

  4. ランダムの場合、安定期間とワーキングセットのサイズはパフォーマンスにまったく影響を与えないようです。比較的滑らかな多様体を与えるのではなく、なぜこの落書きがグラフ全体に表示されるのですか?

    ランダムページングスキームの場合、各エントリを確率的にエージングします。伝えられるところでは、これは私たちのワーキングセットのエントロピーとサイズにバインドされた何らかの形の多様体を私たちに与えるはずです...そうですか?

    それともすべきですか?エントリのセットごとに、時間の関数としてページアウトするサブセットをランダムに割り当てます。これにより、アクセスプロファイルが再び均一にランダムである限り、安定性やワーキングセットに関係なく、比較的均一なページングパフォーマンスが得られます。

    したがって、チェックしている条件に基づいて、これは私たちが期待するものと一致する完全に正しい動作です。高負荷で効率的な操作に適した、他の要因によって低下しない(ただし、逆に、それらによって改善されない)均一なページングパフォーマンスが得られます。悪くはありませんが、直感的に期待できるものではありません。

つまり、一言で言えば、プロジェクトが現在実装されているときの内訳です。

scipy.stats入力データのさまざまな配置と分布のコンテキストでこれらのアルゴリズムのプロパティをさらに調査するための演習として、たとえば、ガウス分布またはロジスティック分布が各グラフにどのように影響するかを調べることを強くお勧めします。次に、各アルゴリズムの文書化された期待に戻り、それぞれが一意に最も適切である場合と最も適切でない場合のドラフトケースを示します。

全体として、あなたの先生は誇りに思うでしょう。:)

于 2012-04-04T08:16:06.160 に答える