66

我读了一篇论文,它使用了术语冷缓存热缓存。我用谷歌搜索了这个术语,但没有找到有用的东西(这里只有一个线程)。

这些术语是什么意思?

4

5 回答 5

113

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(缓存命中)!现在你有了启动磁盘块,所以你跳过读取超级块并开始读取文件本身!您刚刚节省了 10 毫秒!

该缓存称为热缓存- 具有一些缓存命中值的缓存。

于 2014-03-31T08:34:37.377 回答
39

在此处输入图像描述

背景:

Cache是一个小而快memory,这有助于避免CPU访问main memory(更大和更慢)以节省时间(cache读取~100 x比读取更快main memory)。但这仅在您的程序需要的数据已经cached(从main memoryinto读取cache)并且有效的情况下才有帮助。此外,cache随着时间的推移填充数据。因此,cache可以是:
1. 为空,或者
2. 可以包含不相关的数据,或者
3. 可以包含相关的数据。


现在,对于你的问题:

冷缓存:cache为空或有无关数据时,需要根据您的程序数据要求CPU进行较慢的读取。main memory

热缓存:cache包含相关数据,并且程序的所有读取都来自cache自身。

所以,热缓存是可取的,冷缓存不是。

于 2014-04-01T00:58:43.623 回答
5

非常好的回复@avd。

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

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

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

于 2015-11-19T12:23:29.407 回答
0

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

没有先前执行历史的缓存称为冷缓存

于 2019-12-30T06:22:12.217 回答
0

Web前端开发中也有类似的概念,现在几乎所有好的js前端框架都做WarmCaching。

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

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

参考:在前端缓存数据

于 2019-10-11T21:37:02.287 回答