我正在尝试对NTFS的文件读取时间(顺序访问)进行基准测试。我的代码获取一个开始时间,执行大小等于4096字节的读取(系统上的NTFS的簇大小)并记录结束时间。然后存储两次之间的差异并重复该过程直到到达文件结尾。我目前使用的文件大小是40K,所以我得到10个时差值。
当访问打开的文件(使用CreateFile
)而没有FILE_FLAG_NO_BUFFERING
时,第一个块的访问时间接近30微秒,后续访问时间下降到大约7微秒(由于高速缓存)。
使用FILE_FLAG_NO_BUFFERING
时,第一个块的访问时间接近21毫秒,后续访问时间下降到约175微秒。
第一个块的访问时间是否与标志相同或不相同,因为它没有缓冲?另外,为什么在使用标志后第一次访问时间会下降?我期待它们保持不变,因为我们已经指定我们不想要缓冲。
答案 0 :(得分:1)
此类时间包括搜索目录结构(仅限第一次)以查找实际文件(这包括'头部搜索'时间(这需要很长时间,因为它需要头部的物理移动),
然后旋转时间来克服磁盘上正确的扇区,
然后是实际的数据传输时间。接下来是文件柱体实际开始的“头部搜索”时间
接着是“寻求部门”的时间来克服正确的部门,
然后是实际的数据传输时间。
后续读取将不包括访问目录信息。
任何访问都可以(但不总是)包括一些“头部搜索”时间(长度不同,取决于磁头当前所在的位置以及所需数据的位置。
通过缓冲,后续访问时间大大减少(大多数读取),因为实际传输将包含多个扇区,因此只需偶尔需要实际访问磁盘。
当没有缓冲时,很大程度上取决于磁盘本身是否执行任何缓冲(现在,大多数都执行本地缓冲)访问磁盘缓冲区中已有的数据会消除所有寻道时间(磁头和扇区)转移得快得多。