You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

fsync是否能保证后续读取来自磁盘而非内核缓冲区?

关于Linux fsync() 调用后内核缓冲区的行为

核心结论

调用 fsync() 成功返回后,内核会将对应文件的脏缓冲区刷新到磁盘,但并不会主动释放这些缓冲区。内核依然会把这些数据留在页缓存中,后续读取操作优先从缓存获取,而非直接访问磁盘。

具体细节

  • 未调用 fsync() 时,内核会根据内存压力等策略决定何时回收页缓存,但只要缓存未被回收,后续读取就会命中缓存。
  • fsync() 的设计目标仅保证数据持久化到磁盘,并不负责管理页缓存的生命周期。手册页未提及缓存释放,是因为这不属于它的职责范围——缓存管理是内核内存子系统的独立逻辑。
  • 对磁盘写入故障测试而言,若要确保后续读取直接从磁盘获取,不能依赖 fsync(),需要主动清理对应文件的页缓存,可通过以下方式实现:
    • 调用 posix_fadvise(fd, 0, 0, POSIX_FADV_DONTNEED):告知内核不再需要该文件的缓存,内核会在合适时机释放对应页缓存。
    • 调用 fdatasync() 配合上述缓存清理操作。
    • 卸载挂载点后重新挂载(仅适用于测试场景)。

内容的提问来源于stack exchange,提问作者Richard Parkins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 00:54:51