我正在构建一个项目,需要重写一个新的 I/O 堆栈,向 NVMe SSD 发出 I/O 请求,目前我正在使用 SPDK 编写一个原型来测试初步性能。我需要使用许多基准测试,例如 MySQL 工作负载和 YCSB,来测试性能。但是,由于 SPDK 实现了一个不由操作系统处理的独特 I/O 堆栈,因此我无法在 Linux 下将 NVMe SSD 作为常规块设备进行访问。而且SPDK仅支持使用RocksDB和FIO进行测试,因此我无法像往常一样使用基准测试来进行测试。
因此,我的问题是,如何将 SPDK 管理的 NVMe SSD 暴露为 Linux 下的常规块设备,同时仍然使用我的 I/O 堆栈处理对 SSD 的 I/O 请求?我听说这个功能是由SPDK开发人员启用的,但我找不到如何做到这一点。谢谢。
ublk Target (https://spdk.io/doc/ublk.html) 将在这里提供帮助。
另一种方法是通过 nvmeof 创建远程目标。 Linux 内核 nvme 将能够通过 nvmeof 连接到远程目标 (https://spdk.io/doc/nvmf.html)。