Linuxシステムがio_uringをサポートしているかどうかを確認するには?

Linuxシステムがio_uringをサポートしているかどうかを確認するには?

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

おすすめ記事