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