Linuxシステムがio_uringをサポートしていることを確認したいと思います。これはどのように達成できますか?
これに対するサポートを説明するカーネル文書がありますか、それともすべてのLinux 5.1+カーネルがそれをサポートしますか?
ベストアンサー1
io_uring
ユーザーに表示される機能を公開しません。例えば;として、sysctl
新しいシステムコールのみが公開されます。カーネル 5.1 以降では利用できますが、サポートはコンパイルでき、一部のシステムでは古いカーネルにバックポートされる場合があります。
したがって、サポートを確認する最も安全な方法は、io_uring
システムコールが可能かどうかを確認する。ある場合は、/proc/kallsyms
以下から確認できます。
grep io_uring_setup /proc/kallsyms
システムコールを確認するもう1つの方法は安全ですが、型が正しくない呼び出しを試み、結果のエラーが次のようになることをENOSYS
確認することです。
#include <errno.h>
#include <linux/io_uring.h>
#include <stddef.h>
#include <sys/syscall.h>
#include <unistd.h>
int main(int argc, char **argv) {
if (syscall(__NR_io_uring_register, 0, IORING_UNREGISTER_BUFFERS, NULL, 0) && errno == ENOSYS) {
// No io_uring
} else {
// io_uring
}
}
サポートされているカーネルでは、io_uring
新しいカーネルバージョンが新機能を導入するにつれて、利用可能なアクションが変更されます。使用io_uring_get_probe
。