写入文件,对速度结果感到困惑

时间:2015-03-25 11:22:55

标签: file unix alignment writing

首先我提到这是在基于unix的系统上完成的。对于作业,我被要求使用不同的方法模拟对128MB文件的写入。首先写入文件中对齐的随机位置(lseek到写入大小的倍数),改变写入大小(1MB,256KB,64KB,16KB,4KB),并保持写入直到写入128MB。然后使用O_DIRECT标志执行相同的操作,最后使用没有标志的未对齐位置再次执行它。

我得到的结果是对于对齐+ O_DIRECT写入,减小写入大小会大大降低性能,这是可以理解的,因为使用O_DIRECT它会以较小的写入大小直接访问磁盘。

使用未对齐写入,减少写入大小会再次降低性能,这是有意义的,因为我们对文件中的不同位置进行了更多写入操作,然后在刷新高速缓存时,在物理写入期间,磁盘可能来回传输扇区之间写入数据。更多的写作,更多的来回。

让我困惑的结果是没有O_DIRECT标志的对齐写入。这次针对较小的写入大小,性能急剧增加,32,678个4KB写入比128个1MB写入快得多。我无法弄清楚会导致这种增加的原因。我还应该添加我正在使用的unix计算机是一个远程计算机,我不知道它的规格,即它有什么样的硬盘,它的扇区大小等等。我想我还应该补充说,编写未对齐和对齐的代码完全相同,唯一的变化就是lseek收到的位置。

我考虑过一件事,如果物理扇区大小为4KB,并且PC有足够的RAM,则所有写入操作都可以缓存在页面中然后刷新。然后,如果磁盘从最小的地址变为最大的地址,它可以逐个扇区前进,因为它是对齐的,这可能意味着它可以一次写入所有内容。

我很确定我愚蠢地错过了一些重要的事情,如果有人能指出我正确的方向来理解这一点,我会很高兴,谢谢!

0 个答案:

没有答案
相关问题