Apache-Talk mailing list archive (apache-talk@lists.lexa.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [apache-talk] Re: [apache-talk] прошу помощ и в performance tuning
On Mon, 17 Jan 2005, Igor Sysoev wrote:
> > Тогда получается еще хуже: все запросы вынуждены выстраиваться в
> > одну очередь, и даже те запросы, которые могут быть обслужены без
>
> Ну в общем-то, большинство лёгких серверов работают именно так - у них
> один процесс на всё про всё.
Да, и в случае активной работы с диском медаль _такой_ лёгкости
показывает обратную сторону. Я в своем 0W-httpd давно хочу
реализовать описанное разделение на рабочий и дисковый
процессы, потому что проблема постоянно всплывает то на одном
проекте, то на другом, но переделки требуются достаточно
серьёзные, и всё никак не дойдут руки.
> Например, во FreeBSD sendfile() передаёт по одной странице в
> сетевой уровень.
Кстати, во freebsd дополнительно к размеру буфера нужно ещё
выставлять LowWatermark (я устанавливаю его чуть меньше, чем
размер буфера, чтобы буфер не оставался пустым, например:
120/128). Тогда sendfile читает с диска большими блоками за
раз.
> Как работает sendfile() в Линуксе - не знаю, не смотрел.
сейчас посмотрел, что происходит на 2.4.24 при буфере 128k, не
очень радужно, и всё из-за того, что в линуксе нет
LowWatermark.
Первый раз sendfile действительно посылает большой кусок,
хотя почему-то и не 128kb, а достаточно случайный кусок
108-109kb. А вот при последующих вызовах - всего 37-38Kb.
В том случае, если не устанавливать SO_SNDBUF (системный буфер
по умолчанию - 16k), разброс в размере отсылаемых данных при
повторных вызовах sendfile от 5760 до 15620.
Тестировался реальный сервер с реальными удаленными клиентами,
а не через бенчмарки с localhost или соседней машины.
|