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

    文章

    8694

    浏览量

    147085
  • DRAM芯片
    +关注

    关注

    1

    文章

    84

    浏览量

    18011
  • NVM
    NVM
    +关注

    关注

    1

    文章

    41

    浏览量

    19118
  • 缓存器
    +关注

    关注

    0

    文章

    63

    浏览量

    11658
  • 过滤器
    +关注

    关注

    1

    文章

    428

    浏览量

    19593

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    linux的DNS缓存清空方法

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

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

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

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

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

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

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

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

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

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

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

    一种基于P2P协作的代理缓存流媒体调度算法

    该文根据流媒体系统中缓存空间不足及服务延迟的问题,提出一种基于P2P 协作的代理缓存流媒体调度算法PCSPC(Proxy-Caching Scheduler based on P2P Cooperation)。首先按照流行度高的
    发表于 02-10 15:04 4次下载

    一种高能效的结构不对称指令缓存

    在现代微处理器中,指令缓存的Tag读取、比较消耗了指令缓存较大比例的能耗。提出一种基于推断的低能耗指令缓存:不对称指令缓存。根据跳转指令比例
    发表于 11-22 10:52 2次下载
    <b class='flag-5'>一种</b>高能效的结构不对称指令<b class='flag-5'>缓存</b>

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

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

    一种基于缓存块重用信息的动态旁路策略

    非易失性存储器具有能耗低、可扩展性强和存储密度大等优势,可替代传统静态随机存取存储器作为片上缓存,但其写操作的能耗及延迟较高,在大规模应用前需优化写性能。提出一种基于缓存块重用信息的动态旁路策略用于
    发表于 04-29 15:48 4次下载
    <b class='flag-5'>一种</b>基于<b class='flag-5'>缓存</b>块重用信息的动态旁路策略

    SSD缓存有3 千万别买错!

    缓存,这不是增加成本吗?本期DIY从入门到放弃我们就来聊聊固态硬盘的缓存。 固态硬盘的工作方式其实很简单,主控负责数据管理,由它来进行数据读写的控制和分配;缓存芯片用来
    的头像 发表于 10-25 18:09 2033次阅读
    SSD<b class='flag-5'>缓存</b>有3<b class='flag-5'>种</b> 千万别买错!

    聊聊缓存数据库致性

    在云服务中,缓存是极其重要的点。所谓缓存,其实是个高速数据存储层。当缓存存在后,日后再次请求该数据就会直接访问
    的头像 发表于 01-30 17:41 771次阅读

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

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

    mybatis缓存和二级缓存的原理

    MyBatis是一种轻量级的持久化框架,它提供了缓存和二级缓存的机制来优化数据库操作性能。缓存
    的头像 发表于 12-03 11:55 1169次阅读