【发布时间】:2015-10-04 09:10:39
【问题描述】:
考虑有 N 个文件要完全写入磁盘(即从所有文件缓冲区中刷新)。对于每个文件,我们写入少量(相对于 HDD 寻道时间)的数据,例如64KB,带有WriteFile,然后对该文件调用FlushFileBuffers,以确保该文件的数据完全刷新到硬盘。
如果我们按顺序逐个写入和刷新文件,那么我预计大约需要时间N*seekTime + N*writeTime,其中seekTime 是将硬盘驱动器磁头定位到正确扇区的时间(可能需要直到全盘旋转的时间),writeTime 是磁盘顺序写入 64KB 数据所需的时间。通过这种一对一的方法,我们没有给操作系统优化空间,因为我们定义了文件必须刷新的顺序。
在操作系统的一些支持下,可以通过重新排列文件写入和刷新的顺序来实现性能改进,以便考虑磁盘旋转(即磁头在磁盘上的当前位置)重新排列文件操作,以便从那些开始几乎不需要旋转(即最接近磁盘磁头当前位置)并以需要几乎完全旋转磁盘的那些结束。
问题是:操作系统(尤其是 Windows)是否提供这种优化?换句话说,是否可以通过在 N 个线程中并行运行文件写入和刷新操作来提高性能,每个文件一个线程?还是会导致额外的重新定位操作降低性能(作为硬盘的一种上下文切换)?
【问题讨论】:
-
对桡骨头运动进行了优化。操作系统不知道轴向位置。
标签: c++ multithreading performance winapi hard-drive