DAOS存储模型与事务模型
DAOS存储模型与事务模型存储模型概括下图为DAOS存储模型的基本框架
一个DAOS pool是跨一组target的存储预留区,每个target上分配给一个pool的实际空间大小称为pool shard。分配给pool的空间总大小在其创建时已经确定,也可以通过扩展pool shard大小或者通过增加更多的target(增加更多pool shard)。pool提供存储虚拟化,是预分配和隔离的单元。DAOS pool不可跨系统扩展。
一个池可以托管多个称为 DAOS 容器的事务对象存储,每个容器都是一个私有对象地址空间,可以被事务性地修改,并且独立于存储在同一池中的其他容器。容器是快照和数据管理的单元。属于容器的 DAOS 对象可以分布在池的任何目标上,以提高性能和弹性,并且可以通过不同的 API 访问,以有效地表示结构化、半结构化和非结构化数据。
DAOS Poolpool以UUID为唯一标识,并在一个持久版本列表的pool map中维护target的资格,成员资格按序号变化。pool map不仅记录活跃target,还以树的形式记录存储拓扑关系,这可以用来识别共享相同硬件的targe ...
DAOS架构
DAOS架构概述
DAOS是什么
分布式异步对象存储 (DAOS) 是一种开源软件定义的对象存储,专为大规模分布式非易失性内存 (NVM) 而设计。DAOS 利用存储级内存 (SCM) 和 NVM express (NVMe) 等下一代 NVM 技术,同时呈现键值存储接口并提供事务性非阻塞 I/O、在商用硬件上具有自我修复功能的高级数据保护、端到端数据完整性、细粒度数据控制和弹性存储等功能,以优化性能和成本。
DAOS产生背景
商业、政府和学术界数据密集型应用程序的出现使现有 I/O 模型超出了限制。 现代 I/O 工作负载的特征是越来越多的元数据与未对齐和零散的数据相结合。 传统的存储堆栈通过增加大量延迟和引入对齐约束来为这些工作负载提供较差的性能。 经济实惠的大容量持久内存与集成结构相结合,为重新定义存储范式和高效支持现代 I/O 工作负载提供了独特的机会。
为了释放这项新技术的全部潜力,新堆栈必须从头开始采用字节粒度的无共享接口,并能够支持故障将成为常态的大规模分布式存储,同时保持低延迟和高带宽数据访问。
DAOS 是一个完整的 I/O 架构,它将分布在整个结构中的 SCM 和 ...
纠删码调研
背景纠删码是用来保护数据安全的核心技术,例如磁盘扇区中会嵌入少量的额外矫正信息来容忍一定限度的比特翻转错误。当发生错误的比特数太多或者物理组件不可用,存储系统会将对应的数据视为擦除(erasure)。为此,存储系统依赖纠删码应对此种错误,纠删码通过增加系统冗余度提供数据保护。
最简单的数据保护方案是复制,但是复制需要消耗大量资源和存储开销,且可能存在保存同一份数据的两个存储组件同时故障的情况。 像Reed-Solomon等纠错码比简单复制复杂,可以处理更多种类的错误,纠删码可以追溯到纠错码(ECC)但又不是一个概念,后者通常应用在通信邻域。纠删码通常暴露错误发生位置,提供的错误处理能力也比纠错码强大的多。
简单编码机制
考虑一个由n个磁盘组成的存储系统,其中k个数据盘用来保存用户数据,m=n-k个盘用来保存纠删码的编码信息。m个编码盘中的数据由k个数据盘计算得来,当不超过m个盘损坏时数据可以从剩余盘计算恢复。最简单的纠删码假定每块盘保存一个w bits的字,数据盘中记为$d_0,…d_{k-1}$,编码盘中记为$c_0,…,c_{m-1}$。编码数据定义为用户数据的线性组合:
\b ...
SILK Preventing Latency Spikes in Log-Structured Merge Key-Value Stores
源码:https://github.com/theoanab/SILK-USENIXATC2019
由悉尼大学Oana Balmau等人2019年在ATC发表,旨在对LSM KVs的长尾延迟进行优化。论文首先通过在RocksDB上的实验表明长尾延迟问题确实存在以及潜在的原因,然后分析了业界针对长尾延迟的解决方案,最后提出了SILK解决方法并在YCSB以及Nutanix工作负载下进行性能验证。
BackgroundKV存储支持用户操作和内部操作,其中用户操作Get()、Update()、Scan()用来存储和遍历数据,内部操作包括flushing和compaction。更新操作在内存中进行以获得更好性能,flush操作将内存中的数据持久化到磁盘,compaction操作将LSM-tree的低层数据合并到高层。论文表示在现有的LSM KVs中当面对繁重多变的客户端写负载时长尾延迟问题仍然存在。
现有工作通过减少内部操作开销来提升客户端吞吐量,但是内部操作仍是必要的,由于对这些内部任务的干扰,在正在进行的内部操作期间到达的客户端操作会增加延迟。实际应用中限制内部操作分配到的IO带宽是常见的手 ...
Data Page Layouts for Relational Databases on Deep Memory Hierarchies
NSM
空间利用率低,cache中有无用数据;
cache record会造成缓存污染;
增加访问memory的次数;
DSM
涉及多个attribute时重构元组代价较高
PAX
结合NSM和DSM优势
The Case for Learned Index Structures
Tim Kraska、Jeffrey Dean等人在SIGMOD 2018上边发表的一篇关于索引学习的论文。索引在加速数据访问上可谓应用广泛,B-Trees是范围查询的极佳选择,Hash-maps常被用在单个点查询领域,Bloom filters常被用来检查集合中特定元素是否存在。以上几种方式都没有考虑并应用数据的相关性或分布特征。论文提出掌握数据的分布特征将有利于优化大部分索引结构。常见的索引结构可以被看作机器学习模型,例如B-tree可以被看做一个ML模型,输入是key,然后预测key在有序集合中的位置,Bloom filter可被看作一个二分类器,用来判断给定的key在集合中是否存在。
General Idea of Learned Index Using B-tree
B-Tree本身就可以被当作ML模型,回归树。其将输入的key映射到一个位置,最小误差为0,最大误差为page size。对于新数据,B-Tree需要被重新平衡,即模型需要被重新训练以提供不变的误差保证。还有一些其他的机器学习方法可以使用,例如神经网络,其可以学习多种不同的数据分布类型。挑战是如何平衡模型的复杂度 ...
PCIe协议学习记录
1 PCIe概述 PCIe是第三代外围设备总线,英文缩写为PCIe或者PCI Express。PCIe是点对点,全双工的差分传输信号总线。点对点互连表示链路上的电气负载有限,从而使发送和接收频率可扩展到更高。PCIe目前成熟的版本有GEN1,GEN2,GEN3,GEN4和GEN5,每一代相较上一代传输速率和传输带宽都有了很大幅度的提升。PCIe每个Function的配置空间从PCI的256B扩展到了4KB,但前64B(PCI Header)配置寄存器仍然是相同的。
差分信号对:PCIe采用差分对来串行传输数据。
链路:PCIe链路是两台设备之间的物理连接。
2 PCIe带宽 PCIe GEN1在链路上的传输速率为2.5Gb/s。PCIe在GEN1和GEN2采用了8b/10b编码方式,也就是说链路上传输10b数据,实际传输的有效数据只有8b。对于GEN1 x1的PCIe链路,传输的有效带宽为:
3 PCIe拓扑结构 PCIe主要的组件有RC(Root Complex),SW(Switch),EP(E ...
TridentKV A Read-Optimized LSM-Tree Based KV Store via Adaptive Indexing and Space-Effificient Partitioning
本文是华中科技大学Kai Lu发表在TPDS(2022)上的一篇关于LSM-tree索引优化的期刊论文。现有的索引策略限制了KVS的读性能,基于LSM-tree的KVS采用插入墓碑的删除机制,当存在大范围数据删除时,读操作具有较大的性能波动。本文提出的TridentKV旨在优化KVS的读性能,其核心包括动态变化的可学习索引结构、空间高效的分区策略、支持异步读操作以及SPDK。TridentKV基于RocksDB构建,在不丢失写性能的基础上读性能提升了7x ~ 12x,利用TridentKV替换RocksDB存储Ceph中的元数据可使Ceph的读性能提升20%~60%。
Background and Motivation众多持久化KV存储采用LSM-tree作为索引结构来实现较高的写性能与可扩展性,但由于LSM-tree的多层结构,读操作需要遍历各层,这将造成严重的读放大以及读性能损耗。近年来众多工业界学术界工作尝试从filter、cache、index structure优化基于LSM-tree的KVS的读性能。RocksDB使用Bloom过滤器来减少额外的I/O、通过数据块哈希索引优 ...
AC-Key——Adaptive Caching for LSM-based Key-Value Stores
本文由明尼苏达大学Fenggang Wu等人于2020发表于ATC。作者结合LSM-Tree的结构特点在ARC(Adaptive Replacement Cache)的基础上提出了基于缓存效率因子的E-ARC,并通过HAC对不同类型的缓存对向进行层次化管理。作者提出的分层自适应缓存算法可以动态感知负载中key-value cache、key-pointer cache以及block cache的变化,根据负载变化对缓存大小进行动态调整。
Background由于LSM-Tree本身的结构特点,在读取操作时会伴随严重的读放大问题。解决上述问题的主要方法是使用cache,但是LSM的分层结构使得人们很难搞清楚cache一个entry所带来的开销和好处。同时为了在点查和范围查询取得平衡,cache的设计变得更为复杂。AC-Key将三种类型的cache:key-value cache,key-pointer cache,block cache整合进一个系统,并且可以根据负载自动调整三者比例。AC-Key使用了一个新的方法来衡量cache所带来的开销和收益。AC-Key是基于RocksDB实现的 ...
From WiscKey to Bourbon A Learned Index for Log-Structured Merge Trees
本文由威斯康辛麦迪逊大学 Remzi指导并发表于OSDI 2020。以往的大量研究表明可学习索引能够提升基于树(如B+tree)的数据访问性能。本文分析了LSM-tree的操作特点,通过分析不同负载下LSM-tree各层/SStable的状态变化总结在其内部使用可学习索引的5个指导思想。作者选用贪婪分段线性回归(Greedy-PLR)在WiscKey基础上构建了Bourbon并在File和Level粒度上对比了使用可学习索引的优缺点。在人造数据集以及真实数据集上的实验均表明Bourbon可以有效提升LSM-tree的查询性能。
Background在数据库系统中引入可学习索引的思想早已出现。为了查找指定key,系统可以使用已经学习好的函数来预测key(以及value)的位置,如果预测成功将大大提升系统的查询性能。以往工作尚未聚焦LSM-tree,本文试图将可学习索引的思想引入LSM-tree。可学习索引通常是为只读场景定制的,当数据发生写操作时,在其上已经学习到的模型必须做出调整以适应这种变化。虽然LSM-tree具有写优化的特点,但是写入操作只会改变LSM-tree的一部分,所以树的 ...