标准答案

  1. 文件读取可能先命中 page cache,未命中时才触发存储 I/O;写入的 dirty page 由内核按策略回写。
  2. 缓存热度、回写压力和内存回收会改变延迟,压测必须说明是否冷缓存、数据集大小和持久化要求。
  3. fsync 等操作要求更强的持久化语义,代价取决于文件系统、设备和挂载配置,不能用普通 write 延迟替代。
  4. 排查要同时看应用延迟、iostat、回写、队列和数据持久化语义。

题目解析

page cache 让读写先在内存中完成,后续由内核异步回写,从而减少同步设备访问;它不等同于业务缓存,也不自动提供数据库事务语义。write 成功通常表示数据已交给内核,是否已经写入稳定存储要看 fsync、文件系统、存储设备和应用协议的保证。

缓存命中率、脏页比例、writeback 和设备延迟要结合观察。手工 drop_caches 会改变测试条件、造成 I/O 峰值,不能用清空缓存后的单次结果代表线上性能;业务需要的是明确的持久化边界和恢复验证。

常见误区

  • 误区:write 返回成功就等同于数据已落盘。改正:根据应用和文件系统语义使用 fsync/fdatasync 或数据库自身的提交保证。
  • 误区:用清空 page cache 后的结果代表所有线上读取。改正:分别测冷缓存、热缓存和真实工作集,避免把诊断动作当成常态方案。

作者信息