冷缓存和热缓存概念是什么意思?

时间:2014-03-31 07:45:45

标签: caching linux-kernel filesystems ext2

我读了一篇论文,并使用了冷缓存热缓存这两个术语。我搜索了这个术语,但我找不到有用的东西(只有一个帖子here)。

这些术语是什么意思?

5 个答案:

答案 0 :(得分:77)

TL; DR 与冷车和汽车发动机有类比。冷缓存 - 没有任何值,也不能给你任何加速,因为它是空的。暖缓存有一些值,可以为您提供加速。

缓存是一种结构,它包含一些值(inode,内存页,磁盘块等)以便更快地查找。

缓存通过在快速搜索数据结构(哈希表,B +树)或更快的访问媒体(RAM内存与HDD,SSD与HDD)中存储某种短引用来工作。

为了能够快速搜索,您需要使用缓存来保存值。我们来看看例子。

说,你有一个带有一些文件系统的Linux系统。要访问文件系统中的文件,您需要知道文件在磁盘上的起始位置。此信息存储在inode中。为简单起见,我们说inode表存储在磁盘上的某个地方(所谓的“超级块”部分)。

现在想象一下,你需要读取文件/ etc / fstab。要做到这一点,你需要从磁盘读取inode表(10毫秒)然后解析它并获取文件的起始块,然后自己读取文件(10毫秒)。总计~20ms

这是太多的操作。所以你在RAM中以哈希表的形式添加一个缓存。 RAM访问速度为10ns - 速度提高了1000(!)倍。该哈希表中的每一行都包含2个值。

(inode number or filename) : (starting disk block)

但问题是,一开始你的缓存是空的 - 这种缓存称为冷缓存。要利用缓存的好处,您需要使用一些值填充它。怎么会发生?当您在寻找某个文件时,您会查看您的inode缓存。如果你没有在缓存中找到inode(缓存未命中),你会说'好',并使用inode表读取,解析它并读取文件本身来完成读取周期。但在解析部分后,您将保存inode编号并在缓存中解析启动磁盘块。而且这种情况一直在继续 - 你试图读取另一个文件,你看缓存,你得到缓存未命中(你的缓存很冷),你从磁盘读取,你在缓存中添加行。

因此,冷缓存不会为您提供任何加速,因为您仍在从磁盘读取数据。在某些情况下,冷缓存会使您的系统变慢,因为您正在进行额外的工作(查看表中的额外步骤)来预热缓存。

一段时间后,你的缓存中会有一些值,有时候你会尝试读取文件,你会在缓存和BAM中查找!你找到了inode(缓存命中)!现在你已经启动了磁盘块,所以你跳过阅读超级块并开始自己读取文件!你刚刚保存了10ms!

它称为热缓存的缓存 - 缓存带有一些值,可以为您提供缓存命中。

答案 1 :(得分:30)

enter image description here

背景:

Cache是一个小而快的memory,有助于避免CPU访问main memory(更大更慢)以节省时间(cache读取是~100 xmain memory的读取速度快cached。但这只有在程序需要的数据为main memory(从cache读取到cache)并且有效时才有用。此外,随着时间的推移,cache会填充数据。因此,cache可以是:
 1.空,或  2.可以包含不相关的数据,或者  3.可以包含相关的数据。


现在,问题:

冷缓存:当CPU为空或包含无关数据时,main memory需要对cache的程序数据执行较慢的读取操作要求。

热门缓存:当cache包含相关数据时,{{1}}本身的所有读取都已得到满足。

因此,热缓存是可取的,冷缓存不是。

答案 2 :(得分:3)

非常好的回应@avd。

冷缓存只是一个空白缓存或具有陈旧数据的缓存。

另一方面,

热缓存可维护系统所需的有用数据。它可以帮助您实现更快的处理;它主要用于近乎实时的请求处理。在开始迎合用户请求之前,有些系统/流程需要一些方便的信息;例如,在处理用户请求之前需要市场数据/风险信息/安全信息等的交易平台。如果对于每个请求,进程必须查询DB /服务以获取此关键信息,那将是非常耗时的。所以缓存它是个好主意;这可以通过Hot Cache实现。 应定期维护此缓存(更新/删除等);否则,在这段时间内,您的缓存可能会随着不必要的数据而增长,并且您可能会注意到性能下降。

要创建热缓存,一种方法将是一个懒惰的缓存,我的意思是,当你得到请求时,你填充cahce;在这种情况下,初始请求会很慢,但后续的请求会更快。另一种方法是在进程启动时(或在用户请求开始进入之前)加载数据并维护缓存直到进程生效。

答案 3 :(得分:0)

Frontend Web开发中有一个类似的概念,如今,几乎所有好的js前端框架都进行WarmCaching。

冷缓存:前端应用程序首次调用后端服务器。

暖缓存:前端首次获取数据后,将其保存在本地缓存中。因此,下次尝试调用后端时,它将从其本地缓存中获取项目。

参考:Caching Data in frontend

答案 4 :(得分:0)

在多程序环境中,如果任务保留了之前执行的大部分工作集,则该缓存称为热缓存

没有以前执行的历史记录的缓存称为冷缓存