Ceph开发每周谈Vol 20 | NVMe Over Fabric/Kernel Multi Queue

2016年04月 · 麦子迈

这是Ceph开发每周谈的第二十篇文章,记录从16年4月18号到16年4月22号的社区开发情况。笔者从前年开始做Ceph的技术模块分析到今年中告一段落,想必有挺多人期待下一篇Ceph技术分析。考虑到Ceph的发展已经从前年的一穷二白到现在的如火如荼,但对于社区的方向和实况仍有所脱节,笔者考虑开始Ceph开发每周谈这个系列。每篇文章都会综述上周技术更新,围绕几个热点进行深度解析,如果正好有产业届新闻的话就进行解读,最后有读者反馈问题的话并且值得一聊的话,就附上答疑部分。

上周综述

上周 Ceph 完成 RC2 的 release 以后就正式开始合并新的 feature 和变动了。

NVMe Over Fabric

上周在 Linux Vault 一个重点 Session 就是 NVMe Over Fabric,来自 HGST,Samsung 和Intel 的工程师联合的 Working Group 经过长达一年多的时间终于接近完成 Kernel 的 NVMe Over Fabric项目。来自 Western Digital 的工程师给出了以下性能数据,这里剪辑如下:

over ib, 13 us qd=1 random read 10us for network contribution

over ib, adding polling on the host side, latency (end to end) 8us, network latency < 7s

非常简单,HGST Christoph Hellwig(multi-mq 原型作者),Intel 工程师 Jay主要讲了他们的一些设计和考虑,现场也问了一些非常尖锐的问题,直接涉及到 NVMe Over Fabric 的未来趋势,一个 Userspace 化,另一个是 NVMe Over Fabric 在作为客户端协议栈情况下的提升。前者 Jay 谈及 Intel内部的用户态实现(SPDK) 表示了一些隐晦的抗拒,后者实际上现场的作者都没有直接回答,而西部数据工程师展示的这部分数据也没有涉及到跟SCSI 的对比,实际上,以目前 Over IB 的情况来看,NVMe 的协议栈并没有带来本质性提升(Kernel 下)。传统 PCIE SSD 在本地 Memory 下使用 NVMe 协议栈效率的确非常高,但是涉及到远端网络和 multi mq 优化下,SCSI实际上也能有较好表现。特别是如果 NVMe Over Fabric 真正涉及到一个多节点存储系统时,这个接口协议所占延迟比例是值得考量的。

另一方面,NVMe Protocol 本身并没有在双活这些 SCSI 非常成熟的特性上规定,因此,同样需要在实现上加入,作者也谈到如果后端是RBD(Ceph Block Device) 会非常简单。另外就是,NVMe Over IP 也不是不可能,这也侧面反应了一些 NVMe Over Fabric 的窘境。

Multi Queue

Linux Vault 的另个重要 Session 是 Solving the Linux Storage Scalability Bottlenecks,来自 Facebook 的 FIO 作者 Jens Axboe 所演讲的,实际上就是从 VFS 到 Device 的Kernel Block IO Path,从 Jens 的观察看,VFS 和 BIO 层都有不错的并发度,但是在 Block Queue 和 SCSI 层面临巨大的锁冲突,通过 Submit 多队列,拿出 Completion Queue 的方式解决。如果底层 Device 支持 Hardware Multi Queue,那么 Soft Queue 会 M:N 的方式映射。Multi Queue 并不是很新,在3.13 就已经进内核了。这个 Session 主要揭示了在 Facebook 这种”大应用”公司下基础软件实现的重要性,大量的Kernel Performance 工作从厂商转移到了应用方。