本文介绍了Linux中的ioctl()是否可以为NVMe IO请求指定提交队列ID的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在开发一个nvme-cli的测试工具(用c编写,可以在Linux上运行)。
出于SSD验证的目的,我们实际上正在寻找将I/O命令发送到特定的提交队列(IO队列对)。我们需要它,因为我们想要线程化,但要实现线程化,我们需要将I/O请求发送到不同的队列,否则I/O请求将被连续处理。
那么在ioctl()中有什么方法可以指定提交队列ID吗?
以下是使用ioctl()
ioctl(fd, NVME_IOCTL_SUBMIT_IO, &io);
这将在驱动程序中调用nvme_ioctl()
here!
nvme_ioctl()
实习生调用nvme_submit_io()
函数here!
nvme_submit_io()
具有参数struct nvme_ns *ns
,其中结构具有字段名queue
view here!
我想知道我们是否可以使用要分配给nvme_submit_io()
函数中struct nvme_ns *ns
的queue
字段的附加新参数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,让硬件队列映射决定发送哪个队列。
提示:尝试让nvme_alloc_request
可以接收指定的QID,而不是NVME_QID_ANY
。
这篇关于Linux中的ioctl()是否可以为NVMe IO请求指定提交队列ID的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!