我发现同步IO在新内核上变得慢得多。我在 CentoOs(2.6),Fedora20(3.11),Ubuntu12(3.2)上尝试了以下命令。
echo 0 > test
dd if=/dev/zero of=test bs=1024 count=200 oflag=dsync
2.6的速度约为1MB / s,新内核的速度仅为25kB / s左右。
我有一个在C函数中调用sync()
的CFD代码。通常代码在旧内核上运行得非常快,但现在在较新的操作系统上运行得慢得多。我很好奇Linux开发人员对sync()
所做的工作。另一个可能的原因不是内核版本,而是不同操作系统使用的文件系统。
此时我的代码需要sync()
,所以我可以像ioctl()
那样调整一下来加快速度吗?
任何评论都非常感谢。
答案 0 :(得分:2)
sync()
的表观性能受系统中安装的内存量,磁盘I / O的使用模式(包括驱动器的缓存,DMA控制器等)的影响很大,以及磁盘驱动器的速度。
如果不严格控制所有这些变量,当您认为只更改内核时,将一个系统与另一个系统进行比较是毫无意义的。
新硬件看起来让事情变慢的效果是有道理的。当存在250 MB的积压(因为系统只有2 GB的RAM)时,而不是内核刷新挂起的写入,它现在可以将其推迟到16 GB的积压,因为较新的系统具有64 GB的RAM。