作者:Nick Connolly
文章来源:DPDK与SPDK开源社区
重磅消息:Windows和SPDK实现“世纪同框”了!在Windows系统上运行SPDK或将成为现实。
概况
在典型的数据中心中,大部分服务器将运行Microsoft Windows。这对扩展SPDK部署来说,蕴藏着巨大的开发潜力。由于SPDK使用的是POSIX API,基于SPDK的应用程序尚且无法在Windows上运行。为了解决这一问题,在SPDK的主要分支中引入一个简单的POSIX仿真层,以便在Windows上使用,从而实现与MinGW的交叉编译。
这会增加什么价值呢?下面列举了一些潜在用例:
- 通过本地NVMe-oF启动器提供对存储的访问。Windows没有内置的驱动程序,也没有任何纯软件解决方案。
- 提供对NVMe存储的快速访问,避免内核瓶颈。
- 构建iSCSI和NVMF存储目标。
- 集成到运行Windows Containers的环境中。
这是如何实现的呢?
提高可移植性
SPDK旨在能移植到不同的平台上,但是通过关注Linux和FreeBSD,一些小的假设已嵌入了代码中。例如:
- 在Windows上,long 是32位,而在Linux和FreeBSD上是64位。需要改变一些分配和转换,printf 必须使用 PRI64x 来打印 64 位值。
- 如果相邻定义的基本类型不同,位域的处理方式也会不同。
- POSIX mutex在使用前必须初始化。
只需作出极少的更改,这证明了SPDK代码的质量很高。
Windows平台开发套件
MayaData已启动了一个名为Windows 平台开发套件(WPDK)的新项目,提供在Windows上运行SPDK所需的POSIX功能。WPDK实现了一组头文件和一个专门满足SPDK需求的轻量级库。
该项目的范围仅限于SPDK支持。与Cygwin不同的是,它并非旨在成为通用的POSIX仿真库。它的功能尽可能地与现有的Windows语义相匹配,并尽量减少仿真。其目的是成为一个具有产品质量的软件层,能像本地代码一样运行,可以进行独立测试。
包含了构建SPDK所需的支持程序包(如libcunit),以简化WPDK的使用。
生成文件更改
SPDK makefiles 作出了一些战略性改变,扩展为:
1)用与DPDK类似的方式将WPDK合并到内部版本中(’—with-wpdk =
2)按照Windows的要求,生成以’.exe’结尾的可执行文件。
3)处理MinGW的特定属性,例如强制执行’-mstack-protector-guard = global’,防止出现堆栈保护错误。
现状
目前,该项目处于初期试验阶段:
- 除需要libcurses的spdk_top外,所有SPDK源代码都可以编译。
- 所有SPDK单元测试均通过。
- iSCSI目标可以为存储服务。
- NVMe over TCP目标可以为存储服务。
- SPDK堆栈可以连接到物理NVMe磁盘并发出I / O。
- WPDK的大部分功能都有单元测试。
未来发展方向
其目的是追求项目的产品质量,充分融入到SPDK CI和测试环境中。
入门指南
通过以下链接获取入门指南:
https://github.com/wpdk/wpdk/blob/master/doc/build-spdk.md
特别鸣谢
感谢SPDK社区的支持和鼓励,让这个“疯狂的想法”能在短期内变成现实中的一次尝试。
Windows平台开发工具包由Data Agility公司MayaData开发并提供。
部分代码基于DPDK社区所做的工作,以添加对Windows的支持。
原文作者:Nick Connolly