ПРОЕКТЫ 


  АРХИВ 


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: [SPAM]уменьшение тр афика в сети



Igor Sysoev wrote:
On Tue, Mar 10, 2009 at 10:50:54PM +0300, Михаил Монашёв wrote:

IS> Не нужен polling для em. Не нужен.
IS> Драйвер em в 7ке сам делает что-то вроде адаптивного поллинга.

Читал:
http://groups.google.com/group/fido7.ru.unix.bsd/browse_thread/thread/75877aaebabc4343/0bc35750213fd9b0
 ?

Интересно.

Там есть вот какие моменты:

1) там вместе с

dev.em.0.rx_processing_limit: 1000
были увеличены таймауты:

dev.em.0.rx_int_delay: 200
dev.em.0.tx_int_delay: 200
dev.em.0.rx_abs_int_delay: 200
dev.em.0.tx_abs_int_delay: 200

Их хорошо бы оставить дефолтными или даже уменьшить до нуля, чтобы
прерывания шли по первому же пакету: em потом запрещает прерывания
и начинает обрабатывать пакеты. Возможно, этой задержкой объясняется
некоторое преимущество polling'а (при тестировании с INVARIANTS, без
INVARIANTS, насколько я понял тестировался только polling).

Немедленные прерывания по первому пакету приведут к тому что в очереди будет находиться очень мало пакетов (или вообще этот один первый) и прерываний будет очень много.

int_delay от abs_int_delay отличается следующим:
для каждого пакета таймер int_delay обнуляется, но если задержка между временем получения последнего пакета и текущим моментом достигла int_delay (таймер int_delay проекспайрился и за это время новых пакетов не пришло) - генерируется прерывание

Если пакеты идут так плотно, что разница постоянно меньше int_delay - то тут вступает в действие abs_int_delay - он отсчитывается от последнего прерывания, и если експайрится - прерывание генерируется принудительно.

То есть abs_int_delay <= int_delay или int_delay == 0 приводит к тому что прерывания генерятся с периодом (abs_int_delay + средняя задержка от последнего прерывания до прихода нового пакета)

Ставить abs_int_delay в очень высокое значение или в очень маленькое значение не рекомендуется - очередь будет переполняться или прерывания пойдут очень часто.

Это все для выключенного поллинга, естественно.

2) Настроойка net.inet.ip.intr_queue_maxlen влияет только на приём пакетов
и только, если обработка входящего TCP/IP делается [swi1: net], то есть,
в случае net.isr.direct=0.


Но я хочу ещё раз подчеркнуть, что в твоём случае 2/3 работы em - это
обработка входящего TCP/IP, а не карты и эзернета. Там же, насколько
я вижу, тестируется передача UDP одним потоком (ng_source).
В твоём же случае передача осуществляется параллельно несколькими nginx'ами.






 




Copyright © Lexa Software, 1996-2009.