좋아, 당신은 경험을 요구합니다, 이것은 질문을 조금 주관적이고 논쟁 적이면서도 통과 가능하게 만듭니다.
Linus는 사람들이 일반적으로 O_DIRECT를 사용하는 용도를 언급하며 이러한 용도의 경우 IMO Linus가 대부분 정확하다고 말했습니다. 직접 I / O를 수행하더라도 장치와 데이터를 장치간에 직접 전송할 수 없으며, 프로그램 또는 장치에 의해 채워지고 시스템 호출을 통해 다른 쪽 끝으로 전송되는 버퍼가 필요합니다. 또한 효율성을 높이기 위해 다시 필요할 때를 대비하여 방금 읽은 내용을 다시 읽고 싶지 않을 것입니다. 따라서 일종의 캐시가 필요합니다 ... 그리고 페이지 커널 인 O_DIRECT없이 커널이 제공하는 것입니다! 왜 사용하지 않습니까? 또한 더 많은 프로세스가 동일한 파일에 동시에 액세스하려는 경우 이점이 있으며 O_DIRECT를 사용하면 재앙이됩니다.
O_DIRECT는 다음과 같은 용도로 사용됩니다. 어떤 이유로 블록 장치에서 직접 데이터를 가져와야합니다. 성능과 관련이 없습니다.
성능을 위해 O_DIRECT를 사용하는 사람들은 일반적으로 잘못된 페이지 캐시 알고리즘이 있거나 POSIX 조언 메커니즘이 없거나 다른 사람들이 말한 것을 무의식적으로 반복하는 시스템에서 온 사람들입니다. 이러한 문제를 피하기 위해 O_DIRECT가 해결책이었습니다. Linux, OTOH는 실제 근본적인 문제를 해결해야한다는 철학을 가지고 있으며, 근본적인 문제는 페이지 캐싱에서 나쁜 작업을 수행 한 OS였습니다.
기계의 메모리 오류를 찾기 위해 간단한 cat 구현을 위해 O_DIRECT 를 사용했습니다 . 이것은 O_DIRECT에 대한 올바른 사용 중 하나입니다. 그것은 성능과 관련이 없습니다.