Managing Non-Volatile Memory in Database Systems

问题引出

在这里插入图片描述
传统的架构都随着DATA size的增大而出现 性能悬崖式下降

2.1 NVM Direct

不同结构的 NVM Direct systems 在这篇论文中有详细的研究

J. Arulraj, A. Pavlo, and S. Dulloor. Let’s talk about storage & recovery methodfor non-volatile memory database systems. In SIGMOD, pages 707–722, 2015.
Their work categorizes database
systems into in-place update, log-structured, and copy-on-write
engines

in-place 性能最高同时对NVM硬件磨损最少,所以他们也用这个算法
直接使用NVM

2.2 Basic NVM Buffer Manager

事务只在DRAM执行
memory is divided into fixed-size pages

An NVM-optimized variant
H.Kimura.FOEDUS:OLTPengineforathousandcoresandNVRAM.InSIGMOD, pages691–706,2015.
FOEDUS stores two pointers. One identifies the NVM-
resident copy of the page, the other one (if not null ) the DRAM one.
When a page is not found in DRAM, it is loaded into a buffer pool.
FOEDUS uses an asynchronous process to combine WAL log entries
and merge them into the NVM-resident pages to achieve durability

FOEDUS 中NVM 是用于持久性和cold data的.作者的目的则是想让访问NVM更加频繁…改进BUFFER MANAGER 优化访问NVM

2.3 Recovery

作者并没有对LOGGING做文章,对每个对比的系统都用

We use write ahead logging with redo and undo information
The undo entries enable one to perform rollback and to undo the effect of loser transactions during recovery. The redo entries are used to repeat the effects of committed transactions during recovery if it was not yet persistent

3 NVM BUFFER MANAGEMENT

作者的目标:他们的系统的结构可以 在数据量小的时候 性能跟main-memory database system一样,然后 涉及NVM和SSD的时候性能也不会下降那么多

For this purpose, we design a novel DRAM-resident buffer manager that swaps cache-line-grained data objects between DRAM and NVM
在DRAM的BUFEER管理 管理在DRAM和NVM间交换一个CACHE line 粒度的数据

利用nvm 的可字节寻址可以优化带宽

在这里插入图片描述
在这里插入图片描述
红色 hotdata 橘色warmdata 蓝色 colddata

NVM SSD之间 page-grained swap

DRAM NVM之间 cacheline-grained

分配full-page 和mini-page能更好的利用DRAM空间

cold pages中的hot data object 能被抽离(因为是cacheline-grained)

大概是 在拥有大多数cold data的页存到了nvm中 然后把其中的hotdata 通过cache line grained 抽离回DRAM (因为HOTDATA经常用,放在DRAM很快就能访问到) 只当如果mini page满了,他就放到full page

pointer swizzling scheme

3.1 Cache-Line-Grained Pages

因为NVM低延迟,所以才能应用CLG pages . (如果SSD这种高延迟的,就只好通过一个PAGE粒度(16KB)的读取来降低延迟的带来的开销)

buffer manager之前的做法:分配一个pages在DRAM,只有当事务满了一pages才整个存进去
作者的做法:只分配一个pages在DRAM,当一个事务请求放进去,就给他找一个cache line
在这里插入图片描述

因为CLG 设计很复杂,而且每个数据必须被清晰标明信息,所以作者只在最有影响的几个地方使用CLG(lookup, insert, and delete)其他就整个PAGE

作者说只有小数据访问 用CLG 会比较好,大数据还是用PAGE比较好…佛了嗷
那你用大PAGE的话,你的MINI PAGE咋办,怎么提取hotdata?

3.2 Mini Page

因为 传统的page设计就是,你即使只想访问DISK的一个元组,我也把整个PAGE LOAD 进DRAM
在这里插入图片描述

为了简化访问full pages 和mini page中的一个cache line,用了一个接口(访问就调用这个接口,如果在DRAM就直接返回指针,不在就LOAD IN 然后返回指针)
(When a mini page does not have enough memory left to serve
a request, it is promoted to a full page. 所以有full 这个指针)
在这里插入图片描述
P 要找cache line所在的pages, offset偏移, length n
如果p是FULL page,那指定的cache Lines 就load到DRAM 然后返回一个指向这个lines的指针(if not yet resident)
如果p是MINI PAGE那就先看 slots array 如果没有,就从NVM load进DRAM并且修改slots array,返回指针
访问的必须是连续的(也就是说如果要访问两个以上的CACHE LINE,他们必须是连续存储) 所有mini page是顺序的

如果MINI PAGE满了就所有数据复制到一个新分配的FULL PAGE结构,并且buffer manager 加一个指向新FULL PAGE的指针,然后旧的mini page 只清空数据,但是不消除这个表,也不删除buffer manager里指向他的指针

3.3 Pointer Swizzling

we introduce pointer swizzling, a technique that
reduces this overhead (mainly the page table lookup) by dynam-
ically replacing page ids with physical pointers
动态地把Page ids 替换成 直接指向他的指针,这样就能减少查PAGE ID再根据PAGE ID 去找PAGE 的开销

Pointer swizzling has recently been proposed in the context of
traditional buffer managers (DRAM + SSD/HDD) [ 17 ]



一些前提知识



数据在内存 都是 以虚拟地址形式存在
在这里插入图片描述
在这里插入图片描述

swizzle = replace
Pointer Swizzling = the database addresses in data blocks/records are replaced by virtual memory addresses when the referenced data block/record resides in memory
就是把物理地址替换成内存虚拟地址

在这里插入图片描述
在这里插入图片描述

Problems created by the Pointer Swizzling technique

1.写回去DB的时候必须把指针恢复成DB物理地址
在这里插入图片描述
解决方案:穷举 映射表,或者 用HASH 表

2.想释放一个block 必须先把和他相关联的指针(指向虚拟地址) 恢复成指向物理地址的指针
在这里插入图片描述
在这里插入图片描述

这些被替换后的指针指向的块 叫做 pinned block 因为,他们只有当指针恢复指向DB物理地址的时候才能 release
解决办法:映射表引入Linked List 指向 指向他的第一个BLOCK



前提知识结束回到这篇论文的 POINTer SWIZZLING



在这里插入图片描述
同样的 swizzled leaf是不能直接swap out的
首先是修改父节点的cnt -1,然后把指针修改成PID

4 THREE-TIER BUFFER MANAGEMENT

再加一个SSD
这不会加快速度,但是增加数据存储量

现实中的数据都是hot data cold data 夹杂一起,所以要把少量Hot data放在DRAM ,COLD data放到别的地方, 而NVM的容量有限,如果采用大容量的NVM ,经济开销很大,所以引入SSD.

Our layered approach solves this problem by providing close to
main memory speed for the hot data (provided it fits into DRAM)
while also supporting cheap SSD storage for cold data in a single
system

4.2 repalce Strategies

有两个buffer pools (DRAM 和 NVM)
在这里插入图片描述

Combined Page Table

如果工作量可以在NVM里执行,那么第三层SSD ,就可以不使用了,.所以作者在BUFFER MANAGER中 指向DRAM 或者指向NVM
然后DRAM的PAGE头文件再加一个指针 指向NVM
在这里插入图片描述

The page mapping table is performance critical and is therefore
stored in DRAM.

重启的时候需要扫描整个NVM page 来建立这张表 到DRAM 中,所以需要等待一点时间才能开始进行事务…(在慢的硬件实行不了这个东西例如FLASH,NVM可以)

Reading the page identifiers for 100 GB
of NVM takes slightly less than 1 second

总结一下

他们的BUFFER MANAGER
1初始dram中仅仅有个空白nvm page指针,指向nvm相应的page,但是没有数据,事务来了再去检索nvm 相应page 的相应cache line,所以要有resident信息,dirty信息用来到时候writeback, NVM指针用来按需的取cache line,(16kb的page 有256个cache lien)
2.mini page中的slots指示cache line在nvm的位置

http://www.mathcs.emory.edu/~cheung/Courses/554/Syllabus/2-disks/pointer-swizzling.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值