为什么不总是在“dd”中使用“oflag=direct”?

为什么不总是在“dd”中使用“oflag=direct”?

使用oflag=directin似乎总是比不使用它或使用etc. 来执行操作dd要快得多。pv

什么情况下我可以不是想用吗oflag=direct

答案1

就在我的头顶上:

  • 如果目标文件被另一个进程映射,则使用直接 IO 写入可能会导致数据丢失(通常是直接 IO 写入)。
  • 某些文件系统要么不支持直接 IO,要么无法与直接 IO 一起正常工作。第二种可能性是历史上 BTRFS 在某些情况下的情况,当使用直接 IO 时,有时会导致目标文件中的数据损坏。
  • 直接 IO 并不是普遍更快。这里有很多事情在起作用,但作为一般规则,直接 IO 速度较慢的常见情况是处理复制足够小的文件以适应系统写回缓存,以非零寻道延迟来减慢存储速度。
  • 有时,常规 IO 的副作用发生是令人希望的。这可能很有用,例如,如果目标文件位于慢速存储上并且您计划立即使用它,在这种情况下,不使用直接 IO 意味着至少部分文件数据可能仍位于页面缓存中,从而在以下情况下节省时间:随后读取该文件。如果您尝试进行性能基准测试,这一点也很重要,因为很多事情不使用直接 IO。
  • 如果您需要真正的可移植性,则不能依赖 的可用性oflags=direct,因为它是 Linux 特定的扩展。

相关内容