上周综述
上周 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 工作从厂商转移到了应用方。