0

我正在为 nvme-cli 开发一个测试工具(用 c 编写并且可以在 linux 上运行)。

出于 SSD 验证的目的,我们实际上是在寻找将 I/O 命令发送到特定的提交队列(IO 队列对)。我们需要这个是因为我们想要线程化,但是为了实现线程化,我们需要将 I/O 请求发送到不同的队列,否则 I/O 请求将被串行处理。

那么在 ioctl() 中有什么方法可以指定提交队列 ID 吗?

这是请求 nvme IO 的方式ioctl()

 ioctl(fd, NVME_IOCTL_SUBMIT_IO, &io);

nvme_ioctl()在驱动程序中调用!

nvme_ioctl()实习生在这里调用nvme_submit_io()函数!

nvme_submit_io()有一个参数struct nvme_ns *ns,其中结构在这里有一个字段名称queue视图

我想知道我们是否可以ioctl()使用附加的新参数来调用,该参数queue_id将分配给函数中的queue字段。struct nvme_ns *nsnvme_submit_io()

我能知道我们是否可以这样做吗?

如果是,请给我一些简短的步骤。如果否,请建议我任何可能的解决方案。

由于我是 nvme 或 ioctl 的新手,如果我错了,请纠正我。

4

1 回答 1

0

稍微看进去nvme_submit_io(),这里调用nvme_submit_user_cmd() Refer。你会看到nvme_alloc_request(q, cmd, 0, NVME_QID_ANY)。请求分配到NVME_QID_ANY意味着它不指定 QID 并让硬件队列映射来决定要发送哪个队列。

回到你的问题。AFAIK,在发送 ioctl cmd 时没有本地方法来指定 QID。如果你真的想。您需要修改本机 nvme 源代码并构建自己的 nvme 驱动程序。

提示:尝试让nvme_alloc_request可以接收指定的 QID,而不是NVME_QID_ANY.

于 2021-10-22T06:29:55.477 回答