次のコード スニピットをご覧ください。
f = open("/mnt/remoteserver/bar/foo.bin", O_RDONNLY);
while (true)
{
byteseread = read(f, buffer, 1000);
if (bytesread > 0)
ProcessBytes(buffer, bytesread);
else
break;
}
上記の例では、リモート ファイル foo.bin が 1MB で、これまでクライアントからアクセスされたことがないとします。つまり、ファイル全体を取得するために「読み取り」を約 1000 回呼び出すことになります。
さらに、ディレクトリがクライアントにマウントされているサーバーがローカルではなくインターネット上にあるとします。クライアントへの帯域幅は高速ですが、待ち時間が長くなります。
すべての「読み取り」呼び出しは、サーバーへの往復を呼び出して、さらにデータを要求しますか? または、クライアント/サーバープロトコルは、リモートファイルの後続の読み取りがしばしばシーケンシャルであることを認識し、そのため、アプリケーションが実際に read() 呼び出しを行う前に後続のブロックがプッシュダウンされます. したがって、データがプリフェッチされてキャッシュされているため、後続の読み取り呼び出しはより高速に戻ります。
最新のネットワーク ファイル システム プロトコル (NFS、SMB/Samba、その他のプロトコル) は、このような最適化を行いますか? このように最適化されたインターネット用に調整されたネットワーク ファイル システム プロトコルはありますか?
私は、インターネットを介したネットワーク ファイル システムの実装を含む可能性のある個人的なプロジェクトを調査しています。ファイル I/O の往復回数を減らすことができれば、パフォーマンスが向上するのではないかと思いました。