-
Notifications
You must be signed in to change notification settings - Fork 43
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
无法支持SQPOLL的原因是什么呢? #16
Comments
当时对于这个问题的判断是因为只设置了 SQPOLL,忽视了 IOPOLL,所以没有正常运行,考虑到 Go 相比 C 来说比较特殊的就是他的 gmp 模型,没有深究就暂时感觉也许是这个问题引起的。 我也试了一下 SQPOLL 和 IOPOLL 同时开启后,的确可以正常运行,但是 IOPOLL 和 SQPOLL 应该是两个单独的功能,不太应该有很深的互相影响,而且在 C 中好像单独使用 SQPOLL 是没有问题的,可能还需要再研究一下。 @Cloudstriff 请教一下,对于 go 中必须同时开启 SQPOLL + IOPOLL 有什么思路吗 |
@Iceber 你好,我这边对Go程序的实际测试,只开启SQPOLL或者IOPOLL都是能work的,无论nvme设备io_poll是否开启,都能正常提交和收割IO结果。只是设备io_poll打开时,走poll模式相比中断请求整体时延会更低。但没有遇到你说的只设置SQPOLL无法正常运行的问题 |
@Cloudstriff 我的测试方法是修改 https://github.com/Iceber/iouring-go/tree/main/examples/mv,开启 SQPOLL,你的测试方法是什么呢,你的环境可以试一下修改 mv ,观察是否可以正常运行吗 |
@Iceber 我这边是用的向量读readv直接操作nvme设备,没有试过mv操作是否可行,我试下 |
注意到 mv 执行时使用的不是 |
@Iceber 我测试了下,用上面的例子和iouring-go的库确实会阻塞住,但是我自己改造的uring库是可以执行成功的: |
但是在 Go 简单的设置 io_uring_params 并不能正常的工作,可能是由于 Go 的 GMP 模型导致的一些问题。暂时还在思考解决方案
这里我有些疑惑,我在5.18.10-1.el7.elrepo.x86_64 + INTEL SSDPE2KX040T8 的环境下,SQPOLL+IOPOLL同时开启时能正常work,并没有遇到所谓的因为CMP模型导致的一些问题。
查看iouring.c的实现,开启SQPOLL后也只是简单的创建和开启后台worker线程而已,这里似乎跟go的并发模型没有什么关系
The text was updated successfully, but these errors were encountered: