【问题标题】:Comparing time taken to read() from file system比较从文件系统读取()所花费的时间
【发布时间】:2016-07-25 13:29:18
【问题描述】:

我创建了一个程序来测量对文件执行 read() 所花费的时间,我这样做了几次以确定我的文件系统的块大小。

我的问题: 绘制完这些数据后,每次尝试时,无论我在每次迭代中读取的大小如何,与任何其他读取相比,第一次读取都需要更长的时间。我知道一旦一个块完成读取,在新块中进行下一次读取的时间将花费更多时间(我在我的情节中观察到),但第一次读取值也远高于此值。

有人有文件系统/操作系统吗?为什么会这样?

【问题讨论】:

  • 您的文件有多大?如果它们只有几 KB,它们可能仍被缓存在某个地方(级别缓存等)。
  • @Leandros 如果有足够的未使用内存可用,甚至千兆字节的文件也可以保存在页面缓存中。
  • @Leandros 我的文件是 3 MB。
  • @JohnDoe 将文件设为几 GB,正如 EOF 所说,您的操作系统可能会缓存最近使用的文件/区域。

标签: c operating-system filesystems


【解决方案1】:

我能想到可能出现这种情况的几个原因。 文件系统可能会缓存(预取)从磁盘读取的数据,因此即使它只向您的程序返回(例如)1 个块,它实际上可能已经从磁盘读取了多个块;这样下次您进行读取时,您实际上只是从缓存数据中提取更多内容。进行第一次读取也可能涉及读取头必须移动到文件的开头?这可能非常依赖文件系统。我认为缓存更可能是原因?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 2023-03-28
    • 2016-03-24
    • 2018-04-02
    相关资源
    最近更新 更多