Ok, bạn hỏi kinh nghiệm, điều này làm cho câu hỏi hơi chủ quan và lập luận, nhưng có thể vượt qua.
Linus nói rằng đề cập đến những cách sử dụng mà mọi người thường gán cho O_DIRECT và đối với những cách sử dụng đó, IMO Linus hầu như là chính xác. Ngay cả khi bạn thực hiện I / O trực tiếp, bạn không thể truyền dữ liệu đến / từ các thiết bị trực tiếp đến các câu lệnh chương trình của mình, bạn cần một bộ đệm được lấp đầy (bởi chương trình hoặc thiết bị) và chuyển qua một cuộc gọi hệ thống đến đầu kia. Ngoài ra, để làm cho nó hiệu quả, bạn sẽ không muốn đọc lại thứ gì đó bạn vừa đọc, trong trường hợp bạn cần nó một lần nữa. Vì vậy, bạn cần một số loại bộ đệm ... và chính xác là hạt nhân cung cấp mà không có O_DIRECT, bộ đệm trang! Tại sao không sử dụng? Nó cũng đi kèm với các lợi ích nếu nhiều quá trình muốn truy cập cùng một tệp đồng thời, đó sẽ là một thảm họa với O_DIRECT.
Phải nói rằng, O_DIRECT có công dụng của nó: Nếu vì một lý do nào đó, bạn cần lấy dữ liệu trực tiếp từ thiết bị khối. Nó không có gì để làm với hiệu suất.
Những người sử dụng O_DIRECT cho hiệu suất thường đến từ các hệ thống có thuật toán bộ đệm trang xấu hoặc không có cơ chế tư vấn POSIX hoặc thậm chí mọi người lặp lại một cách vô thức những gì người khác đã nói. Để tránh những vấn đề này, O_DIRECT là một giải pháp. Linux, OTOH, có triết lý là bạn nên khắc phục vấn đề thực sự tiềm ẩn và vấn đề tiềm ẩn là các hệ điều hành đã làm một công việc tồi tệ với bộ nhớ đệm trang.
Tôi đã sử dụng O_DIRECT để thực hiện đơn giản con mèo để tìm lỗi bộ nhớ trong máy của mình. Đây là một cách sử dụng hợp lệ cho O_DIRECT. Điều đó không liên quan gì đến hiệu suất.