On Fri, Apr 13, 2007 at 01:24:03PM +0300, Александр Ворона wrote:
> Igor Sysoev пишет:
> >On Fri, Apr 13, 2007 at 12:10:17PM +0300, Александр Ворона wrote:
> >
> >>Igor Sysoev пишет:
> >>
> >>>С неблокирующимся sendfile ситуация непонятна. Я впервые увидел, как
> >>>Линукс за один неблокирующийся вызов передал 900M.
> >>вызов должен был быть неблокирующимся - но он таким не был. nginx в это
> >>время естественно ничего кроме этого sendfile() не мог делать.. Может
> >>стОит попробовать отдавать sendfile()'ом не до конца файла, а ровно
> >>столько, сколько влезет в буфер сокета, который перед каждым sendfile()
> >>и определять?
> >>
> >>кстати попутно мелкая бага - при отдаче nginx'ом 0.5.17 файлов >2G
> >>(linux 2.6.20 и i386 sendfile64() и x86_64 sendfile() ) если за один
> >>sendfile[64](...,count) с (2^31-1) > count > (2^31-page_size) уходит
> >>количество байт 2^31-page_size, то закачка замирает
> >>strace
> >
> >На мой взгляд, это проблемы разработчиков ядра. Раньше sendfile
> >прекрасно работал в неблокирующемся режиме. Если они это поломали,
> >то им и чинить.
> да похоже все на это забили и ждут нормальной реализации aio :(
А как же быть с всеми инсталляциями lighttpd, thttpd и прочая ?
> >Это вообще стандартное ядро ?
> да
> >Удивительно, что про это ещё не знают пользователи lighttpd и прочая.
> специально проверил lighttpd на linux-sendfile - точно также принимает
> коннекты, но ничего не отдаёт, пока отдаёт одному sendfile()'ом.
> Шлёт кусками по ~1G, поэтому вышеописанной баги с затыком при отсылке
> ~2G отдним sendfile()'ом не увидел
Ну что ж, будем ждать новостей в lkml. А в каких ядрах это наблюдается ?
У меня есть одно подозрение, может, это сломали не sendfile, а
ioctl(FIONBIO). Можно проверить так:
./configure ... --with-cc-opt="NGX_HAVE_FIONBIO=0"
--
Игорь Сысоев
http://sysoev.ru