深入理解SPDK NVMe/TCP transport的设计

编程入门 行业动态 更新时间:2024-10-06 22:33:09

深入理解SPDK <a href=https://www.elefans.com/category/jswz/34/1716893.html style=NVMe/TCP transport的设计"/>

深入理解SPDK NVMe/TCP transport的设计

一. 简介

NVMe/TCP transport是NVM express这个标准组织为NVMe over Fabrics(NVMe-oF) 制定的一个基于TCP的新的传输层。这个Technical proposal (TP 8000)自去年11月份发布以来,相应的代码在内核态(Linux kernel)和用户态(SPDK库)中均有了支持。

二. SPDK NVMe/TCP

代码解析

总的来讲,SPDK NVMe/TCP transport的整个设计遵循了SPDK无锁,轮询,异步I/O的理念,如Table1所示。根据TP8000 specification中的定义,每个TCP连接(TCP connection)对应于一个NVMe的qpair。在SPDK的实现中,我们依然采用group polling的方法来管理所有的TCP连接。每一个SPDK thread上运行一个TCP相关的polling group,每一个TCP连接只会被加入一个TCP polling group中,由这个polling group处理后续的所有事件,那么这个TCP连接将会被唯一的CPU core处理,这样就不会存在CPU的竞争情况:不同CPU竞争处理同一个TCP connection。这样的设计在很大的层面上避免了CPU资源的竞争。另外目前存在很多用户态的TCP协议栈,为此SPDK封装了一些socket API相关的操作。目前,NVMe/TCP的实现代码直接使用SPDK封装的API进行socket的操作,如此一来,我们可以接入不同种类的Socket API实现,诸如VPP,mTCP,fstack,seastar等。只要能够实现SPDK socket API所定义的抽象函数,就可以整合到SPDK的sock库中。

更多推荐

深入理解SPDK NVMe/TCP transport的设计

本文发布于:2024-02-28 08:18:04,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1769077.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:NVMe   SPDK   transport   TCP

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!