分布式系统学习——NVM相关资料整理
Non-volatile memory - Wikipedia
Persistant memory fs
Better I/O Through Byte-Addressable, Persistent Memory
问题:原来的存储系统都是基于慢的,块设备接口。但是新的存储介质是基于字节,永久性存储技术,提供快的,细粒度的访问。
设计新的 FS 和硬件结构,适应字节寻址和可持久性。
应用
非易失性内存在阿里生产环境的首次应用:Tair NVM 最佳实践总结
构建在缓存场景,作为 DRAM 的补充。
使用方式
- Tair MDB 使用 NVM 设备的方式,是把 NVM 以块设备的形式使用 Pmem-Aware File System 挂载(DAX 挂载模式)。分配 NVM 空间对应的操作是在对应的文件系统路径上创建并打开文件,使用 posix_fallocate 分配空间。
会议笔记
PM 的使用方式
- Memory 使用
- Persistent Storage 使用(一般)
- Persistant Memory 使用
需要再查的事情
- Persistent Memory 完全替代(几乎完全)
- 失去了 log 的功能
- DRAM 和 Persist Memory
- 还存在 log 功能
- File Emulation with DAX(FLEX)
- RocksDB
- Google 2019
- falloc 预分配文件空间会好很多
- open 替代为 open+mmap 操作
- Tim Harris
- SplitFS
- nova 里面做了哪些数据结构
- LSM Tree
我自己可以做的事情
- 复现一下 Nova(机器上已经在跑了) 做一些 bench mark
- Li 建议可以在上面多跑一些应用,其他数据的可以。
科研方向
- BloomFilter(写放大问题的研究,好像又没必要)
6.12 会议记录
下面是 6.12 的会议记录
B-Tree、LSM Tree()、SQL
张:从应用角度去考虑,更好一些?结合场景的应用。
李:三种应用场景:Memory 扩展、Persistant Storage、Persistant Memory。KV 也有一些工作。在文件系统层次上可以做一些应用,做一些密集访问文件系统的应用。另外一个就是研究数据结构,数据结构放在这个设备上,同步上做的时候,要不要改变。
张:文件系统都属于 Kernel 态,用户操作都在用户态 User 态,一次系统调用(system call)就超过了你在 kernel 里面做的优化了。
李:SplitFS 是这种思路,转换了一部分操作到 User 态。
张:是数据操作还是/操作仍旧放在了内核态(一部分),所以还是一部分。
李:SplitFS 能力比 NOVA 大四倍。LevelDB 在上面变成两倍。
张:LevelDB 还是一个 CPU bound(嘿嘿嘿),所以现在还有一个思路就是换其他数据结构,可能 Hash Table。
关于网络方面的研究
张:RDMA 跟 TCP/IP 有了差距,Memory 通过 RDMA 暴露给 Leader,Leader 可以直接在后面 append。Raft 和 Paxos 是针对传统 TCP/IP,RDMA 不一样,有了
在 PM 上做一个分布式的 Hash Table。分布式存储里面的一个特点,粒度越细,数据量越多。之前一个问题,元数据过多,大于 Memory 的容量,导致部分存储在磁盘,性能就不好了。有的用很大的 Memory 来保护这些元数据。如果有分布式的 PM 上的 Hash Table,就会对上层编程提供很大便利。
元数据的 bottle neck
张:举个例子,在元数据看,每数据粒度(一个 block)为 256MB 有一个元数据的记录,只有这样可以把元数据压在一个内存中。如果有 Hash Table,就可以缩小粒度!写程序会非常方便!,这是一个 Performance 上的体验。
LevelDB 提供原子性,就已经提供了很多很大的便利。
从需求的角度来看,非常需要PM 上的 Hash Table。
张:怎么做 Replication 是个非常有意思的地方,一种是 RDMA+??、一种是 Raft 这种 Replication。
李:是一直在跑 Raft 么?选举,replication 也是用 raft。
张:选举的时候用 Raft(或者 Paxos),replication 上不全用 Raft,比如 kernel write(没听清)??
张:inline replication 整个流程:server 中写 4K 的数据,inlin replication 首先在 hash table(分布式/单机)查一下有没有这个 key,在另一个 teble 上 查,发挥结果。miss 的话,读一次磁盘,然后插入新 key 再插入。
李:解释一下,写操作一次,两次元数据操作+一次数据操作。由于磁盘持久化本来是负担很大的事情。
张:关注的一个参考的内容 Intel DAOS
落脚点:分布式哈希 Table (DHT)与 PM 结合
学长:Hardware TSX(Transactional Synchronization Extensions)
李,张:提到的是最近没什么人提到了,Software 这类是架了一层中间件,Hardware 是纯粹的硬件层。
ACID:
李:把 Transaction 分成两部分,PM+RMDA 高速网络环境下,
张:总结,分布式 hash 与 PM 结合是个最终目标。一步一步,分布式的 Hash Table 就很难了,ReHash(扩容),静态的意义不大,现在的意义。
李:下一步地再做,带 Transaction 的 Hash Table。
张:现有 DHT 和我们所想的不大一样,是一种寻址的算法和方式。但我们想要的是一个的确能在机器上运行的内存中存在的分布式 Hash Table。
1 |
|
6.19 会议记录
下面是 6.19 日会议记录
Paper1: Using RDMA Efficiently for Key-Value Services
Paper2: FaRM
- Fast Remote Memory
- 微软?
- 构建的是面向内存的,分布式 KV-Store(我们是研究 PM 上的)
- 李:我们是希望用 PM 的特性,这里面是不是有一些冗余部分(一致性部分?)
- 张:做的是分布式内存管理,可以作为我们研究的基础,但是应用场景有下列不同
- 第一个:还是一个 Memory 的结构,感觉这个并不符合每个操作 Atomic(虽然有日志)
- RDMA 操作 PM 和 DM 不同,操作 DM(无论写在哪里)都告知成功了,操作 PM 不能确定写持久化了。
- 张:RDMA 对面是内存,那不能确定持久化了(还需要一次 commit 操作),如果 RDMA 对面是 PM,那就可以省去 commit。
李:核心问题:RDMA 和关注两个 CC,Concurrency Control、Commit Control
- 张:里面还是有一些 miss-match 的地方,这些都是基于 DM 的工作,而 PM 有一致性的地方。
李:提供一篇对 RDMA 更好的论文
Paper3:Design Guidelines for High Performance RDMA Systems
用于分布式系统元数据管理的 workload 需求?(张总的需求?)
张:文件系统元数据与 KV 的区别
- 文件系统元数据树形,有时候要考虑锁
- 文件系统元数据设计一般不考虑横向扩展性(Octopus 好像有个扩展)
李:张总那边的 Workload 的特征?
张:
- 分布式可横向扩展:CPU 和内存容量要同步横向扩展,扩展 memory,现今情况都会带 cpu,可以利用上。仔细想一下其中的通信
- client-server:发送请求
- server-server:跑 Paxos 协议?
- 一种是提交给一台机器,然后 log replication,另一种是提交给多台机器。
- 李:不考虑 logging,用 CoW、Shadow 尝试下。现阶段 log 是 sequential 的,然后 batch 到一起往下刷(这样就很快),我问的问题的回答:batch 的性能优化体现在, function call,(函数调用、系统调用、网络调用)如果能 batch 到一起的话,能极大的降低 overhead 和 latency。
后续的工作:
- SmartX 的需求:K-V 来做文件系统元数据,常见的操作有哪些
- 考虑把 FaRM 搬到 PM 上
- RDMA 和 PM 结合
6.19 Summary
Read more papers on RDMA usage in distributed systems:
- FaRM: Fast Remote Memory
- Using RDMA Efficiently for Key-Value Services
- Design Guidelines for High Performance RDMA Systems
- Deconstructing RDMA-enabled Distributed Transactions: Hybrid is Better!
- Orion: A Distributed File System for Non-Volatile Main Memory and RDMA-Capable Networks
Find suitable model for distributed key-value store:
- Partition
- Caching
- Local data structure
- Space allocation
- Replication
- how to use RDMA more efficiently
- How to make better use of servers' CPU
- How to implement atomicity/transaction
Evaluate FaRM on our machines
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!