linux - fsync 系统调用在 Linux 中如何工作?

标签 linux

当 write 调用返回时,数据被复制到内核管理的某个页面上。该页面可以包含来自多个进程的写入。因此,当其中一个应用程序发出 fsync 调用时,是否会导致刷新整个页面,这意味着也刷新其他应用程序数据,但调用 fsync 的进程会产生成本。这是正确的吗?

最佳答案

fsync 对单个文件进行操作。它将刷新对该文件所做的所有 更改。如果多个进程正在写入单个文件,则进行 fsync 调用的进程将暂停,直到所有更改都写入磁盘。

当一些日志文件系统发挥作用时,这会变得更加复杂。例如,具有“有序”模式的 ext3 和 ext4(在较小程度上)需要在日志中的 fsync 文件之前刷新对所有文件的所有更改。

这意味着如果程序一直在写入大型数据库或大型日志文件或视频文件,然后您fsync一个两行配置文件,您的fsync 必须等待所有这些兆字节的数据被写入才能返回。

这就是我在“回写”模式下运行 ext4 的原因,这可能会在崩溃后产生一些令人不快的后果,例如文件大小正确但填充了零。但在正常操作中,“回写”要快得多,我觉得这种权衡是值得的。

关于linux - fsync 系统调用在 Linux 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13995466/

相关文章:

linux - 通过 SSH 连接到 EC2 实例时突然出现错误

java - 来自进程 id pid 的 LInux java 类

linux - 尝试静态链接 Boost

linux - 是否可以在 Linux 上为其他平台创建二进制文件?

linux - 如何在可视模式下用 HTML 标签重复 VIM 环绕

linux - 使用 nodebox 作为 python 3.5 的模块

Linux CentOS 服务器启动脚本 : Minecraft Server

linux - 有条件地将行附加为列 bash 脚本

linux - 我可以使用 Google Earth Server 作为 openLayers 的 basemap 吗?

python - 在 django 中不使用交互式 python shell 将值插入数据库表