私は、シーケンシャルに整数を生成する非常にレイテンシに敏感なルーチンを持っていますが、クラッシュや再起動の際に最後に生成されたものをディスクに格納する必要があります。32ビット整数をディスクに格納するための絶対的な最速の方法は?
現在、ファイルの先頭にシークしてから整数を書き出し、新しいintが生成されるたびにフラッシュします。書き込みは、少なくともバッテリバックアップのコントローラキャッシュに当たるようにフラッシュが必要です。
シークはかなりコストがかかるので、私はちょうど4バイトを追加することを考えていました。そして、リカバリが必要であれば、最後まで探して最後の4バイトを読みます。この前のステートメントは、明らかに、他のディスクアクティビティがあまり起こっていないと仮定しているため、書き込みヘッドは理想的にはファイルの最後にとどまるべきです。
数字は通常10,000,000を上回らないので、40MBはそれほど悪くありません。
完全性を犠牲にすることなく最小待ち時間を達成する方法についてのアドバイスはありますか? Linuxの2.6+
は、データベースのトランザクションログとまったく同じように聞こえます。あなたは確かにあなたは車輪を再発明しようとしていないのですか? –
ディスクハードウェアに非常に近い「組み込みシステム」で動作している場合を除き、ヘッドがディスク上の特定の場所に留まることは保証されません。 Linuxでは、ディスク全体を割り当ててrawデバイスファイルに書き込むことで、これを実現できます。しかし、@Mitchが指摘しているように、あなたは古い車輪を再発明しているように聞こえます。 –
4バイトのシークはドライブにヒットしません。多かれ少なかれカーネルの減算にすぎません。 – nos