[PHP] Docker 환경에서 Swoole v6.x 를 사용할 때, io_uring 관련 에러가 나오는 이유 - 리무스BBS

Docker 환경에서 Swoole v6.x 를 사용할 때, io_uring 관련 에러가 나오는 이유

문제의 인식

swoole v6.0.0 이후로 file io를 위해 liburing 을 사용한다. io_uring 관련된 내용은 아래 게시글 참조.

그런데, liburing이 정상적으로 설치되어 있는데도 불구하고, 다음과 같은 오류가 발생하면서 file io 관련된 php 함수들이

작동하지 않는 문제가 발생하였다.

Iouring::Iouring() (ERRNO 502): Create io_uring failed, the error code is 1

테스트

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <liburing.h>
#define QUEUE_DEPTH 1
#define FILE_NAME "/tmp/test_io_uring.txt"
int main() {
   struct io_uring ring;
   int fd;
   // 파일 생성
   fd = open(FILE_NAME, O_WRONLY | O_CREAT | O_TRUNC, 0644);
   if (fd < 0) {
       perror("open");
       return 1;
   }
   // io_uring 초기화
   if (io_uring_queue_init(QUEUE_DEPTH, &ring, 0) < 0) {
       perror("io_uring_queue_init");
       close(fd);
       return 1;
   }
   // SQE (Submission Queue Entry) 생성
   struct io_uring_sqe *sqe = io_uring_get_sqe(&ring);
   if (!sqe) {
       fprintf(stderr, "Failed to get SQE\n");
       io_uring_queue_exit(&ring);
       close(fd);
       return 1;
   }
   char buffer[] = "Hello io_uring!";
   struct iovec iov = {
       .iov_base = buffer,
       .iov_len = strlen(buffer)
   };
   // io_uring에 쓰기 요청 추가
   io_uring_prep_writev(sqe, fd, &iov, 1, 0);
   io_uring_submit(&ring);
   // 완료 대기
   struct io_uring_cqe *cqe;
   io_uring_wait_cqe(&ring, &cqe);
   // 결과 확인
   if (cqe->res < 0) {
       fprintf(stderr, "io_uring write failed: %d\n", cqe->res);
   } else {
       printf("io_uring write success, wrote %d bytes\n", cqe->res);
   }
   // 정리
   io_uring_cqe_seen(&ring, cqe);
   io_uring_queue_exit(&ring);
   close(fd);
   return 0;
}
apk add build-base linux-headers liburing-dev
gcc test_io_uring.c -o test_io_uring -luring

 

여튼 실행을 해 보고, 다음과 같은 결과가 나오면 정상인데… 이렇게 나오지 않았다.

io_uring write success, wrote 15 bytes

 

해결책

docker run --rm --security-opt seccomp=unconfined alpine ./test_io_uring

version: '3.8' 
services:
  alpine-container:
    image: alpine:latest
    container_name: alpine_io_uring
    security_opt:
      - seccomp=unconfined
    # 후략

 

#swoole-6 #liburing #iouring오류

----------

머루아저씨
✨ Full-stack Developer | 최신 기술 애호가
💻 현개발환경: PHP 8.3, Swoole, MongoDB, Redis, Docker
⚙️ Ubuntu/Linux 환경 & VS Code SSH 기반 작업
📚 "지속 가능한 개발, 효율적인 코드"를 지향합니다.