为什么dd与“直接”(O_DIRECT)标志显着更快?

我有一个带有24个驱动器(两组12个)的RAID50configuration的服务器,如果我运行:

dd if=/dev/zero of=ddfile2 bs=1M count=1953 oflag=direct 

我得到:

 2047868928 bytes (2.0 GB) copied, 0.805075 s, 2.5 GB/s 

但是,如果我运行:

 dd if=/dev/zero of=ddfile2 bs=1M count=1953 

我得到:

 2047868928 bytes (2.0 GB) copied, 2.53489 s, 808 MB/s 

我知道O_DIRECT导致页面caching被绕过。 但据我所知,绕过页面caching基本上意味着避免一个memcpy。 使用带宽工具在我的桌面上进行testing我有一个最坏的情况,连续内存写入带宽为14GB / s,我想象在更新的更昂贵的服务器上,带宽必须更好。 那么为什么一个额外的memcpy导致> 2倍的放缓呢? 使用页面caching的时候真的有更多的参与吗? 这是非典型的吗?

Solutions Collecting From Web of "为什么dd与“直接”(O_DIRECT)标志显着更快?"