2014-03-31 262 views
30

我看了一篇论文,用的是“cold cache”和“暖高速缓存”。我搜索,但我没有找到有用的东西。 “冷高速缓存”和“暖高速缓存”是什么意思?冷缓存和热缓存概念是什么意思?

我也访问this链接但我需要更多。

回答

55

TL; DR与汽车的冷发动机和暖发动机有相似之处。冷藏缓存 - 没有任何价值,并且不能给你任何加速,因为它是空的。温暖的缓存有一些价值,可以给你加速。

缓存是一种保存一些值(inode,内存页,磁盘块等)以加快查找的结构。

缓存通过在快速搜索数据结构(哈希表,B +树)或更快的访问介质(RAM内存vs HDD,SSD vs 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毫秒!

将其缓存称为热缓存 - 缓存中包含一些可让您缓存命中的值。

+2

这很好解释。非常感谢! –

25

enter image description here

背景:

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


,你的问题:

冷缓存:cache为空或有不相关的数据,从而使CPU需要为你的程序的数据需求做从main memory慢读。

热缓存:cache包含相关数据,并为你的程序中的所有读取距离cache本身满意。

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

2

非常好的回复@avd。

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

热缓存另一方面,维护您的系统需要的有用数据。它可以帮助您实现更快的处理;大多数情况下它用于接近实时处理请求。有些系统/流程在开始迎合用户请求之前需要特定的信息;例如在可以处理用户请求之前需要市场数据/风险信息/安全信息等的交易平台。如果每个请求都需要查询数据库/服务以获取此重要信息,那么这将非常耗时。所以缓存它是一个好主意。并且这可以通过热缓存来实现。 这个缓存应该定期维护(更新/删除等);否则在整个过程中,缓存可能会随着不必要的数据增长,您可能会注意到性能下降。

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