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_URING
y 또는 n, 활성화 또는 비활성화가 포함되어야 합니다.