IO_URING Register an eventfd


eventfd 등록

eventfd(2) 시스템 호출의 세부 사항을 다루는 것은 범위를 벗어납니다.   해당 시스템 호출에 대한 설명은 eventfd(2) 매뉴얼 페이지를 확인하는 것이 좋습니다.   eventfd(2)는 Linux 전용 동기화 메커니즘입니다.
https://man7.org/linux/man-pages/man2/eventfd.2.html

'io_uring'은 완료가 발생할 때마다 eventfd 인스턴스에 이벤트를 게시할 수 있습니다.   이 기능을 사용하면 poll(2) 또는 epoll(7)을 사용하여 I/O를 다중화하는 프로세스가 관심 목록에 'io_uring' 등록된 eventfd 인스턴스 파일 설명자를 추가할 수 있으므로 poll(2) 또는 epoll(7)은 'io_uring'을 통해 완료가 발생하면 이를 알릴 수 있습니다.   이를 통해 이러한 프로그램은 io_uring_wait_cqe() 호출에서 차단되는 대신 기존 이벤트 루프를 처리하는 데 바쁠 수 있습니다.

📦 How it works - 작동 원리

메인 스레드에서는 eventfd(2) 인스턴스를 생성합니다.   그런 다음 스레드를 생성하고, 이를 eventfd 파일 설명자에 전달합니다.   스레드에서 메시지를 출력하고 즉시 eventfd 파일 설명자에서 읽습니다.   eventfd 인스턴스에 아직 게시된 이벤트가 없어야 하므로 스레드가 차단됩니다.

자식 스레드가 eventfd 파일 설명자에 대한 읽기를 차단하는 동안 우리는 이 시퀀스를 명확하게 인식하기 위해 부모 스레드에서 2초 동안 대기합니다.   다음으로, setup_io_uring()에서 io_uring 인스턴스를 생성하고 이에 eventfd 파일 설명자를 등록합니다.   이렇게 하면 'io_uring'이 모든 완료 이벤트에 대해 이 'eventfd'에 이벤트를 게시하게 됩니다.

그런 다음 메인에서 read_file_with_io_uring()을 호출합니다.   여기에서는 파일 읽기 요청을 제출합니다.   그러면 'io_uring'이 등록된 eventfd 인스턴스에 이벤트를 게시하게 됩니다.   이제 Listener_thread()가 차단된 read(2) 호출이 차단을 해제하고 실행을 계속해야 합니다.   이 스레드에서는 완료을 가져오고 데이터를 출력합니다.

Note
eventfd_read()는 'glibc'에서 제공하는 라이브러리 함수라는 점에 유의하세요.   본질적으로 'eventfd'에서 읽기를 호출합니다.

⚛ 원문

Email 답글이 올라오면 이메일로 알려드리겠습니다.