论文学习:Austere Flash Caching with Deduplication and Compression

2023-05-16

论文题目 :Austere Flash Caching with Deduplication and Compression

来源:USENIX ATC 2020

链接:Austere Flash Caching with Deduplication and Compression | USENIX

一、概念

1、Flashcache

Flashcache开源混合存储方案--原理与安装 - dhb_oschina的个人空间 - OSCHINA - 中文开源技术交流社区

(1)虚拟文件系统(VFS)是由Sun microsystems公司在定义网络文件系统(NFS)时创造的。它是一种用于网络环境的分布式文件系统,是允许和操作系统使用不同的文件系统实现的接口。虚拟文件系统(VFS)是物理文件系统与服务之间的一个接口层,它对Linux的每个文件系统的所有细节进行抽象,使得不同的文件系统在Linux核心以及系统中运行的其他进程看来,都是相同的。严格说来,VFS并不是一种实际的文件系统。它只存在于内存中,不存在于任何外存空间。VFS在系统启动时建立,在系统关闭时消亡。

(2)块层:块层介绍 第一篇: bio层

(3)DM层:

(4)设备驱动:【哈工大李治军】操作系统课程笔记9:设备驱动与文件管理(显示器、键盘和磁盘)_辰阳星宇的博客-CSDN博客_李治军哈工大

***flashcache 断电丢失数据 flash断电不丢失数据

deduplication(去重)

重复数据删除以粗粒度但轻量级的方式删除块级重复数据。通过将数据划分成一个个chunk(KB级别),对每个chunk的内容做hash,若算出的hash值(fingerprint,FP)一样(不同),则视为冗余(唯一)数据。通过在物理空间上(SSD上)只保存一份冗余数据的副本,从而进行数据缩减,但在逻辑空间上,所有冗余数据不会被删除,而是都指向同一块物理地址。此外还会将每个chunk和其FP的映射存储下来,用于重复检查和chunk查找。块(chunk)的大小可能是固定也可能是变化的,本文主要关注去重固定大小的块。

compression(压缩)

压缩通过将数据转换为更紧凑的形式,旨在字节级进行细粒度的数据减少。压缩通常在去重后进行,一般应用于那些唯一数据块。压缩后的数据块大小一般是可变的。本文使用顺序压缩算法(例如Ziv-Lempel算法),对每个块的字节进行操作。

deduplication&compression是两种data eduction技术,相辅相成。

flash

flash存储器又称闪存,它结合了ROM和RAM的长处,不仅具备电子可擦除可编程(EEPROM)的性能,还可以快速读取数据(NVRAM的优势),使数据不会因为断电而丢失。固态硬盘和传统的机械硬盘最大的区别就是不再采用盘片进行数据存储,而采用存储芯片进行数据存储。固态硬盘的存储芯片主要分为两种:一种是采用闪存作为存储介质的;另一种是采用DRAM作为存储介质的。目前使用较多的主要是采用闪存作为存储介质的固态硬盘

flashcache

Flashcache是Facebook技术团队的一个开源项目,最初目的是为加速MySQL的数据库引擎InnoDB,是一个开源的混合存储方案,兼顾了机械硬盘和固态硬盘两者的优点,即有HHD的高容量、高顺序访问,也有SSD的高随机访问,低延迟,且这个方案成本也相对较低。Flashcache利用了Linux的device mapping机制,将Flash disk和普通硬盘的块设备做了一层映射,在OS中变现为一块普通的磁盘,使用简单。通过在文件系统和设备驱动之间新增了一层缓存层,用来实现对热点数据的缓存。通常用SSD固态硬盘作为缓存,通过将传统硬盘上的热门数据缓存到SSD上,然后利用SSD优秀的读性能,来加速系统。参考https://my.oschina.net/u/658505/blog/544599

上图是一般的带有去重和压缩功能的flashcache架构。带有去重和压缩功能的flashcache保证SSD中的数据块都是唯一且压缩过的。而传统的flashcache不带有去重和压缩功能,因此只用维护一种索引结构:LBA->CA。经过假设计算后,带有去重和压缩的flashcache由于要维护两个index(LBA-index、FP-index),其内存开销要是传统的flashcache的16倍(4G/256MB)。此外还可能产生额外的CPU开销(计算FP、压缩数据、寻找索引对等)

LBA-index:LBA->FP

逻辑地址索引,即将存于HDD中的数据的逻辑地址(LBA)与数据块的FP值进行映射(多对一,可能有多个不同的逻辑地址指向相同内容的数据)

FP-index:FP->CA,length

FP索引,即将每个数据块的FP值与该数据块经过压缩后位于SSD中的物理地址(CA)以及该块的大小进行映射(一对一)

Write-through(直写模式)

在数据更新时,同时写入缓存Cache和后端存储。此模式的优点是操作简单;缺点是因为数据修改需要同时写入存储,数据写入速度较慢

Write-back(回写模式)

在数据更新时只写入缓存Cache。只在数据被替换出缓存时,被修改的缓存数据才会被写到后端存储。此模式的优点是数据写入速度快,因为不需要写存储;缺点是一旦更新后的数据未被写入存储时出现系统掉电的情况,数据将无法找回。

 

其他

任何哈希冲突只会导致缓存丢失而不会丢失数据

二、解决问题

提高Flashcache的空间效率和耐久性;重删和压缩为索引管理带来了大量的内存开销;探索如何通过重复数据删除和压缩来增强传统的闪存缓存,以实现存储和I/O节省,从而解决固态硬盘容量有限和损耗问题。

【有关 SSD 磨损原因的信息:硬盘 — 为什么固态设备 (SSD) 磨损 | Dell 中国】

AustereCache,这是一种新的Flash缓存设计,旨在实现内存高效索引,同时保留重复数据删除和压缩的数据减少优势。

AustereCache原型节省了69.9%-97.0%的内存使用,同时保持了可比的读命中率和写减少率,并实现了高I/O吞吐量。

三、核心技术

AustereCache强调严格的cache数据管理,使用多种技术来进行有效的数据组织和cache数据替换,主要包括三个核心技术点:

3.1 bucketization(桶化)

如下图所示,为了消除在LBA-index和FP-index中维护地址映射的内存开销,AustereCache将索引项散列到大小相等的分区(称为桶,每个桶分为多个槽)中,每个桶保存部分LBA和FP(通过hash后取其前缀码,如前16bit)以节省内存。根据桶位置,将数据块映射到SSD中。并将SSD分为元数据区(metadata)和数据区(chunk data),这两个区也都被分为多个桶,每个桶包含多个槽(slot),数量与FP-index保持一致(1对1映射)。

3.2固定大小压缩数据管理

为了避免在FP-index中跟踪块的长度,AustereCache将可变大小的压缩块划分为较小的固定大小的子块,并在不记录压缩块长度的情况下管理子块。如下图所示,在FP-index中会选取多个连续的槽来存放属于同一个压缩块的子块,并且不会在FP-index中记录压缩块的大小,而是在SSD中记录压缩块的大小,从而减小FP-index大小,减小内存开销。这样做既可以很好的使用桶—槽(bucket—slot)机制来管理每个数据块(将大小变化的压缩块分为多个固定大小的子块),也可以节省内存开销。

有压缩的读/写工作流与无压缩的读/写工作流类似(§3.1)??

3.3 基于bucket的缓存替换

AustereCache为了增加缓存命中的可能性,其结合了基于引用计数(即引用每个唯一块的重复副本的计数)的最近性和去重性原则,以实现有效的SSD缓存数据替换。但是,记录引用计数会产生不可忽略的内存开销。因此,AustereCache利用固定大小的紧凑型草图数据结构在有限的内存空间中使用有限的误差进行参考计数估计

对于LBA-index,其替换策略为LRU,每当新加入或者新访问一个LBA就会将这个LBA移动到最前面(偏移量为0),其余所有entry往后移动一格,处于最后一个的entry(偏移量最大)会被替换掉。

对于FP-index,其替换策略是要将去重(deduplication)和最近访问性(recency,相当于局部性原理)结合起来,通过一个额外的数据结构:引用计数(count)来表明冗余LBA的程度,当FP-index满后,会替换掉count最小的entry来满足去重性。此外还通过将LBA-index分为Recent、Old两个区,位于Recent区中的entry,每次被访问,或者新加入的entry,其count+2;当从Recent进入Old,或者在Old中被替换掉的entry,其count-1;当Old中的entry被访问进入Recent区,其count+1。通过这种规则既兼顾了去重也兼顾了局部性原理。

总结

为什么要用固定块大小的重删而不是cdc;

全篇没有考虑时间,都是空间

问题及其重要性:

目前SSD被广泛用作RAM和HDD之间的一个缓存层(即flashcache技术,通过将热点数据存储在SSD,可以提高整体I/O性能),但可用容量很小,而且由于磨损问题,续航能力也很差。

我们探索重复数据删除和压缩作为数据减少技术,以消除I/O路径上的重复内容,从而降低存储和I/O成本。

尽管有减少数据的好处,但是现有的将重复数据删除和压缩应用于闪存缓存的方法[24,26,37]不可避免地由于昂贵的索引管理而招致大量的内存开销。 

现阶段的研究现状:

特别地,最近的研究[24,26,37]用重复数据删除和压缩来增强闪存缓存,重点是在大的替换单元中管理可变大小的缓存数据[24]或设计新的缓存替换算法[26,37]。

论文新的发现和解决思路、
我们提出了一种Flashcache设计AustereCache,它使用重复数据删除和压缩来节省存储和I/O,同时大大降低了类似设计中索引结构的内存开销。

 AustereCache提倡在数据布局和缓存替换策略上进行严格的缓存管理,以限制由于重复数据删除和压缩而导致的内存放大。 它建立在三个核心技术之上:㈠Bucketization,它通过确定地将块映射到固定大小的桶中来实现轻量级地址映射; ㈡固定大小的压缩数据管理,通过将可变大小的压缩块组织为固定大小的子块,避免跟踪内存中的块长度; 以及(iii)基于桶的高速缓存替换,其在每个桶的基础上执行存储器有效的高速缓存替换,并利用紧凑的草图数据结构[13]来跟踪有限存储器空间中的重复数据删除和最近模式,以用于高速缓存替换决策。 

主要结论

与CachedEdup[26]相比,AustereCache使用的内存比CachedEdup少69.9-97.0%,同时保持了可比的读命中率和写减少率(即,通过以重复数据删除和压缩为后盾的Flash缓存,它保持了I/O性能的提高)。 此外,AustereCache在I/O路径上引入了有限的CPU开销,并且可以通过多线程进一步提高I/O吞吐量。

存在的问题和你自己的思考。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

论文学习:Austere Flash Caching with Deduplication and Compression 的相关文章

  • 更新数据库后 NHibernate 查询缓存不起作用

    我在 FluentNHibernate 中启用了二级缓存 Fluently Configure Database MsSqlConfiguration MsSql2005 ConnectionString connectionString
  • 现代缓存中的方式预测

    我们知道 就缓存命中时间而言 直接映射缓存优于集合关联缓存 因为不涉及特定标签的搜索 另一方面 组关联缓存通常比直接映射缓存具有更好的命中率 我读到 现代处理器试图通过使用一种称为路径预测的技术来结合两者的优点 他们预测给定集合中最有可能发
  • 缓存行对齐(需要文章澄清)

    我最近在我的应用程序中遇到了我认为是错误共享的问题 我查了一下关于如何将我的数据与缓存行对齐 他建议使用以下 C 代码 C using C 0x alignment syntax template
  • 检查用户的 Flash 播放器是否具有音频功能。 (功能.hasAudio)

    是否可以检查用户是否有声卡 我找到了 Capability hasAudio 但不知道这是否是我应该查看的值 trace Capabilities hasAudio 指定系统是否具有音频功能 此属性始终true 文档对此并不清楚 但我认为
  • 即使禁用缓存,Safari 也会缓存 GET 请求

    我已经将我所知道的所有标头设置为在我的服务器上禁用缓存 甚至禁用 ETAG 但 Safari 仍然偶尔 大约 50 次 缓存我的请求 Workflow 我正在实施 oauth 1 所以 浏览器使GET api user request 服务
  • 将数据/变量从 Visual Basic 表单传递到 Flash 对象

    我很确定这个问题可以在 stackOverflow 上的某个地方得到解答 但我对此没有选择 我有一个 VisualBasic 窗体 上面有一个按钮对象 我希望该按钮有一个 onClick 过程 以便单击它可以将变量或其他命令传递到另一个正在
  • ActionScript 3.0 中缺少运算符重载

    我在 ActionScript 中最怀念的事情之一是缺少运算符重载 特别是 我通过在我的类中添加 Compare 方法来解决这个问题 但这在很多情况下没有帮助 比如当你想使用内置字典之类的东西时 有没有好的方法来解决这个问题 Nope 但添
  • AS3 是否可以复制 Shape 对象?

    我正在尝试制作一个可用于复制的形状 这是我所做的 我正在尝试做的以及我陷入困境的解释 在 Flash IDE 画笔 中手动绘制形状 创建了一个包含形状的新影片剪辑 作为一个类导出 实例化该类 var mc MovieClip new sha
  • as3 事件 - 类型强制失败?

    我正在将事件从孩子发送到父母 swf 它工作正常 直到我使用预加载器 swf 加载父级 然后父级停止从子级获取事件 我现在收到此错误 TypeError Error 1034 Type Coercion failed cannot conv
  • 如何防止 Ajax/javascript 结果在浏览器中缓存?

    如何防止浏览器缓存Ajax结果 我有事件触发的 Ajax 脚本 仅当浏览器数据被清除时才显示结果 在 IE6 和 Firefox 3 0 10 中测试 随机 URL 可以工作 但它是一种 hack HTTP 内置了应该可以工作的解决方案 尝
  • CPU缓存:两个地址之间的距离是否需要小于8字节才能具有缓存优势?

    这似乎是一个奇怪的问题 假设缓存行的大小为 64 字节 此外 假设 L1 L2 L3 具有相同的缓存行大小 this https stackoverflow com a 15333156 8385554帖子说英特尔酷睿 i7 就是这种情况
  • 是否可以使用 S3 进行 Flash 伪流?

    我一直在使用 S3 来存储和提供 FLV 和 MP4 视频 它效果很好 但内容是渐进下载的 我想知道是否有可能让所谓的 伪流 与 S3 一起使用 伪流允许观看者在下载完整视频之前在视频中向前搜索 并仅将必要的位发送到 Flash 播放器 我
  • Chrome 无法识别我对 javascript 文件的更改并加载旧代码?

    我在这里坐了将近一个小时来测试我正在构建的网站 由于我想查看代码中的新更改 因此我重新加载了代码 但它正在重新加载旧代码 我打开了 devetools 进行硬重新加载和清空缓存硬重新加载 它们都加载我的旧代码 我进入隐身模式 它做了同样的事
  • 在 Java 中加载和缓存图像的最佳方法是什么?

    我有超过一千个 16 x 16 像素图块图像的大量集合 我在 Java 中制作的游戏需要这些图像 在不耗尽 JVM 可用内存的情况下存储切片的最佳方法是什么 我认为生成 1000 BufferedImages 可能并不明智 保持图像准备就绪
  • 使用 Hibernate 作为 ORM 机制的 Web 应用程序中的 L1 和 L2 缓存有什么区别?

    我只想要一些有关使用 L1 缓存和 L2 缓存的标准用途的一般信息 我很好奇 因为我正在研究使用赤土陶器作为二级缓存的系统 并且我发现它也有一级缓存 L1 缓存是每个 Hibernate 会话都存在的缓存 并且该缓存不在线程之间共享 该缓存
  • GitHub Actions:如何缓存测试容器的 Docker 映像?

    我使用 Testcontainers 在 GitHub Actions 中执行一些测试 Testcontainers 提取我的测试中使用的图像 不幸的是 每次构建时都会再次提取图像 如何在 GitHub Actions 中缓存图像 GitH
  • 如何在动作脚本 3 中设置/访问外部 swf 文件的动态文本字段?

    我正在处理一个 fla 文件 其中添加了一个 swf 文件 我如何在该 swf 文件的动态文本上设置文本 有没有直接设置文本的方法 我不想在 url 中作为参数传递 我试过这样 var rq URLRequest new URLReques
  • 在 SPA 中加载外部脚本和样式文件

    我有一种 SPA 它使用 API 来获取数据 该 SPA 有一些实例 它们都使用通用样式和脚本文件 所以我的问题是 当我更改这些文件中的一行时 我将必须打开每个实例并更新文件 这对我来说真的很耗时 一种方法是将这些文件放在服务器中的文件夹中
  • 正确地将 flash.utils.Dictionary 序列化为 SharedObject

    我的 Flex 项目中有一个名为 HashMap 的便利集合类 它本质上是 flash utils Dictionary 的包装器 带有一堆便利方法和添加的 同步的 ArrayCollection 以便我可以将 HashMap 传递给需要的
  • 在 any() 语句中迭代一个小列表是否更快?

    在低长度迭代的限制下考虑以下操作 d 3 slice None None None slice None None None In 215 timeit any type i slice for i in d 1000000 loops b

随机推荐

  • css的相对定位和绝对定位

    css标签的相对定位和绝对定位是通过position属性来控制的 xff0c 相对定位和绝对定位不改变元素的大小形状 xff0c 只改变元素的位置 一 position属性的值有以下几种 xff1a static 默认值 xff0c 没有定
  • 个人博客系统(Vue实现)的主页布局设计

    源码地址 xff1a https gitee com cheng xuyuan blogWeb git xff08 请忽略这句 xff09 一 整体布局 上下划分 xff0c 再左右划分 主体代码 xff1a lt el container
  • 绘制Vue主页的列表结构(包括增、删、改、查功能)

    源码地址 xff1a https gitee com cheng xuyuan blogWeb git xff08 请忽略这句 xff09 一 面包屑导航区域设计 xff08 下面划红线的部分 xff09 说明 xff1a el bread
  • pytorch入门10--循环神经网络(RNN)

    补充 xff1a torch randn 函数返回一个张量 xff0c 包含了从正态分布 xff08 均值为0 xff0c 方差为1 xff09 中抽取的一组随机数 张量的形状由参数决定 xff0c 参数个数任意 例如 xff1a torc
  • amixer用法

    1 先看看amixer支持哪些命令 大概有哪些功能 amixer help Usage amixer lt options gt command Available options h help this help c card N sel
  • 常见的UNIX/LINUX命令

    一 文件目录类命令 命令格式 xff1a lt 命令名称 gt 选 项 参数1 参数2 例如 xff1a ls la etc 1 浏览目录命令 xff08 1 xff09 ls list 功能 xff1a 显示目录文件 语法 xff1a l
  • redis介绍4--配置文件、持久化、事务、消息的发布与订阅、集群、哨兵模式、Jedis

    一 redis的配置文件redis conf 1 redis配置文件中关于网络的配置 1 port 指定redis服务所使用的端口 xff0c 默认使用6379 2 bind 配置客户端连接redis服务时 xff0c 所能使用的ip地址
  • Keil uVision5报错error:#5:#include “core_cm3.h“

    也是Keil小白 xff0c 在编译程序的时候出现了问题 xff0c 解决的文章链接po在 这里 xff01 下文为搬运 用Keil vision5编译时出现以下错误 xff1a error 5 cannot open source inp
  • 软件工程第二章——软件生命周期(仅记录我所认为重要的知识点)

    软件工程第二章 软件生命周期 前言生命周期组成 xff08 顺序 xff09 对应文档软件过程活动动作任务 软件过程模型CMM能力成熟度模型瀑布模型适用场合 xff1a 瀑布模型的缺点 V模型 xff08 瀑布模型的变种 xff09 原型模
  • 解决vxe-table的表头动态渲染第一次不显示

    问题描述 xff1a vxe table表头当使用了 lt vxe colgroup gt 二级 多级表头 xff0c 设一级表头写死 xff0c 二级表头动态加载 xff0c 那么每次赋值二级表头时 xff0c 值赋上去了 xff0c 页
  • vite入门/徒手搭建vite/配置vite/使用vite脚手架/vite步骤

    以下内容全部以图片形式展示 xff08 自己动手尝试一下印象岂不是更深 xff1f xff09 当然啦 xff0c 也有完整的 xff0c 自己拉代码 https github com ispaomoya build vite git 文章
  • 解决vue跨域302,301,404,问题

    xff08 仅用于开发环境 xff0c 上线项目使用nginx配置 xff09 这里简单说一下配置的基本条件 目录 一 vue config js中配置devServer 二 使用axios发送请求 三 接口无误 以上三个都没问题了 要么就
  • 解决el-tooltip__popper设置宽度无效问题

    当采用了show overflow tooltip属性时 xff0c 如果内容过长 xff0c 摸上去的宽度单行占满整个屏幕 lt el table column show overflow tooltip gt 网上大家都说加上下面代码
  • 这些年工作以来自己读过的书

    gt 上学时不喜欢读书 看见书就烦 xff0c 就想把书拿来垫东西 gt 工作时强迫自己读书 有时会强迫饭后看半小时 xff0c 有时又会强迫看50页 xff0c 有时又会看着看着直接睡着了 xff0c 越看越疲劳 gt 慢慢接受每月读书的
  • addEventListener() 事件监听

    无意间有人问到了 xff0c 这个方法 xff0c 我就学了一下 xff0c 顺便敲了一个小demo addEventListener 用于向指定元素添加事件 可以向一个元素添加多次事件或者多次不同事件 xff0c 后面的事件是不会覆盖前面
  • JavaScript框架汇总

    本文转载于https www cnblogs com China Dream p 15770038 html 移动应用类框架 Vue js 官网地址 http cn vuejs org 官方简介 Vue js 是一套用于构建用户界面的渐进式
  • 计算机保研面试题-数据结构

    快速排序算法 xff0c 归并排序算法的复杂度 xff08 简单介绍各种排序 xff09 算法的特点 xff08 1 xff09 插入排序 xff1a a 直接插入排序 xff1a 比如将X插入有序序列L当中 xff0c 首先找到X在序列L
  • 计算机保研面试题——操作系统

    目录 1 操作系统的特点 xff1f 功能 xff1f 2 中断和系统调用的区别 3 进程 线程的概念以及区别 xff1f 进程间的通信方式 xff1f 4 进程有哪几种状态 xff0c 状态之间的转换 进程调度策略 xff1f 5 读写者
  • 计算机保研面试题——计算机网络

    目录 计算机网络体系结构 OSI xff0c TCP IP xff0c 五层协议的体系结构 xff0c 以及各层协议 IP地址的分类 32位地址 各种协议 xff1f TCP三次握手和四次挥手的全过程 六 TCP和UDP的区别 xff1f
  • 论文学习:Austere Flash Caching with Deduplication and Compression

    论文题目 xff1a Austere Flash Caching with Deduplication and Compression 来源 xff1a USENIX ATC 2020 链接 xff1a Austere Flash Cach