(一)研究目的
结合PM设计高效的键值存储。
(二)研究背景
如何设计高效的键值存储来处理写密集型和小型工作负载具有现实需求。新兴的网络和存储技术(InfiniBand和PM)带来了新的机会。研究表明键值存储产生了大量的 small-sized write,写放大问题极大地浪费了硬件带宽。最近基于PM的研究主要采用日志结构来确保故障原子性或减少内存碎片,没有探究使用批处理来分摊持久化开销。
现有键值存储中的小型访问模式与pm的持久性粒度之间不匹配
- 生产环境中键值存储的工作负载大部分都是小型键值项,且从读密集转向写密集。
- cacheline的刷新粒度是64B,而PM内部的写粒度是256B,键值存储的写大小与硬件的更新粒度不匹配,极大地浪费了PM带宽。
解决这种不匹配的一个经典解决方案是合并日志结构,通过始终将更新附加到日志尾部来形成连续写入。日志结构还允许批量处理多个小更新。因此,只需要一次刷新数据的开销。然而在基于PM的系统中的应用日志结构更具挑战性:
- 日志结构的追加写入对顺序写性能好的HDD和SSD友好,而高并发下PM的顺序访问和随机访问性能相似,不能从顺序访问受益。
- HDD和SSD的刷新粒度大(4KB),批量刷新的数量大。而PM的访问粒度小(64B刷新大小和256B内部块大小)且需要封装额外的元数据,限制了批量刷新的数量。
- 批处理增加了延迟(系统在处理请求之前需要积累多个请求)。批处理与高速网络的设计原则相冲突。
Optane DCPMM 的实证研究
图b显示:高并发情况下,PM的顺序访问和随机访问具有相似的带宽。少于20个并发线程时,顺序访问的带宽是随机访问的带宽的两倍或更高。从硬件的角度看,高并发情况下因为每个线程写入不同的地址,顺序访问实际上变成了随机访问。
图c显示:当一个写操作通过clwb被刷新,随后对同一cacheline的写和刷新将被阻塞近800ns(图c中的In-place)。这对采用原地更新方式的系统是一个大问题。
(三)研究概述
将键值存储解耦为一个用于快速索引的易失性索引和一个高效存储的持久日志结构,引入 compact log format
和 pipelined horizontal batching
从而实现高吞吐量、低延迟和多核可伸缩性。
(四)关键技术
持久键值存储中的更新会引起写放大和缓存刷新。为解决这个问题,FlatStore将键值存储解耦为 a volatile index
for fast indexing·、a compacted per-core OpLog
to absorb small updates、a persistent allocator
for storing large KVs。
三个关键的设计原则:minimal write overhead(最小化写开销), low latency(低延迟), and multi-core scalability(多核可伸缩性)。
FlatStore的设计组件如上图所示:
- 客户端通过一个定制的RDMA RPC发送他们的请求到 server cores , server cores 是由键哈希确定的。server cores可以并行地将日志条目保存到本地OpLog中。
- 易失性索引避免 server cores 在处理get请求时扫描整个OpLog。
- Compacted OpLog 以批处理的方式吸收频繁的小型更新。为最大化批处理的机会