gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 10:34:47 25 4
gpt4 key购买 nike

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

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

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

第一个 block 访问时间是否应该与有或没有标志相同,因为它没有被缓冲?另外,为什么使用标志后访问时间会下降?我期望它们保持不变,因为我们已经指定我们不需要缓冲。

最佳答案

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

这样的时间包括搜索目录结构(仅限第一次)以找到实际文件(这包括“磁头搜索”时间(这很长,因为它需要磁头的物理移动),

然后是磁盘上正确扇区的旋转时间,

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

这之后是到文件柱面实际开始的“磁头搜索”时间,

然后是“扇区搜索”时间以越过正确的扇区,

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

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

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

有了缓冲,后续访问时间会大大减少(在大多数读取中),因为实际传输将包括多个扇区,因此只是偶尔需要实际访问磁盘。

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

关于c - 使用和不使用 FILE_FLAG_NO_BUFFERING 的 NTFS 文件访问时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33324100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com