发布时间:2023-02-27 | 信息来源: | 发布作者:沃趣科技
前言
目前在主流存储中,使用的比较多的是机械硬盘和固态硬盘(SSD)。机械硬盘具有容量大,价格便宜,容错性好,寿命较长等优点;缺点是读写性能相对固态硬盘有比较大的差距。固态硬盘的优点是读写性能较好,特别是随机读写性能;缺点是价格比较昂贵,容量小,写入寿命有限,一旦损坏数据难以恢复等。因此,有些情况下我们希望结合两者优点,于是SSD缓存技术方案应运而生,SSD缓存的方案最终性能接近SSD的性能,使得我们可以用更少的成本得到较大的收益(高吞吐 / 低延迟)。
1、缓存技术介绍
2、缓存工作原理
说缓存之前先介绍几个名词,“冷数据”和“热数据”,我们经常访问的热点数据称为热数据,热数据存放在高速缓存(SSD)中,不经常访问的数据称为冷数据,存放在主存储(HDD)中,业务请求热数据会更快延迟更低。
脏数据&&刷脏:当业务进行更新,此时缓存中的数据和主存储中数据就不一致了,此时这个记录对应的缓存就叫脏数据。由缓存将数据写到主存储中的过程称为刷脏。
2.1 缓存如何加速读取操作
当读取请求到达存储器时,系统会在硬盘上找到所需的数据块并执行读取操作。如果重复对这些数据块的请求,系统会对SSD缓存进行临时副本,下一次读取操作将更快,因为它们是从缓存设备请求的,如图:
2.2 缓存如何加速写入操作
(1).写入策略
对于写入的操作有两种模式,Write Through和Write Back,简称WT和WB,WT模式会将数据进行镜像,分别写入缓存和主存储中,性能慢 / 延迟高,但是有更好的数据安全性。WB模式所有的数据先写入到缓存中,由于缓存设备速度快,写入操作和状态响应快速且延迟低。
(2).刷脏策略
WB模式写入缓存之后,那么如何对数据持久化呢,这就涉及缓存中的核心之一刷脏算法,这里介绍两个常见的刷脏算法,ACP(Active Cleaning Policy)积极的刷脏算法,时时刻刻都会进行刷脏,并且根据业务模型进行动态调控刷脏速率。第二种常见的是LRU算法,根据数据访问的频率给最近最少访问的数据先进行刷脏。
(3).淘汰策略
由于前面提到,SSD缓存比主存储HDD小很多,这样势必会带来一个问题,当缓存写满时怎么办?这涉及缓存中另一个核心算法淘汰算法,优先选择对缓存中的哪些数据进行刷脏从而保证缓存的性能,下面介绍几个常见的淘汰算法。
FIFO(先入,先出)——首先进入缓存的块首先消失,不考虑请求频率。
LRU(最近使用的最少)——请求日期最古老的块首先离开缓存。
LFU(最不常用的)——如果块的请求比其他块少,则首先离开缓存。
4).命中率
衡量缓存还有一个核心点是命中率,从程序设计的角度来讲,一个良好的计算机程序常常具有良好的“局部性”,也就是它们倾向于引用邻近于最近引用过的数据项的数据,或者最近引用过数据项本身。这种倾向性被称为局部性原理,是一个持久的概念,对硬件和软件系统的设计和性能有着极大的影响。那么正因为程序有“局部性”原理,对于缓存来说这些经常被访问的数据块被作为热点数据,访问热点数据的具有性能高延迟低的特点,是缓存技术的一个重要核心。所以,我们就需要有机制来防止热点数据被冲刷掉或者缓存被写满之后导致性能慢的问题。
虽然缓存写满的之后还是能够正常使用,但是性能和延迟都会大打折扣如下图所示,那么是否可以通过一些机制来控制缓存的写入?
下面以Intel开源缓存方案openCAS举例,主要提供了两种机制进行控制:
1、seq-cutoff机制
当检测到连续的IO大小达到一个阈值的时候就不会写缓存设备,直接写入后端存储设备,这样一方面保证了热数据一方面还防止缓存盘被写满。如下图上层fio用1M顺序写,seq-cutoff配置成1024M之后发现所有请求的IO达到阈值1024M之后的请求都写入到core device中(core device:sdd 、cache device:sde)
2、IO Class Configuration机制
3、常用术语表
总结
缓存技术允许您在处理混合工作负载时加快存储性能。对于硬盘阵列本身运行不够好的情况,这是一种简单且经济实惠的方法。在服务器任务和应用程序的多样性和复杂性时代,缓存越来越有吸引力。但仍然重要的是要记住,这项技术对于业务场景有局限性,它不可能是解决所有存储性能问题的通用解决方案。