IO_URING Linking requests


연결 요청

'io_uring'에서는 제출된 순서대로 완료가 도착하지 않습니다.   이에 대해서는 하위 수준 'io_uring' 인터페이스 장에서 논의했습니다.   특정 작업이 순서대로 발생하도록 강제하려면 어떻게 해야 합니까?   이는 요청을 서로 연결함으로써 가능합니다.   여기의 예는 그 방법을 보여줍니다.

이것은 상당히 간단한 프로그램입니다.   빈 파일을 열고, 거기에 문자열을 쓰고, 파일에서 문자열을 읽은 다음 닫습니다.   'io_uring'은 제출된 작업이 순서대로 실행된다는 것을 보장하지 않으므로 우리 프로그램에 문제가 될 수 있습니다.   프로그램을 실행할 때마다 잘리는 빈 파일이므로 읽기 전에 쓰기 작업이 완료되지 않으면 읽을 내용이 없습니다.   또한 읽기나 쓰기 작업 또는 두 작업 모두 전에 닫기 작업이 완료된 경우 해당 작업도 실패할 수 있습니다.   이러한 이유로 이 프로그램은 작업을 IOSQE_IO_LINK 플래그와 연결합니다.   이렇게 하면 작업이 차례로 실행됩니다.

이 프로그램은 이해하기 매우 간단합니다.   link_Operations() 함수에서는 io_uring_prep_write()를 호출하지만 IOSQE_IO_LINK 플래그를 설정하여 다음 작업이 이 작업에 연결되도록 합니다.   다음으로, 이전 쓰기 작업에 연결된 io_uring_prep_read()를 호출합니다.   이 작업에 IOSQE_IO_LINK 플래그도 설정하여 io_uring_prep_close()로 설정한 후속 닫기 작업이 이 작업과 연결되도록 합니다.   이로 인해 'io_uring'이 쓰기, 읽기 및 닫기 작업을 차례로 실행하게 됩니다.

Note - 주의
이 예제가 작동하려면 커널 5.6 이상이 필요합니다.
5.5 이하 버전에서는 읽기(read), 쓰기(write) 및 닫기(clone) 작업이 지원되지 않습니다.

⚛ 원문


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