io_uring_0304
IO_URING Setup and tear down
Setup and tear down
이 섹션에서는 프로그램에서 io_uring 사용을 설정하고 해제하는 데 도움이 되는 함수에 대해 설명합니다.
📦 struct io_uring
📦 struct io_uring_sq
📦 struct io_uring_cq
📦 int io_uring_queue_init(unsigned entries, struct io_uring *ring, unsigned flags)
프로그램에서 사용할 수 있도록 'io_uring'을 초기화합니다.
'io_uring'으로 다른 작업을 수행하기 전에 이 함수를 호출하는 것이 좋습니다.
⦿ Parameters
• entries: 제출 대기열에 요청하려는 항목 수입니다.
각 요청에는 하나의 I/O 작업에 대한 세부정보가 포함됩니다.
• ring: 커널에 의해 채워질 io_uring 구조에 대한 포인터입니다.
• flags:전달하려는 플래그입니다. 자세한 내용은 'io_uring_setup()'을 참조하세요.
https://unixism.net/loti/ref-iouring/io_uring_setup.html#io-uring-setup
⦿ Return value: 반환 값: 성공하면 0을 반환하고 실패하면 -errono를 반환합니다.
strerror(3)를 사용하면 사람이 읽을 수 있는 실패 이유 버전을 얻을 수 있습니다.
📦 int io_uring_queue_init_params(unsigned entries, struct io_uring *ring, struct io_uring_params *p)
기능적으로 io_uring_queue_init()와 동일하지만 추가로 'io_uring_params' 구조에 대한 포인터를 사용하여 사용자 고유의 'io_uring_params' 구조를 지정할 수 있습니다.
io_uring_params 구조에서는 다양한 플래그를 설정하는 데 사용할 수 있는 플래그와 CPU 선호도를 설정하고 대기열 유휴 시간을 제출하는 데 사용되는 sq_thread_cpu 및 sq_thread_idle 필드만 지정할 수 있습니다.
구조의 다른 필드는 반환 시 커널에 의해 채워집니다.
io_uring_queue_init()를 사용할 때 이러한 값을 지정할 수 없습니다.
이 함수가 있으면 이 문제가 해결됩니다.
📦 int io_uring_queue_mmap(int fd, struct io_uring_params *p, struct io_uring *ring)
이는 io_uring 초기화의 많은 측면을 제어하려는 경우에만 사용하고 싶은 하위 수준 함수입니다.
이 함수를 호출하기 전에 이미 낮은 수준의 io_uring_setup()을 호출했어야 합니다.
그런 다음 이 함수를 사용하여 링을 mmap(2)할 수 있습니다.
⦿ Parameters
• fd: io_uring_setup()이 반환한 파일 서술자
• p: 'io_uring_params'에 대한 포인터
• ring: 'io_uring'에 대한 포인터
📦 int io_uring_ring_dontfork(struct io_uring *ring)
링 매핑을 상속하는 프로세스의 자식 프로세스를 원하지 않는 경우 이 호출을 사용하십시오.
⦿ Parameters
• ring: io_uring_queue_init()에 의해 설정된 'io_uring' 구조입니다.
⦿ Return value: 성공하면 0을 반환하고 실패하면 -errono를 반환합니다.
strerror(3)를 사용하면 사람이 읽을 수 있는 실패 이유 버전을 얻을 수 있습니다.
📦 void io_uring_queue_exit(struct io_uring *ring)
'io_uring'에 대한 분해 함수입니다.
모든 설정 공유 링 버퍼의 매핑을 해제하고 커널에서 반환된 하위 수준 io_uring 파일 서술자를 닫습니다.
⦿ Parameters
• ring: io_uring_queue_init()에 의해 설정된 'io_uring' 구조입니다.
