我试图用dd来测试我的ceph文件系统的性能。在测试过程中,我发现了一些令人困惑的东西,即使用oflag = dsync或conv = fdatasync / fsync的dd比使用oflag = direct的dd快10倍。
我的网络是2 * 10Gb
DataGrid
答案 0 :(得分:0)
为什么带有直接标志的dd比dsync
慢得多
因为odirect
仍然允许使用内核缓冲(它只会导致刷新+等待周期性完成),因此内核实际上会发送大量小的最佳大小的缓冲区 in在每1Gbyte强制同步之前并行(即队列深度将大于1)。当您指定odirect
时,您说“相信我的所有参数都是合理的,并且尽可能多地关闭内核缓冲”。在你的情况下,一个巨大的bs是无意义的odirect
因为你的磁盘的最大传输块大小(更不用说最佳大小)几乎肯定更小,因为你已经禁用了缓冲(通过使用odirect
)内核不能再通过在队列深度大于1的情况下发送I / O来解决问题。
TLDR;使用{{1}}井的要求是严格的,违反规则往往会导致可怕的性能或彻底破损。