|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Igor Sysoev 2:5020/400 17 Nov 2005 20:24:51 To : Vadim Goncharov Subject : Re: httpd в ядре -------------------------------------------------------------------------------- Vadim Goncharov <vadimnuclight@tpu.ru> wrote: > On Wed, 16 Nov 2005 13:16:03 +0000 (UTC); Igor Sysoev wrote about 'Re: httpd в > ядре': В ядре есть одна полезная вещь - kqueue(2). Всё остальное меркнет перед > ней. Есть цифры, насколько оно лучше? Цифры можно посмотреть > здесь: http://people.freebsd.org/~jlemon/papers/kqueue.pdf а что касается > практики, то select() и poll() съедают весь процессор на паре тысяч > одновременных соединений, а kqueue спокойно работает на тридцати > тысячах. Съедают в одном процессе или суммарно на всем сервере? Если один > процесс работает с парой тысяч одновременных соединений в одном процессе, но > на всём сервере кончается процессор. А если это будут скажем 4 процесса по 500 > соединений? Если будет 10 процессов по 200 соединений, то будет легче. Есть у > меня одна машина 3.4 с nginx'ом, использует select, 20 рабочих процессов, по > 100-300 соедиений на процесс. Хм. Интересно, сколько можно выжать из select() > (пределы poll() тоже интересны) соедиений всего, если использовать небольшое > число соединений на процесс, скажем по сотне?.. Hу вот переключил я сейчас на > одной машине nginx на select и 100 рабочих процессов. Машина на данный момент > держит 10,000 keep-alive соединений и обрабатывает 500 запросов в секунду. И > что же ? 30-40% user time, 60-70% system time, idle - 0%. Переключил обратно > на kqueue и один рабочий процесс - 15-20% user time, 15% system time. Понятно. > Остались только 2 вопроса: насколько select() эффективнее poll() и сравнение > kqueue() с epoll() Hасколько select() эффективнее poll() - не знаю. Они одинаковы неэффективны. А в Солярисе select(3) - это обвязка вокруг poll(2). Что касается kqueue vs epoll, то kqueue, во-первых, расширяема, а во-вторых, позволяет делать меньше сисколлов за счёт: 1) EV_EOF, EV_ERROR, NOTE_LOWAT; 2) совмещения добавления нескольких фильтров и получения событий, epoll_ctl() же позволяет добавить только один фильтр; 3) при использовании epoll приходится читать в общем случае до EAGAIN, потому что EOF может не прийти в виде отдельного события. -- Игорь Сысоев http://sysoev.ru --- ifmail v.2.15dev5.3 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/6577f69a2007.html, оценка из 5, голосов 10
|