я слышал, что некоторые из вас раздают с помощью своих nginx'ов
большие файлы размером примерно 700Mb.
есть предложение реализовать фичу по отдаче таких файлов
(per-location) без загрязнения файлового кэша, с помощью одного из
трёх механизмов:
- O_DIRECT у open(); -- ряд ограничений на Linux;
- posix_fadvise() -- везде?
- O_STREAMING, судьбу которого в линуксе я проследить не смог;
насколько реально работают хотя бы первые два, вот в чём вопрос? И
кто знает, чем кончилась история с последним способом, который в 2.5
дошёл аж до -mm?
У меня есть подозрение, что с sendfile()ом они будут дружить неэффективно.
Насколько я понимаю, O_DIRECT предназначен для чтения данных напрямую
в user-land буфер процесса. sendfile()у же нужно map'ить страницы
файла внутри ядра, то есть, файловый кэш нужно пачкать.
Игорь Сысоев
http://sysoev.ru