ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Несколько непонятн остей по nginx



On Tue, May 01, 2007 at 06:12:24PM +0400, Exe wrote:

> >научите создателей ядра, как уйти от блокировки по чтению с диска.
> >Неблокирующийся sendfile() только на сети,а не на диске, причём как в  
> >linux, так и в FreeBSD. В последней немного лучше ситуация, но тем не  
> >менее - в случае быстрой сети получаем блокировку на диске при чтении.
> 
> Как это - неблокирующийся на диске? Как Вы себе это представляете?
> Когда речь идет о передаче данных sendfile не блокируется т.к. он на самом
> деле ничего не отсылает и только пихает данные в буфер на отправку, поэтому
> он и не блокируется. А что делать когда он с диска считает? Отдельно  
> посылать
> запросы на чтение и отдельно забирать считанные данные по мере их  
> поступления?

Неблокирующийся на диске sendfile должен работать так:

*) если страница файла есть в памяти, то добавить её в буфер сокета (это
   делается и сейчас);

*) если страницы нет, то инициировать чтение с диска и, не дожидаясь
   его завершения, вернуться в программу с результатом EAGAIN или
   аналогичным ему. При этом kqueue/epoll/etc должны понимать, что
   готовность сокета - это не только свободное место в буфере, но
   готовые данные с диска. Операция чтения должна сообщать о готовности
   данных через kqueue/epoll/etc как о готовности сокета на запись.

> Это ничего не даст если диск один.

Это даст возможность процессу отдавать те файлы, страницы которых
есть в памяти, а не блокироваться на время чтения с диска.


-- 
Игорь Сысоев
http://sysoev.ru



 




Copyright © Lexa Software, 1996-2009.