問題タブ [fsync]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
93 参照

filesystems - 効率的なファイル システムの書き込みバリアをサポートする OS はどれですか?

ファイル システムまたはディスク ドライバーは、CPU または共有メモリ システムのメモリ フェンスのようなファイル システム変更フェンスの概念をサポートしていますか?

フェンスは、メモリ操作を分離する命令であり、フェンス イベントの後にグローバルに表示されるメモリ アクセスは、その前に発生するすべてのメモリ アクセスまで検出されません。

そのような機能は、効率的な方法でファイル コンテンツの変更 (およびレパートリーの変更) に使用できますか? もちろん、単純な解決策は、すべての書き込みが安定したストレージに書き込まれるまで待つことです。ただし、これはアプリケーションをブロックしており、多くの同期ポイントが必要な場合は非効率になる可能性があります。また、1 つの大きな書き込み (フェンスで区切られた多くの書き込みを含む) が完全にジャーナリングされたシステムで同じ制約を満たす場合、または最大の書き込みがディスク ドライバーによってアトミックであることが保証されている場合、多数の小さな個別の書き込みが発生する可能性があります。

ファイル システム ドライバーは、ファイル システム アクセス フェンスを使用して強制的に書き込みを行うことができますか? コンセプトは検討されていますか?

精度

質問の文脈は、複数のプロセスが際どい方法で同じファイルにアクセスするのではなく、データベースにデータを保存する 1 つのプロセスあり、プロセスの中断 (コンピューターのクラッシュであっても) が (2 つのフェンス間で) 変更のシーケンスを 1 つだけ残す必要があります。一部記載あり

0 投票する
1 に答える
354 参照

windows - Windows: ネットワークにマップされたドライブで FlushFileBuffers システム コールが失敗する

fsyncドキュメントの状態

fsync() を呼び出しても、ファイルを含むディレクトリ内のエントリがディスクに到達したことは必ずしも保証されません。そのためには、ディレクトリのファイル記述子に対する明示的な fsync() も必要です。

Linuxで行うのと同様に、WindowsでSMBを使用してディレクトリをネットワークマップドライブに同期しようとしてfsyncいます。

次の go コード スニペットは、ディレクトリがローカル ドライブに保存されている場合は正常に動作しますが、ネットワーク マップされたフォルダーにある場合は失敗します。

プログラムは失敗します

MSDN は、渡されるハンドルはファイルまたはボリュームのいずれかのハンドルである必要があると述べていますが、ディレクトリについては何も述べていません。 https://docs.microsoft.com/en-us/windows/desktop/api/FileAPI/nf-fileapi-flushfilebuffers

また、FlushFileBuffers は、ディレクトリ ハンドルを受け入れる関数としてリストされていません https://docs.microsoft.com/en-us/windows/desktop/fileio/obtaining-a-handle-to-a-directory

Invalid Device Requestまた、ネットワークにマップされたドライブで flushfilebuffers システム コールが失敗することにも気付きました

無題

問題は、Windows でディレクトリを同期するにはどうすればよいかということです。それとも、ウィンドウのバッファリングされた I/O は POSIX とは根本的に異なり、ディレクトリ内のファイルが変更されたときにディレクトリをフラッシュする必要はありませんか?