论文阅读(5):kaml

KAML: A Flexible, High-Performance Key-Value SSD

Yanqin Jin 加利福尼亚大学,北卡罗来纳州立大学

摘要:现代ssd只开放给主机程序一个块io的接口,资源没有充分利用。有很多尝试去用针对键值的接口以及内部的事务机制实现提升,但实现的并不好。KAML:key-addressable,multi-log。将数据存储为变长记录而不是固定记录。同时,暴露一个kv的接口可以减少应用与ssd之间的导向层。KAML也提供了内部事务支持,适应细粒度的锁而不是之前的page-level的锁。KAML包括了与pagecache相似的缓存层,利用了主机内存。

性能指标:与现存的kv存储相比,OLTP(在线事务处理)提高了1.1x-4x。

introduction:

现存kv接口的提议的问题:

1、对ssd内部所有kv对提供单一,共享的映射,使得所有应用的kv映射都必须使用一致的策略。

2.这个策略止于ssd,而没有考虑其他的存储设备。尤其是,不提供缓存功能。

3.在原子写上,他们提供事务的pagelevel的原子更新,与应用需求不符。

KAML要对内部flash存储单元进行管理?那不就做固件去了么。内部多channel的io并行性。

主要工作:在商业可用的ssd参考设计上进行扩展,并实现了主机端的缓存层。

 

motivation and background:

flash memory and ssd:

闪存的一些用到的特性:

1.read,program,erase粒度不同,延迟不同

read 100微妙,program 100-2000微妙,erase几毫秒。

pe寿命不同,且不能原址更新,所以有了FTL层,从逻辑地址映射到物理地址。其中包括GC,wear level。运行在ssd内部处理器以及DRAM上。

FTL实现:

现代FTL的两个特点,逻辑物理地址映射,gc功能。

每个闪存页有部分叫做OOB(out of band)区域存储映射,gc,纠错的需要的元信息。通常大小在128-256B。

SSD中的事务:

KAML在ssd中提供原生的持久性和原子性。而让应用实现一致性和隔离性。

ssd支持页级别的原子写,COW。

KAML系统实现:

使用新式的FTL设计,提供事务性的,键值接口。

接口提供命名空间概念,可以隔离不同应用。

1.key,value,namespace

key 64byte,value变长,意味着可以存储任何种类的对象。例如,传统的4kB的page文件系统,可以转换成kv形式,地址作为key,4KB的page作为value。

kv接口减少一层映射:key-ppn

传统:key-lba-ppn

2.原子性和持久性

3.细粒度锁

4.缓存层

因为KAML为kv接口,所以需要与之前不一样的缓存设计。而且要实现事物的隔离性。

cache层使用namespaceid和key作为hash的source,寻找是否hit。事务提交时,将cache回写到ssd。

事务管理器一致性使用的是SS2PL(强严格二阶段锁)

XCB(transaction control block)的状态机如下

 

XCB是事务管理器用来管理事务状态的结构体

KAML实现:

硬件架构:在nvmessd商业开发板上实现了KAML。

 

 

命名空间管理:

KAML把每个flashtarget当做一个log。每次put,append到log最后,并更新key与location的映射关系。每个命名空间对应多个log提升了局部性,相应提高了垃圾回收的性能。当然这种对应关系是动态可变的。

每个page分为64个固定的chunk,每个record会记录起始chunk,结束chunk。

映射表:

原始映射表只有一张,无法提供命名空间,而且LBA概念狭隘,只能代表数据的连续block地址空间,无法代表用户的key。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值