泛读笔记:《dLSM: An LSM-Based Index for Memory Disaggregation》
文章发布时间:
最后更新时间:
文章总字数:
预计阅读时间:
页面浏览: 加载中...
最后更新时间:
文章总字数:
862
预计阅读时间:
3 分钟
页面浏览: 加载中...
1. 摘要
新兴趋势内存分离(memory disaggregation)将CPU和内存物理上分开,并通过超快的网络(如 RDMA)连接。这使得计算(CPU)和主内存可以弹性地独立扩展。本文研究了如何在内存分离架构中高效设计索引。虽然现有的研究已对B树进行了优化,但其性能仍然一般。本文重点关注基于LSM树的索引,并提出了dLSM,这是首个针对分离内存高度优化的LSM树。dLSM引入了一系列优化措施,包括减少软件开销、利用近数据计算、针对字节寻址进行调优,以及以RDMA为例进行的定制化实现,以提升系统性能。实验结果表明,dLSM的写入吞吐量是优化后的B树和四种现有LSM树索引在分离内存上的适配的1.6到11.7倍。dLSM使用C++编写(约41,000行代码),并且是开源的。
2. 介绍
2.1. 面临的挑战
- 软件开销:高速网络大大拉近了访问本地和远端内存的性能鸿沟,相比于较慢的设备(SSD、HDD),使用分离内存时,软件开销更加突出
- 内存节点计算资源的利用:内存节点存在少量计算资源,具有提升性能的优化空间
- 字节寻址特性:相比于块寻址设备,内存节点时可字节寻址的,设计索引应当利用该特性
- 有效利用通信接口:比如单边、双边RDMA协议
2.2. 本文贡献
- 设计实现了一个分离式内存索引dLSM
- 减少软件开销:比如,减少了同步开销
- 近数据计算:把压缩操作下推给内存节点以减少数据传输
- 专门为字节寻址特性优化
- 专门为RDMA优化
2.3. 总览
3. 减少软件开销
- 使用无锁跳表
- 原子操作为每个写操作生成序列号
- 每张MemTable在生成时确定能插入的序列号范围,否则需要双重检查锁定来保证新MemTable中的数据比旧MemTable中的序列号大
4. 近数据处理
- sstable的压缩不需要太多计算资源
- 把sstable读到计算节点,压缩再写回有极大通信开销
- 挑战:
- 如何放置LSM树元数据来促进查询
- 如何GC
4.1. 元数据放置
- 元数据放置在计算节点
- 计算节点通过RPC发送压缩请求给内存节点,内存节点将压缩任务拆成子任务并行执行,执行完成后返回新元信息给计算节点,计算节点更新元信息使新sstable可见
- 元信息的更新使用排他锁同步,频率不高
4.2. GC
- 为内存节点压缩分配的空间由内存节点回收,计算节点分配的用于flush的空间由计算节点回收
- 计算节点调用RPC命令回收远端内存,回收命令批量打包发送来节省带宽
- 读之前建立元数据快照并pin住要读的sstable,读完后unpin
5. 为字节寻址特性进行的优化
- 点查直接返回一个kv数组而不是一块
6. 多节点
使用分片,计算节点数c,内存节点数m,每个计算节点分成λ片