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

시스템 호출을 확인하는 또 다른 방법은 안전하지만 형식이 잘못된 호출을 시도하고 결과 오류가 다음 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.

답변2

Linux 5.1 이상에서 사용 가능하며 컴파일 중에 활성화할 수 있습니다. Debian 및 그 파생 제품에서는 파일에서 컴파일 중에 사용되는 커널 옵션을 찾을 수 있습니다 /boot/config-{kernel version}-{arch}. UEFI 시스템에서는 이 경로가 다를 수 있습니다.

그러니 입력하세요.
grep -i uring /boot/config-$(uname -r)

출력에는 CONFIG_IO_URINGy 또는 n, 활성화 또는 비활성화가 포함되어야 합니다.

관련 정보