Russian Apache Switch to English
Switch to Russian koi8-r
windows=1251
cp-866
iso8859-5
Russian Apache Как это работает Рекоммендации Где взять Как установить Как настроить Статус и поддержка
Краткий обзор FAQ Список рассылки Благодарности Поиск по серверу Powered by Russian Apache
Russian Apache mailing list archive (apache-rus@lists.lexa.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [apache-talk] mathopd ranges




On Thu, 13 Dec 2001, Alex Tutubalin wrote:

> > > Немудрено. В select на каждый дескриптор передается 1 бит (ну 2 -
> > > если read и write), в poll - 64. На copyin/copyout дофига потеряется.
> >
> >  На select'e "преимущество" упаковки в биты вывернется наизнанку, когда
> >  надо будет выяснить, на каком же именно дескрипторе что-то произошло.
> Про упаковку давай забудем - она происходит сравнительно редко т.к.
> обычно FD_SET-ы просто копируются. Остается распаковка.
> Распаковка из битов и проверка флагов в pollfd->revents - очень
> близкая по сложности операция (плюс-минус сдвиг)
>
Угу. Ну там нужно не только сдвиг сделать: нужно сделать сдвиг, отрезать
младшие биты, вычислить адрес и потом btl и setcb - шесть операций лишних
(там еще один movl добавляется)...

> > > Вообще, почему время должно уходить на пересылку, а не на
> упаковку? Сложный вопрос - но уходит. Вообще, память не такая быстрая
> у PC, неудивительно что узкое место - здесь
>
Да не такой это и сложный вопрос, на самом деле. Достаточно просто ведь
все посчитать :-) Возьмем тот же пресловутый Pentium III на 1GHz. Шина у
него позволяет переслать 1.06Gb/sec - а если учесть, что мы все это
ПЕРЕСЫЛАЕМ, то придется это еще разделить на два. Тактовая частота у нас
1GHz - значит мы можем расчитавать на 1.8-2.2 миллиарда операций в секунду
(простых, разумеется). С учетом "хаотического кода" и плохих предсказаний
- 1.5-2 миллиарда простых операций. Итого имеем: если для экономии одного
int'а нужно добавить в программу десяток команд (соотвествующих 12-15
внутренним RISC'овым командам), то это - выгодно. Для больших
select'ов/poll'ов имеем, что для того, чтобы poll выиграл у
select'а он должен дать экономию где-то в 20 команд на дескриптор ...
Даже если использовать тупо FD_ISSET в цикле, то 20 команд непросто
получить (FD_ISSET - всего 6 команд; см. выше), а если вспомнить, что
можно искать те биты сначала пословно, а уж потом через FD_ISSET ...

Это, собственно, общая тенденция: часто лучше что-то 10 раз посчитать
заново, чем это где-нибудь в памяти хранить "в удобном для потребления
виде" (разумеется если посчитать можно десятком команд, а не парой тысяч:
см. числа выше). Ничего не попишешь: скорость света есть скорость света
(за один такт 1GHz процессора импульс может пройти, как несложно
посчитать, не более 30cm - а ходит он не по прямой), так что дальше будет
только хуже... Конечно DDR, QDR и т.д. могут немного сгладить эту
проблему - но не более того.


=============================================================================
=               Apache-Talk@xxxxxxxxxxxxx mailing list                      =
Mail "unsubscribe apache-talk" to majordomo@xxxxxxxxxxxxx if you want to quit.
=       Archive avaliable at http://www.lexa.ru/apache-talk                 =






Спонсоры сайта:

[ Russian Apache ] [ Как это работает ] [ Рекомендации ] [ Где взять ] [ Как установить ] [ Как настроить ] [ Статус и поддержка ] [ Краткий обзор ] [ FAQ ] [ Список рассылки ] [ Благодарности ] [ Поиск по серверу ] [ Powered by Russian Apache ] [ Apache-talk archive ]

"Russian Apache" includes software developed by the Apache Group for use in the Apache HTTP server project (http://www.apache.org/) See Apache LICENSE.
Copyright (C) 1995-2001 The Apache Group. All rights reserved.
Copyright (C) 1996 Dm. Kryukov; Copyright (C) 1997-2009 Alex Tutubalin. Design (C) 1998 Max Smolev.