Caching 关于文件系统缓存的一个问题

Caching 关于文件系统缓存的一个问题,caching,operating-system,filesystems,Caching,Operating System,Filesystems,当我在文件系统中读取一个大文件时,缓存是否可以提高读取速度 手术 我认为有两种不同的答案: 1.是的。因为缓存可以预取,所以性能得到了提高 2.没有。因为从缓存读取的速度比从缓存读取的速度快 磁盘,最后我们可以发现缓存没有帮助,所以读取速度也很慢 从磁盘读取的速度 哪一个是正确的?我怎样才能证明答案 [编辑] 另一个问题是: 我不确定的是 也就是说,当您打开缓存时,带宽将用于 1.预取 2.预取和读取 哪一个是正确的 而如果你 关闭缓存,磁盘的带宽仅用于读取 如果我关闭缓存并随机访问磁盘,所需的

当我在文件系统中读取一个大文件时,缓存是否可以提高读取速度 手术

我认为有两种不同的答案:

1.是的。因为缓存可以预取,所以性能得到了提高

2.没有。因为从缓存读取的速度比从缓存读取的速度快 磁盘,最后我们可以发现缓存没有帮助,所以读取速度也很慢 从磁盘读取的速度

哪一个是正确的?我怎样才能证明答案

[编辑]

另一个问题是:

我不确定的是 也就是说,当您打开缓存时,带宽将用于

1.预取

2.预取和读取

哪一个是正确的

而如果你 关闭缓存,磁盘的带宽仅用于读取


如果我关闭缓存并随机访问磁盘,所需的时间是否与打开缓存时按顺序读取的时间相当

1绝对正确。当代码处理已经接收到的数据时,操作系统可以从磁盘提取到缓存。是的,磁盘可能仍然是瓶颈-但您将不会有读取、处理、读取、处理、读取、处理,而是读取+处理、读取+处理、读取+处理。例如,假设我们有一个处理过程,它占用了一半的阅读时间。表示页面中的时间,我们可能会在没有预取的情况下进行此类活动:

Read
Read
Process
Read
Read
Process
Read
Read
Process
而对于预取,这一点被优化为:

Read
Read
Read     Process
Read
Read     Process
Read
         Process
基本上,总时间将是“读取整个文件的时间+处理最后一段数据的时间”,而不是“读取整个文件的时间+处理整个文件的时间”

测试它是很棘手的-你需要有一个操作系统,你可以调整或关闭缓存。另一种选择是更改打开文件的方式—例如,在.NET中,如果使用缓存打开文件,则更有可能执行正确的操作。尝试使用和不使用该选项


这主要是关于预取的——一般缓存(即使在数据交付到应用程序后仍保留数据)是另一回事,如果您想多次使用相同的数据,显然是一个巨大的胜利。还有一种“介于两者之间”的情况,应用程序只请求了少量数据,但磁盘读取了整个数据块-操作系统不会主动预取未请求的数据块,但是可以缓存整个块,这样如果应用程序从同一块请求更多数据,它就可以从缓存中返回数据。

1绝对正确。当代码处理已经接收到的数据时,操作系统可以从磁盘提取到缓存。是的,磁盘可能仍然是瓶颈-但您将不会有读取、处理、读取、处理、读取、处理,而是读取+处理、读取+处理、读取+处理。例如,假设我们有一个处理过程,它占用了一半的阅读时间。表示页面中的时间,我们可能会在没有预取的情况下进行此类活动:

Read
Read
Process
Read
Read
Process
Read
Read
Process
而对于预取,这一点被优化为:

Read
Read
Read     Process
Read
Read     Process
Read
         Process
基本上,总时间将是“读取整个文件的时间+处理最后一段数据的时间”,而不是“读取整个文件的时间+处理整个文件的时间”

测试它是很棘手的-你需要有一个操作系统,你可以调整或关闭缓存。另一种选择是更改打开文件的方式—例如,在.NET中,如果使用缓存打开文件,则更有可能执行正确的操作。尝试使用和不使用该选项


这主要是关于预取的——一般缓存(即使在数据交付到应用程序后仍保留数据)是另一回事,如果您想多次使用相同的数据,显然是一个巨大的胜利。还有一种“介于两者之间”的情况,应用程序只请求了少量数据,但磁盘读取了整个数据块-操作系统不会主动预取未请求的数据块,但是可以缓存整个块,这样如果应用程序从同一块请求更多数据,它就可以从缓存返回数据。

第一个答案是正确的


磁盘具有固定的底层性能,但这种固定的底层性能在不同的情况下有所不同。当您读取较长的数据段时(例如,当您提前缓存时),您可以从驱动器获得更好的实际性能。因此,缓存允许驱动器真正提高其实际性能。

第一个答案是正确的


磁盘具有固定的底层性能,但这种固定的底层性能在不同的情况下有所不同。当您读取较长的数据段时(例如,当您提前缓存时),您可以从驱动器获得更好的实际性能。因此,缓存允许驱动器真正提高其实际性能。

如果文件比内存大,那么它肯定没有帮助。

如果文件比内存大,那么它肯定没有帮助。

与.NET有一个关于此主题的讨论。基本的结果是,预取有帮助,每单位读取的处理量就越多。

对这个主题与.NET有着密切的联系。基本结果是预取有帮助,每单位读取的处理量越大。

在一般情况下,使用缓存会更快。需要考虑的几点:

  • 磁盘上的数据以曲面(也称为磁头)、磁道和块的形式组织。磁盘需要一些时间来定位读磁头,以便您可以开始读取磁道。现在你需要离那条轨道五个街区。不幸的是,您要求的顺序与它们在物理媒体上出现的顺序不同。缓存将通过将整个磁道读取到内存中(比您需要的块多得多),然后对其重新编制索引(当磁头开始读取时,它可能位于磁道上的任何位置,而不是第一个块的开始位置)来提供极大的帮助。如果没有这个,你就完了