nginx-1.2.5
Maxim Dounin
mdounin at mdounin.ru
Wed Nov 14 17:44:53 UTC 2012
Hello!
On Wed, Nov 14, 2012 at 08:41:21PM +0400, Anton Yuzhaninov wrote:
> On 11/14/12 20:10, Maxim Dounin wrote:
> >Но да, стоимость действий, происходящих в системе на каждое
> >соединение, по очевидным причинам в разы превышает стоимость двух
> >атомарных операций. Так что не думаю, что эффект от них удастся
> >измерить, даже если захотеть.
>
> Производительномсть роутинга под FreeBSD измеримо увеличивается,
> если отключить высего один счетчик на каждый пакет:
> http://lists.freebsd.org/pipermail/freebsd-net/2012-July/032682.html
Ну вот и считай - на прямом форвардинге пакетов, в ядре, без
всяких syscall'ов и обработки tcp, имеем 1.9% +/- 0.3%
разницы:
$ ministat t1 t2
...
Difference at 95.0% confidence
33898.2 +/- 5982.88
1.90353% +/- 0.335965%
(Student's t, pooled s = 4019.36)
Теперь вспоминаем, что в соединении с хоть одним запросом минимум
8 пакетов. На выходе не факт что измеримый эффект.
Но, честно говоря, я так подозреваю, что даже цифры выше - это,
скорее всего, далеко не просто стоимость инструкций, а результат
выбрасывания нужных данных из кеша процессоров из-за обновления
счётчика (читай: cache line flush'ился, и route entry при других к
ней обращениях приходилось перегружать из памяти). В этом месте
nginx поступает как правильно, и счётчики держит отдельно от
всего, да ещё и с отступом в cache line между ними.
--
Maxim Dounin
http://nginx.com/support.html
Подробная информация о списке рассылки nginx-ru