ファイル 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 エクスプローラーは、ファイルをテープからディスクに良好なスループットで転送できます。
ここで良好な読み取りパフォーマンスを得るにはどうすればよいですか?
他の謎も理解できるように助けていただければ、なぜスリープの存在がスループットを大幅に低下させるのでしょうか (これを知っておくと、アルゴリズムを再考するのに役立つ可能性があります)。一度にテープから読み取る「最適な」量は? テープ ドライブからの異音は、注意する必要がありますか?