我读了一篇论文,并使用了冷缓存和热缓存这两个术语。我搜索了这个术语,但我找不到有用的东西(只有一个帖子here)。
这些术语是什么意思?
答案 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)
背景:
Cache
是一个小而快的memory
,有助于避免CPU
访问main memory
(更大更慢)以节省时间(cache
读取是~100 x
比main 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。
冷缓存:前端应用程序首次调用后端服务器。
暖缓存:前端首次获取数据后,将其保存在本地缓存中。因此,下次尝试调用后端时,它将从其本地缓存中获取项目。
答案 4 :(得分:0)
在多程序环境中,如果任务保留了之前执行的大部分工作集,则该缓存称为热缓存
没有以前执行的历史记录的缓存称为冷缓存