A.3. Fsync


Fsync は I/O 負荷の高い操作として知られていますが、これは完全に真実ではありません。
Firefox は、 ユーザーがリンクをクリックして新しいページに移動するたびに、sqlite ライブラリーを呼び出していました。Sqlite が呼び出すfsyncまた、ファイルシステム設定 (主にデータ順序モードの ext3) が原因で、何も起こらないときに長い遅延が発生しました。別のプロセスが同時に大きなファイルをコピーしていた場合、これには長時間 (最大 30 秒) かかることがあります。
ただし、他の場合では、fsyncまったく使用されていなかったため、ext4 ファイルシステムへの切り替えで問題が発生しました。Ext3 はデータ順モードに設定され、数秒ごとにメモリーをフラッシュしてディスクに保存しました。ただし、ext4 と laptop_mode では、保存の間隔が長くなり、システムが予期せずオフになったときにデータが失われる可能性がありました。現在、ext4 にはパッチが適用されていますが、アプリケーションの設計を慎重に検討し、使用する必要があります。fsync適切に。
次の設定ファイルの読み取りと書き込みの簡単な例は、ファイルのバックアップを作成する方法またはデータを失う方法を示しています。
/* open and read configuration file e.g. ./myconfig */
fd = open("./myconfig", O_RDONLY);
read(fd, myconfig_buf, sizeof(myconfig_buf));
close(fd);
...
fd = open("./myconfig", O_WRONLY | O_TRUNC | O_CREAT, S_IRUSR | S_IWUSR);
write(fd, myconfig_buf, sizeof(myconfig_buf));
close(fd);
より良いアプローチは次のとおりです。
/* open and read configuration file e.g. ./myconfig */
fd = open("./myconfig", O_RDONLY);
read(fd, myconfig_buf, sizeof(myconfig_buf));
close(fd);
...
fd = open("./myconfig.suffix", O_WRONLY | O_TRUNC | O_CREAT, S_IRUSR | S_IWUSR
write(fd, myconfig_buf, sizeof(myconfig_buf));
fsync(fd); /* paranoia - optional */
...
close(fd);
rename("./myconfig", "./myconfig~"); /* paranoia - optional */
rename("./myconfig.suffix", "./myconfig");
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.