为什么带有直接标志的dd比dsync慢得多

时间:2018-06-15 15:00:05

标签: linux filesystems ceph

我试图用dd来测试我的ceph文件系统的性能。在测试过程中,我发现了一些令人困惑的东西,即使用oflag = dsync或conv = fdatasync / fsync的dd比使用oflag = direct的dd快10倍。

我的网络是2 * 10Gb

DataGrid

1 个答案:

答案 0 :(得分:0)

  

为什么带有直接标志的dd比dsync

慢得多

因为odirect仍然允许使用内核缓冲(它只会导致刷新+等待周期性完成),因此内核实际上会发送大量小的最佳大小的缓冲区 in在每1Gbyte强制同步之前并行(即队列深度将大于1)。当您指定odirect时,您说“相信我的所有参数都是合理的,并且尽可能多地关闭内核缓冲”。在你的情况下,一个巨大的bs是无意义的odirect因为你的磁盘的最大传输块大小(更不用说最佳大小)几乎肯定更小,因为你已经禁用了缓冲(通过使用odirect)内核不能再通过在队列深度大于1的情况下发送I / O来解决问题。

TLDR;使用{{1}}井的要求是严格的,违反规则往往会导致可怕的性能或彻底破损。