入选数据库顶会 VLDB:如何有效降低产品级内存数据库快照尾延迟?
💡
原文中文,约11400字,阅读约需28分钟。
📝
内容提要
阿里云操作系统团队、阿里云数据库团队和上海交通大学新兴并行计算研究中心联合撰写的论文“Async-fork”提出了一种解决IMKVS快照期间查询延迟大幅增加的问题的方法,将fork调用过程中最耗时的页表拷贝部分从父进程移动到子进程,并设计了一种主动同步机制,确保PTE在修改前被复制到子进程,实验结果表明,Async-fork显著减少了快照期间到达请求的尾延迟。引入双向指针,用于快速判断一个VMA的所有页表项是否已经复制到子进程,以及错误处理。
🎯
关键要点
- 阿里云和上海交通大学合作的论文提出了Async-fork,解决IMKVS快照期间查询延迟问题。
- IMKVS使用fork系统调用获取内存数据快照,但会导致查询延迟增加。
- Async-fork将耗时的页表拷贝从父进程移动到子进程,父进程可快速返回用户态。
- 设计了一种主动同步机制,确保父子进程数据一致性,实验结果显示显著减少了尾延迟。
- 默认fork的页表复制耗时占比超过97%,Async-fork优化了这一过程。
- 共享页表方法虽然能减少延迟,但引入了数据泄漏漏洞,不适用于IMKVS。
- Async-fork的设计确保了父子进程拥有独占页表,避免了数据一致性问题。
- 实现过程中面临页表异步操作导致快照不一致的挑战,设计了主动同步机制来解决。
- 引入双向指针以快速判断VMA的页表项是否已复制到子进程,并用于错误处理。
- Async-fork在Linux中实现,支持多架构,用户可选择使用默认fork或Async-fork。
- 实验结果表明,Async-fork在快照期间的尾延迟显著低于共享页表的ODF方法。
- 在生产环境中,Async-fork的使用显著降低了Redis的请求延迟,提升了性能。
➡️