您是第 位访客

论文阅读:针对闪存的成本感知的缓冲区管理策略(DASFAA 2015)

原文:Jiang Z, Zhang Y, Wang J, et al. A cost-aware buffer management policy for flash-based storage devices[C]. International Conference on Database Systems for Advanced Applications. Springer International Publishing, 2015: 175-190. [下载]

1. Abstract

由于读写的不对称性,传统的基于磁盘的缓冲区管理策略在闪存中并不能达到最优。这篇文章提出了一种针对闪存的名叫 CARF 的成本感知的缓冲区管理策略。提出了一种新颖的低开销的能够准确地确定驱逐页的成本模型。而且,这个成本模型能区分读写操作,还有更好的扫描抵抗力(scan resistance)。基于人工的trace和基准测试的trace表明,CARF的性能比当前最好的闪存管理策略还要高27.9%。

LevelDB 源码分析(七):Skiplist

LevelDB 中的 memtable 只是一个封装类,它的底层实现是一个跳表。跳表是一种基于随机数的平衡数据结构,其他的平衡数据结构还有红黑树、AVL树,但跳表的原理比它们简单很多。跳表有点像链表,只不过每个节点是多层结构,通过在每个节点中增加向前的指针提高查找效率。

/leveldb/db 文件夹下有跳表的实现 skiplist.h 和跳表的测试程序 skiplist_test.cc

LevelDB 的 skiplist 是一个模板类,key 是跳表每个节点存储的信息类,跳表是一个顺序结构,comparator 是跳表 key 的比较器。

LevelDB 源码分析(六):Arena

LevelDB 的简单的内存池,它所作的工作十分简单,申请内存时,将申请到的内存块放入 std::vector blocks_ 中,在 Arena 的生命周期结束后,统一释放掉所有申请到的内存,内部结构如下图所示:

LevelDB 源码分析(五):Status

Status 囊括了一个操作的结果。可以表示成功,也可以表示错误,对于出错的操作还会返回相应的出错信息。

在 LevelDB 中很多可能会出错的函数都会返回一个 Status 对象。

通常的错误处理(如:errno)是返回一个错误号,然后根据错误号可以获得出错的描述信息。

LevelDB 将错误号和错误信息封装成 Status 类,来统一进行处理。

LevelDB 源码分析(四):Slice

LevelDB 中的字符串并没有使用 std:string,而是将其封装成了Slice类, Slice 是非常简单的数据结构,它包括 size (字符串的长度)和一个指向外部字节数组的指针。

返回一个 Slice 比返回 std:string 更加方便,因为我们不需要去复制大量原始的key和value的数据。

使用 slice 之前必须要保证 slice 中指针指向的内存没有被收回。

LevelDB 源码分析(三):相关文档

在 leveldb 源码目录的 doc 目录下有关于 leveldb 的一些文档,这篇文章是对 index.html 文件的翻译。

leveldb 库提供了一个持久化的 key-value 数据库。key 和 value 都是任意大小的字节数组。所有的 key 是根据用户指定的比较器有序的存储在 key-value 数据库中。

LevelDB 源码分析(一):简介

LSM tree

LevelDB 中一个核心的结构就是 LSM tree,所以这里先介绍下 LSM tree。

在 key-value store 中 Log-Structured Merge-Trees (LSM-trees) 应用得相当广泛。与其他的索引结构(如B-tree)相比,LSM-trees 的主要优点是能够维持顺序的写操作。在B树中小的更新会带来较多的随机写,为了提高性能,LSM-trees 可以批量处理 key-value 对,然后将他们顺序写入。

论文阅读:SSD内部多级并行性的探索和利用(TOC 2013)

原文:Hu Y, Jiang H, Feng D, et al. Exploring and Exploiting the Multilevel Parallelism Inside SSDs for Improved Performance and Endurance[J]. IEEE Transactions on Computers, 2013, 62(6):1141-1155. [下载]

1. Abstract

假设 SSD 内部有四个级别的并行性:通道并行性chip并行性die并行性plane并行性,那么要如何去利用这些不同级别的并行性来提高 SSD 的性能呢。反过来,这个问题又是主要由这三个内在因素决定的:advanced commandsallocation schemes4个并行性的优先级。该篇论文通过实验分析了这三个因素对 SSD 性能的影响。得出了如下结论:(1)提供不同 advanced command 的 flash 可以在 SSD 内部开发出不同级别的并行性,他们可以降低也可以提高 SSD 的性能,这取决于你怎么使用这些并行性。(2)不同的物理页映射方式会使用不同的 advanced command,从而具有不同级别的内在并行性,会对 SSD 性能产生不同的影响。(3)在三个内在因素中,4个级别的并行性的优先级顺序对 SSD性能产生的影响最大。4个级别的并行性最好的优先顺序是:通道并行性,die级别并行性,plane级别并行性,chip级别并行性。