gpt4 book ai didi

linux - 为什么 io_submit(..., nr, ...) 提交的请求可能比 nr 少?

转载 作者:太空狗 更新时间:2023-10-29 12:09:06 26 4
gpt4 key购买 nike

我正在使用 nr 高达 128 的 io_submit(..., nr, ...),但我提交的请求通常较少。

根据手册IO_SUBMIT(2) ,这是合法的,但我想知道:为什么?此外,有没有一种方法可以立即知道提交了哪个请求 - 而无需检查 io_getevents()

来自手册:

On success, io_submit() returns the number of iocbs submitted (which may be less than nr, or 0 if nr is zero). For the failure return, see NOTES.

最佳答案

您提交的结果较少的一个可能原因是您已达到 128 个未完成请求的限制。也许你用 128 调用了 io_submit,然后在所有 128 请求完成之前再次调用它?查看您设备的 sysfs 中的 nr_requests 条目,了解其愿意处理的请求数量限制:

# cat /sys/block/sda/queue/nr_requests
128

由您的代码来跟踪有多少未完成的请求,并避免尝试调用 io_submit 来处理超过此限制的大量请求。

现在,这可能不是您的调用提交的请求少于请求的原因。如果你看the kernel source, in fs/aio.c ,您可以在 __io_submit_one 中看到所有可能触发短响应的失败条件。其中一个请求可能存在参数问题,或者它可能无法为 kiocb 分配 slab 内存等。但最有可能的是 aio_get_req 由于以下原因而失败nr_requests 队列深度限制。

如果您查看同一文件中的 SYSCALL_DEFINE3(io_submit...,您会发现很容易找出哪些请求未提交。它只是您传递的数组中的位置到io_submit。例如,如果io_submit返回5,那么你就知道你在数组索引0-4中提交的请求已经提交. 任何介于 5 和 nr - 1 之间的都没有提交。

关于linux - 为什么 io_submit(..., nr, ...) 提交的请求可能比 nr 少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54424281/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com