ブロックアドレスを含むトレースと読み取り/書き込み操作を再生する単純なフラッシュ変換レイヤー。
5188 READ
5208 READ
6164 READ
5236 READ
5276 READ
1024 WRITE
16 WRITE
16384 WRITE
操作が指定されていない場合(読み取り/書き込み)、デフォルトは書き込み操作です。
primary_logical_block recovery_logical_block degree_of_loss
例-ext4の場合、プライマリブロックはディスクに記述されたイノードである可能性があります。セカンダリブロックは、障害の場合にプライマリブロックが回復されるジャーナルです。
シミュレートできるFTLレイヤーには3つのタイプがあります。
ページレベルFTL
ページレベルFTLは、論理ページを物理ページに直接マッピングします。論理ページ番号の上書きが発生した場合、古い物理ページは無効にマークされます。論理ページ番号に新しい物理ページが提供されます。 LTOPMAPは更新されて更新されたページを反映しています。古いブロックと新しいブロックのブロックスタットは、新しい無効なページ数を反映するように更新されます。
ブロックレベルFTL
論理ブロック全体が物理ブロックにマッピングされます。論理ページ番号への上書きが発生した場合、ブロック全体が無効になり、古いブロックのすべてのエントリが新しいブロックにコピーされます。マップには、物理的なブロックマッピングから物理的なブロックマッピングのみが含まれています。
ハイブリッドレベルFTL
LBNをPBN値に保存しますが、論理ページ番号に上書きすると、同じブロックの場所の次の無料エントリで新しい物理ブロックが検索されます。論理から物理的なブロック数マッピングは、各ブロックスタット内に保存されます。ブロック全体の無効化は、ブロックに追加のブロックを書き込むスペースがもうない場合に行われます。
getNextPhysicalPage()map(lbn, pbn)getFreeBlock()getTargetBlock()GC(X)このコードは、貪欲なごみ収集ポリシーに従います。
ガベージコレクションは、物理ブロックのGC_Count%がファイルシステムで使用された後にデフォルトで行われます。 Garbage Collectionには、無効なページの最大数を含むブロックを選択し、宛先ブロック /フリープールブロックを選択し、有効なページをソースブロックから宛先ブロックに転送します。ソースブロックの物理ページは、マッピング中に再利用できるようになりました。
Invoke GC
Choose Victim block (blk.gc_count < curr_gc_count)
if not found; exit
Choose empty block (blk.gc_count < curr_gc_count)
if not found; check for Merge Block (explained below)
Move valid from Victim -> Empty
Mark Empty -> Valid
Mark Victim -> Empty
Update GC count of both blocks to curr_gc_count.
Continue.
マージブロックは、完全に空ではないが、汚れたブロックのすべてのエントリを保持するスペースがあるブロックです。空のブロックが見つからない場合は、マージブロックを選択し、すべての全体を無効にしてから、ダーティブロックのすべてのエントリとともに値をブロックに書き戻します。
./ftl.py 1 8 512 128 traces/page_GC and traces/block_GC
これにより、6ブロック、8ページのデバイスが作成され、最終的にブロック番号0に11〜17ブロックのブロックがあるトレースが実行されます。
./ftl.py 2 4 512 128 traces/block_GC
./ftl.py 1 8 512 128 traces/block_map