0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

聊聊如何实现一种闪存缓存设计

SSDFans 来源:SSDFans 2023-08-29 09:01 次阅读

01背景

许多web服务需要对数十亿个小对象实现快速访问,而每个小对象只有几百个字节。为了实现这一点同时考虑实际生产效益,缓存系统必须做到同时低成本,大容量与高性能。DRAM与NVM虽然性能好,但容量小,价格过于高昂。而闪存技术的发展使得闪存兼具性能与成本的优势。然而,闪存作为小对象缓存也面临着严重的寿命问题,这与闪存的特性有关。闪存读写的最小单位是页面(KB级粒度),而小对象通常不到一百个字节。因此,闪存缓存系统的简单部署势必会导致严重的写放大现象,加剧磨损问题,降低固态硬盘的使用寿命。

02问题

1.传统的缓存策略

a)Log-structure cache:该策略将数据顺序批量写到闪存上,可以有效减小写放大现象。为了记录对象在闪存中的位置,每个对象需要在内存中保留一个索引。对于一个比较大的工作集,数十亿个对象索引的内存开销巨大。

b) Set-associative cache:该策略根据对象的键值将对象存放到不同的set中,就像CPU的cache,利用对象的键值来确定对象的实际存放位置,消除了内存索引的开销。但是该策略会将多余的字节写入闪存,每个对象的修改都需要重写整个闪存页面,严重增加了闪存的写入量。

2. 闪存缓存的写放大

a) Device-level write amplification:设备级写放大发生在闪存转换层(FTL),即闪存内部的写入量超过主机端的写入量。当闪存内部空闲空间不足时,FTL除了应对主机端的写入,还需要执行垃圾回收来把部分有效页面迁移到新的块内。

b) Application-level write amplification:应用级写放大是指应用程序需要重写一些已经存在的数据。当一个页面中的部分对象需要更新时,闪存需要读出整个页面,修改后再进行重新写操作。

小对象使得闪存缓存系统极具挑战性,在存储设备中需要单独记录数十亿个小对象,可能需要巨大的元数据索引结构,消耗大量的内存资源;如果索引位于闪存上,又会引入额外的写放大现象。先前的工作没有解决如何以低成本在闪存中缓存小对象的问题,log-structured cache需要过多的DRAM,而set-associative cache 会带来严重写放大问题。

03设计

Kangaroo是一种闪存缓存设计,其针对数十亿个小对象的场景进行了优化。它的设计目的是最大限度地提高命中率,同时最大限度地减DRAM 的使用和闪存写入。Kangaroo 采用分层设计,跨内存和闪存,将log-structured cache与set-associative cache结合。为了减少闪存的写放大,Kangaroo利用Klog组件去缓存最近写入的对象;为了减少DRAM的索引开销,Kangaroo 利用Kset组件来缓存绝大多数对象。同时再Klog向Kset的转化过程中,kangaroo利用了哈希冲突的特点,当大量的对象被映射到同一个Kset时,这些对象会批量写入Kset,既提升了性能又减小了闪存的写放大现象。

af018a2e-45fc-11ee-a2ef-92fbcf53809c.png

图一:kangaroo概览

Kangaroo主要通过以下三个策略来减少闪存写入,减小内存开销,提高缓存命中率。

1. Partitioned Klog:Klog内部结构为多个分区,每个分区有自己独立的日志结构和DRAM索引结构。同一个Set的所有对象都会位于同一个分区表。利用hash冲突的特点,每个对象索引的next指针指向同一个set的下一个对象索引。采用拉链法解决哈希冲突使得Kangaroo可以高效的遍历位于同一个set的对象,从而实现批量的写入,减小写放大。

af1fbd78-45fc-11ee-a2ef-92fbcf53809c.png

图二:KLog

2. KlogàKset:当数据从Klog向Kset迁移时,Kangaroo利用准入策略对对象进行筛选。当每次待写入的对象数量少于阈值时,Kangaroo会丢弃该数据,多于阈值时才允许对象从Klog迁移到 Kset中。采用一个合适的准入阈值可以使得该策略有效减小应用级写放大现象。此外,热点数据如果没有发生哈希冲突,可能会被剔除。Kangaroo为了解决这一问题,会使得热点数据重新进入DRAM buffer,等待哈希冲突,提高缓存的命中率。

af53f188-45fc-11ee-a2ef-92fbcf53809c.png

图三:准入阈值对写放大的影响

3. RRIParoo:Kangaroo会对Kset中的对象进行管理,决定需要剔除的数据。传统的驱逐策略通常有较多的DRAM开销,而RRIParoo给每个对象分配1bit,当对象最近被访问过,该位置为0;同时结合经典的RRIP缓存替换策略来智能选择需要驱逐的数据。

最后,简单介绍下Kangaroo的基本操作流程,如图四。

1. 查找

首先在DRAMcache中查找对象,若命中则返回,若缺失则进入Klog中查找;若命中则返回,若缺失则查找Kset的布隆过滤器;若存在则查找Kset,若找到则返回,若缺失或假阳性则从底层数据库中获取数据。

2. 插入

首先数据写入到DRAMcache中,其有一定的概率会直接丢弃,或进入Klog;若进入Klog,则可能发生Klog到Kset的迁移。若未达到准入的阈值,则数据被丢弃,若达到准入阈值,则修改布隆过滤器标志位,并把数据写入到Kset中。

af84b750-45fc-11ee-a2ef-92fbcf53809c.png

图四:Kangaroo操作流程

04实验效果

论文作者团队中将 Kangaroo 实现为CacheLib 中的一个模块,并用真实的设备,Facebook和Twitter的真实负载进行了性能测试。实验中Kangaroo的基本配置参数如下表。

afabcc8c-45fc-11ee-a2ef-92fbcf53809c.png

表一:kangaroo实验配置

实验人员首先限制了DRAM的使用,从图五中我们可以发现,LS策略由于需要大内存来存放索引,因而随着内存的增加,缓存缺失率下降;而SA策略基本不需要DRAM资源,性能随着内存容量的影响不大;而Kangaroo能以以极小的内存开销实现了较低的缓存缺失率。

afcd067c-45fc-11ee-a2ef-92fbcf53809c.png

图五:限制内存使用场景下的缓存缺失率

下图显示了三种策略在Facebook连续7天的负载下的表现,实验人员在这组实验中限制了闪存的最大写入速度。Kangaroo的缓存缺失率与 SA 相比减少了 29%,与 LS相比减少了 56%。这是因为 Kangaroo有效地利用了有限的DRAM ,减少了闪存写入。

aff84076-45fc-11ee-a2ef-92fbcf53809c.png

图六:三种策略连续7天内的缓存缺失率

05总结

Kangaroo结合了Log-structured cache与Set-associative cache的优点,减少了小对象闪存缓存系统的DRAM开销与闪存写入量,降低了缓存系统的成本,提升了生产系统的性能。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 转换器
    +关注

    关注

    27

    文章

    8207

    浏览量

    141850
  • DRAM芯片
    +关注

    关注

    1

    文章

    80

    浏览量

    17881
  • NVM
    NVM
    +关注

    关注

    1

    文章

    37

    浏览量

    19053
  • 缓存器
    +关注

    关注

    0

    文章

    63

    浏览量

    11579
  • 过滤器
    +关注

    关注

    1

    文章

    407

    浏览量

    18994

原文标题:聊聊闪存缓存设计

文章出处:【微信号:SSDFans,微信公众号:SSDFans】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    一种针对存储系统设计的应用级缓存回收策略

    【作者】:孟晓烜;司成祥;那文武;许鲁;【来源】:《小型微型计算机系统》2010年03期【摘要】:针对存储系统中的缓存管理单元设计一种区分应用优先级的缓存回收策略,简称PARP.该策略基于分区
    发表于 04-24 09:43

    FFT 算法的一种 FPGA 实现

    本帖最后由 lee_st 于 2017-11-22 08:28 编辑 摘 要: FFT 运算在OFDM 系统中起调制和解调的作用。针对OFDM 系统中FFT 运算的要求, 研究了一种易于
    发表于 11-21 15:55

    linux的DNS缓存清空方法

    Linux下DNS缓存实现通常有两方式:一种是用DNS缓存程序NSCD(name service cache daemon)负责管理DNS
    发表于 07-25 07:53

    信息是如何从闪存进入缓存的?

    关于PIC32处理器上的高速缓冲存储器,我有很多问题。感谢任何解释:信息是如何从闪存进入缓存的?这是用专用逻辑在PIC32上自动完成的,还是隐藏在软件中的某个地方?当PIC32从FLASH读取指令
    发表于 07-26 15:32

    高速缓存/海量缓存的设计实现

    数据采集板并行采样0.1s将产生32MB的数据量,所以,通常需要海量缓存来存储采样数据。  2、高速缓存实现  通常构成高速缓存的方案有三
    发表于 12-04 15:59

    请问怎样去设计一种闪存设备IO软件?

    闪存设备管理技术的现状及存在的问题是什么?闪存设备I/O软件的分层结构是怎样的?怎样去设计一种闪存设备IO软件?
    发表于 04-26 07:04

    怎么利用异步FIFO和PLL结构来实现高速缓存?

    结合高速嵌入式数据采集系统,提出一种基于CvcloneⅢ FPGA实现的异步FIFO和锁相环(PLL)结构来实现高速缓存,该结构可成倍提高数据流通速率,增加数据采集系统的实时性。采用F
    发表于 04-30 06:19

    一种基于AT89C51SNDlC单片机和闪存实现的MP3公交车报站器

    本文介绍一种基于AT89C51SNDlC单片机和闪存实现的MP3公交车报站器,可通过键盘和播放列表文件实现高品质语音信息的播放。
    发表于 05-14 06:16

    如何去实现一种通讯电路的设计?

    如何去实现一种通讯电路的设计?
    发表于 06-02 06:08

    分享一种基于闪存的蓝牙低功耗无线电系统单芯片

    本文将与大家分享一种基于闪存的蓝牙低功耗无线电系统单芯片。
    发表于 06-16 06:50

    怎样去实现一种基于DSP和ADC技术高速缓存和海量缓存

    构成高速缓存的方案有哪几种?如何去实现一种海量缓存的设计?怎样去实现一种基于DSP和ADC技术高
    发表于 06-26 07:50

    如何去实现一种ADS通讯

    ADS通讯定义是什么?如何去实现一种ADS通讯?
    发表于 09-28 06:38

    聊聊环形缓存在单片机程序中的使用

    片头因为环形缓存在单片机程序中的使用是非常有效的,非常有用的,关于这个话题在此专门开文章来聊聊这个话题。环形缓存的用途主要是来缓存数据,而
    发表于 12-06 08:29

    一种新型闪存缓存管理方法PRLRU

    时会频繁引发非覆盖写和垃圾回收操作。针对此问题,提岀了一种叫作 PRLRU的新型闪存缓存管理方法,通过页面重构机制以及数据温度识别机制来管理缓存区。页面重构机制把即将回写的有效数据未满
    发表于 04-02 15:47 16次下载
    <b class='flag-5'>一种</b>新型<b class='flag-5'>闪存</b><b class='flag-5'>缓存</b>管理方法PRLRU

    聊聊本地缓存和分布式缓存

    本地缓存 :应用中的缓存组件,缓存组件和应用在同一进程中,缓存的读写非常快,没有网络开销。但各应用或集群的各节点都需要维护自己的单独缓存,无
    发表于 06-11 15:12 582次阅读
    <b class='flag-5'>聊聊</b>本地<b class='flag-5'>缓存</b>和分布式<b class='flag-5'>缓存</b>