使用和不使用FILE_FLAG_NO_BUFFERING的NTFS文件访问时间

时间:2015-10-24 22:38:01

标签: c windows time ntfs

我正在尝试对NTFS的文件读取时间(顺序访问)进行基准测试。我的代码获取一个开始时间,执行大小等于4096字节的读取(系统上的NTFS的簇大小)并记录结束时间。然后存储两次之间的差异并重复该过程直到到达文件结尾。我目前使用的文件大小是40K,所以我得到10个时差值。

当访问打开的文件(使用CreateFile)而没有FILE_FLAG_NO_BUFFERING时,第一个块的访问时间接近30微秒,后续访问时间下降到大约7微秒(由于高速缓存)。

使用FILE_FLAG_NO_BUFFERING时,第一个块的访问时间接近21毫秒,后续访问时间下降到约175微秒。

第一个块的访问时间是否与标志相同或不相同,因为它没有缓冲?另外,为什么在使用标志后第一次访问时间会下降?我期待它们保持不变,因为我们已经指定我们不想要缓冲。

1 个答案:

答案 0 :(得分:1)

除其他事项外,访问时间还包括实际数据传输时间旁边的其他几个(长期)因素。

此类时间包括搜索目录结构(仅限第一次)以查找实际文件(这包括'头部搜索'时间(这需要很长时间,因为它需要头部的物理移动),

然后旋转时间来克服磁盘上正确的扇区,

然后是实际的数据传输时间。

接下来是文件柱体实际开始的“头部搜索”时间

接着是“寻求部门”的时间来克服正确的部门,

然后是实际的数据传输时间。

后续读取将不包括访问目录信息。

任何访问都可以(但不总是)包括一些“头部搜索”时间(长度不同,取决于磁头当前所在的位置以及所需数据的位置。

通过缓冲,后续访问时间大大减少(大多数读取),因为实际传输将包含多个扇区,因此只需偶尔需要实际访问磁盘。

当没有缓冲时,很大程度上取决于磁盘本身是否执行任何缓冲(现在,大多数都执行本地缓冲)访问磁盘缓冲区中已有的数据会消除所有寻道时间(磁头和扇区)转移得快得多。