メモリファイルに対してfsync()を呼び出します。

メモリファイルに対してfsync()を呼び出します。

fsync(2) から:

fsync() transfers ("flushes") all modified in-core data of (i.e., modified
buffer cache pages for) the file referred to by the file descriptor fd to
the disk  device  (or  other permanent  storage  device)

fsyncはどのような影響を与えますか?FDインメモリAPIの1つを介して取得します。shm_open(3p)それとも `memfd_create(2)*?メモリオブジェクトへの変更を明示的にコミットする必要がありますか?

答え1

効果はありません。永久保存とは何の関係もありません。


歴史的に mmap() と read()/write() を混在させると、一貫性のない結果が生じる可能性があります。

最新のLinuxは、サポートされているすべてのCPUで正常に動作するように慎重に構成されています。システムがあまりにも曖昧であっても、ハードウェア関連のバグを発見することはまだ幸運ではないかもしれません。

重要なことは、POSIX準拠のオペレーティングシステムでは次のものを使用する必要があるかもしれません。同期()後で read() が一貫して動作するようにするには、ファイルのメモリマップに変更を書き込んでフラッシュします。 POSIXルールを理解するには、msync()のMS_INVALIDATEフラグとそのフラグの存在の意味を調べることが役に立ちます。

ただし、POSIX msync() は永続ストアに関連するマッピングにのみ適用されます。 「共有メモリオブジェクト」への影響は定義されていません。したがって、これは元の質問に答える非常にあいまいな方法になります。

また、POSIXと同じ名前のシステムコールを実装しても、必ずしもPOSIXと同じ保証を提供するわけではありません。 POSIXテストスイートには、実際には少数のオペレーティングシステムバージョンしか提出されていません。 (お金がかかる)。

関連情報