Гаразд, ви запитуєте досвід, це робить питання трохи суб'єктивним та аргументативним, але прохідним.
Лінус сказав, що посилаючись на способи використання, які люди зазвичай приписують O_DIRECT, і для цих цілей IMO Linus здебільшого вірно. Навіть якщо ви робите прямий ввід / вивід, ви не можете передавати дані на / з пристроїв безпосередньо до програмних заяв, вам потрібен буфер, який заповнюється (програмою чи пристроєм) і передається через системний виклик на інший кінець. Крім того, щоб зробити його ефективним, ви не хочете перечитувати щось, що ви вже прочитали, якщо вам це буде потрібно знову. Тож вам потрібен якийсь кеш ... і саме це ядро надає без O_DIRECT, кеш сторінки! Чому б не використати це? Він також отримує переваги, якщо більшість процесів хочуть одночасно отримувати доступ до одного файлу, це буде катастрофою з O_DIRECT.
Сказавши це, O_DIRECT використовує: Якщо з якихось причин вам потрібно отримати дані безпосередньо з блокового пристрою. Це не має нічого спільного з продуктивністю.
Люди, які використовують O_DIRECT для продуктивності, зазвичай походять із систем з алгоритмами кешування поганих сторінок або без механізмів поради POSIX, або навіть люди бездумно повторюють те, що сказали інші. Щоб уникнути цих проблем, O_DIRECT був рішенням. Linux, OTOH, має філософію, що слід виправити реальну основну проблему, а основна проблема - ОС, які погано спрацювали з кешуванням сторінок.
Я використовував O_DIRECT для простої реалізації кота, щоб знайти помилку пам’яті в своїй машині. Це одне дійсне використання для O_DIRECT. Це не мало нічого спільного з роботою.