本文介绍了Linux中的ioctl()是否可以为NVMe IO请求指定提交队列ID的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发一个nvme-cli的测试工具(用c编写,可以在Linux上运行)。

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

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

以下是使用ioctl()

请求NVMe IO的方式
 ioctl(fd, NVME_IOCTL_SUBMIT_IO, &io);

这将在驱动程序中调用nvme_ioctl()here

nvme_ioctl()实习生调用nvme_submit_io()函数here

nvme_submit_io()具有参数struct nvme_ns *ns,其中结构具有字段名queueview here

我想知道我们是否可以使用要分配给nvme_submit_io()函数中struct nvme_ns *nsqueue字段的附加新参数queue_id来调用ioctl()

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

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

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

推荐答案

稍微查看一下nvme_submit_io(),它调用nvme_submit_user_cmd()Refer here。您将看到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

这篇关于Linux中的ioctl()是否可以为NVMe IO请求指定提交队列ID的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-30 07:44