1

ファイル I/O (読み取り、書き込み) と計算を実行するアルゴリズムがあります。

テープに書き込む (読み取らない) 場合、アルゴリズムはうまく機能します。テープから読み取る (書き込みなし) と、パフォーマンスが低下します。テープを方程式から除外すると (I/O 用のディスクのみ)、うまく機能します。

今、理解しようとしている比較的単純なケースに要約しました。

セットアップは、テープ上の単一の 20 GB ファイルです。このファイルをブロック単位で順番に読み込んでいます。

テスト アルゴリズムは次のようなものです。

while (fileRemaining)
{
    ReadBlock(blockSize);
    Sleep(sleepTime); // this is to mimic computation time
}

いくつかの観察:

  • 8K の blockSize と 0 の sleepTime を使用すると、スループット (データ読み取り/秒) は良好です。さらに、テープドライブは常にノイズを発しています。
  • 8K の blockSize とゼロ以外の sleepTime (1ms であっても) を使用すると、スループットがひどく低下します。データは引き続き読み取られますが、テープ ドライブから定期的にノイズが発生することはありません。時折音を立てながらしばらく静かになります。
  • 2M の blockSize と 100ms の sleepTime を使用すると、スループットは良好です。テープドライブは常にノイズを発生させます (ただし、速度が遅くなったように聞こえますか?)。
  • Windows エクスプローラーは、ファイルをテープからディスクに良好なスループットで転送できます。

ここで良好な読み取りパフォーマンスを得るにはどうすればよいですか?

他の謎も理解できるように助けていただければ、なぜスリープの存在がスループットを大幅に低下させるのでしょうか (これを知っておくと、アルゴリズムを再考するのに役立つ可能性があります)。一度にテープから読み取る「最適な」量は? テープ ドライブからの異音は、注意する必要がありますか?

4

1 に答える 1

1

ドライブが使用しているテープメディア、ドライブ、またはインターフェイスタイプの詳細は指定していません。

LTO4 / 5のような現在のテクノロジーは、約240〜280MB/秒でデータを配信できます。パフォーマンスは、LTOに最適なブロックサイズを読み取ることで達成されます。これは64KBだと思います。256KBまでのブロックサイズは大きな影響はありませんが、小さなブロックをたくさん読み取ると影響があります。より大きなブロックで読み取り/書き込みを行い、データを読み込んだら、プログラム内でデータを分割します。データがすでに8KBブロックでテープにある場合は、ドライブを固定ブロックモードに設定し、複数の8KBブロックを読み取ります。

テープドライブは、データを読み取るために特定の動作速度に到達する必要があります。データがドライブから十分な速度でストリーミングされない場合、ドライブは速度を落とし、停止し、巻き戻し、再配置し、速度を上げてから、読み取りを再開する必要があります。この停止/開始は、パフォーマンスに大きな影響を与えます。LTOは、さまざまなテープ速度で読み取ることができるようにすることでこれを補おうとしますが、制限があります。

非同期I/Oを使用すると、速度をさらに向上させることができますが、このアプリケーションではこれは必要ないと思います。

于 2012-05-16T23:48:59.933 に答える