sendfile(2) patch и отдача больших файлов на 7-STABLE amd64

Igor Sysoev is at rambler-co.ru
Mon Feb 2 22:11:21 MSK 2009


On Mon, Feb 02, 2009 at 08:28:28PM +0300, Artemiev Igor wrote:

> On Mon, Feb 02, 2009 at 07:23:24PM +0300, Dmitry Morozovsky wrote:
> > Четырёхъядерник?
> Угу
> 
> > Одно из ядер занято процессом, который заблокирован в системном вызове - 
> > ищите какое и в каком
> Так в sendfile и занято (Broken pipe - это закачку оборвал на клиенте):
> 
> setsockopt(0x6,0x6,0x4,0x7fffffffd854,0x4,0xfffffffffffff000) = 0 (0x0)
> sendfile(0x9,0x6,0x0,0x40000000,0x7fffffffe100,0x7fffffffe128) ERR#32 'Broken pipe' 
> close(9)                                         = 0 (0x0)

Судя по этому, nginx уходит в sendfile() с закэшированным контентом один раз.
Что он там делает - непонятно.

> Попробовал с наскоку менять sendfile_max_chunk  на 64K, 128k, 1m, 2m - видимого
> эффекта нет, скорость остаётся всё той же.

А если на этой машине сделать пару загрузок с большим kern.ipc.sfreadahead,
а потому поставить его в 1, то скорость подымается до 50MB/s ? По идее,
должна остаться такой же - на уровне нескольких MB/s.

И, насколько я понимаю, на непатченном ядре должно повториться то же самое:
быстрая первая закачка и медленный последующие.


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





More information about the nginx-ru mailing list