Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Несколько непонятн остей по nginx
On Fri, Apr 13, 2007 at 05:50:13PM +0400, Александр Ворона wrote:
> Igor Sysoev пишет:
>
> >У меня есть одно подозрение, может, это сломали не sendfile, а
> >ioctl(FIONBIO). Можно проверить так:
> >
> >../configure ... --with-cc-opt="NGX_HAVE_FIONBIO=0"
> проверил другое. Пропатчил sendfile() в ядре, дабы он при неблокируемом
> сокете перебивал count у sendfile на константу 128000. Патч вложил
>
> При отдаче нжинксом файла с диска( не из кэша!)затык после 3-4
> сендфайлов, а точнее после первого отданого на 128000
> dmesg
> [ 5654.554353] ask 1466761216 <4>real 128000
> [ 5654.568565] sended 20576 bytes
> [ 5654.568778] ask 1466740640 <4>real 128000
> [ 5654.570062] sended 83352 bytes
> [ 5654.570285] ask 1466657288 <4>real 128000
> [ 5654.573701] sended 111136 bytes
> [ 5654.573914] ask 1466546152 <4>real 128000
> [ 5654.575222] sended 128000 bytes
> затык
> wget -Y off -O /dev/null http://192.168.78.1:81/2.tmp
> --14:24:44-- http://192.168.78.1:81/2.tmp
> => `/dev/null'
> Устанавливается соединение с 192.168.78.1:81... соединение установлено.
> Запрос HTTP послан, ожидается ответ... 200 OK
> Длина: 1 466 761 216 (1.4G) [application/octet-stream]
>
> 0% [
> ] 343 064 --.--K/s
>
>
> При отдаче lighhttpd через linux-sendfile всё ок и достигнут нужный
> эффект - нет блокировки при отдаче - параллельные коннекты принимаются
> и отдаются.
> dmesg
> [ 3986.823916] ask 146274204 <4>real 128000
> [ 3986.826964] sended 128000 bytes
> [ 3986.827061] ask 146146204 <4>real 128000
> [ 3986.828933] sended 128000 bytes
> [ 3986.829015] ask 146018204 <4>real 128000
> [ 3986.830907] sended 128000 bytes
> [ 3986.830991] ask 145890204 <4>real 128000
> wget -Y off -O /dev/null http://192.168.78.1:82/3.tmp
> --14:31:48-- http://192.168.78.1:82/3.tmp
> => `/dev/null'
> Устанавливается соединение с 192.168.78.1:82... соединение установлено.
> Запрос HTTP послан, ожидается ответ... 200 OK
> Длина: 4 294 967 296 (4.0G) [application/octet-stream]
>
> 45% [===================================>
> ] 1 934 299 038 60.11M/s ETA 00:38
> руками оборвал закачку
>
> попробовал апач - тоже всё ок - отдаёт
>
> strace
> poll([{fd=8, events=POLLOUT, revents=POLLOUT}], 1, 300000) = 1
> sendfile(8, 9, [811668553], 656370615) = 128000
> poll([{fd=8, events=POLLOUT, revents=POLLOUT}], 1, 300000) = 1
> sendfile(8, 9, [811796553], 656242615) = 128000
> poll([{fd=8, events=POLLOUT, revents=POLLOUT}], 1, 300000) = 1
> sendfile(8, 9, [811924553], 656114615) = 128000
> poll([{fd=8, events=POLLOUT, revents=POLLOUT}], 1, 300000) = 1
> sendfile(8, 9, [812052553], 655986615) = 128000
>
> dmesg
> [ 6921.055356] ask 455282615 <4>real 128000
> [ 6921.057216] sended 128000 bytes
> [ 6921.057313] ask 455154615 <4>real 128000
> [ 6921.059175] sended 128000 bytes
> [ 6921.059261] ask 455026615 <4>real 128000
> [ 6921.062314] sended 128000 bytes
> [ 6921.062402] ask 454898615 <4>real 128000
> [ 6921.064285] sended 128000 bytes
>
>
> пробовал проверить также vsftpd, но он не выставляет неблокирующий режим
> :), ибо не нужно ему это
>
>
> по какому критерию nginx прекращает передачу после того, как ядерный
> sendfile() передал ровно столько, сколько его попросил патч ?
Нужно собрать nginx с отладкой и прислать мне лог.
--
Игорь Сысоев
http://sysoev.ru
|