Модераторы: feodorv

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оценка эффективности ASIO сервера 
:(
    Опции темы
mabrarov
Дата 21.10.2011, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 12.1.2011
Где: Казань

Репутация: нет
Всего: 9



PM MAIL WWW Skype   Вверх
Lazin
Дата 21.10.2011, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 5
Всего: 154



Цитата(mabrarov @  21.10.2011,  09:28 Найти цитируемый пост)
Стратегию "io_service per CPU" вроде как используют в Yandex. Она позволяет исключить миграцию, например, экземпляров ma::echo::server::session между кэшами разных ядер/процессоров. Т.е. все ma::echo::server::session, относящиеся к одному экземпляру io_service, теоретически могут влезть (и не вылазить от туда в течение всей работы) в кэш одного ядра. Кроме того, это избавляет от необходимости защищать ma::echo::server::session при помощи io_service::strand  (который тоже не бесплатно дается и ОС и процессору).

стратегию io_service per cpu можно использовать, если одна сессия часто обращается к одним и тем же данным, что-бы кэширование имело смысл, и при этом не выполняет ничего тяжелого. Под тяжелым я имею ввиду продолжительные вычисления, если одна сессия займет процессора на 1мс то ни одна другая сессия, выполняемая на этом io_service-е не сможет ничего сделать в течении этой милисекунды. А в случае пулла потоков это не так, одна из сессий заняла поток на 1мс, все остальные продолжают работать на оставшихся N потоках.

Цитата(mabrarov @  21.10.2011,  09:28 Найти цитируемый пост)
Стратегии "single io_service + thread pool" и "one io_service for session manager + one io_service for all sessions" почти одно и то же. Во втором случае ma::echo::server::session_manager вынесен отдельно аля SEDA. Это сделано для гарантии того, что даже при максимальной загрузке ma::echo::server::session_manager (простейшая DOS-атака) на обработку сессий будет потрачено не менее определенной части всего процессорного времени, выделенного на процесс сервера.

Для того, что-бы это было похоже на SEDA нужно еще много чего сделать smile Вообще, хотелось бы узнать какую задачу пытается решить ТС.

Цитата(mabrarov @  21.10.2011,  09:28 Найти цитируемый пост)
Ну и да, тестировать и еще раз тестировать. "Золотая тропа" известна: make it build and work, make it work right, if need (!) make it (more) fast. Стратегия "one io_service for session manager + one io_service for all sessions" остановилась на втором шаге. Возможно, на третьем шаге стратегия "io_service per CPU" победит. Однако, эффективная реализация "io_service per CPU" м/б сложнее "one io_service for session manager + one io_service for all sessions".

Что-бы об этом рассуждать, нужно хоть что-нибудь знать о проблеме. Может быть не победит, может быть вообще победит thread per session smile

Добавлено через 1 минуту и 48 секунд
вообще, если клиентов не много, то асинхронный сервер будет иметь более низкую пропускную способность, нежели простой thread per client сервер выполняющий все операции ввода/вывода синхронно, ибо во втором случае будет меньше системных вызовов
PM MAIL Skype GTalk   Вверх
boostcoder
Дата 21.10.2011, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 13
Всего: 110



Цитата(mabrarov @  21.10.2011,  09:28 Найти цитируемый пост)
SEDA

"staged event-driven architecture" ?

PM WWW   Вверх
mabrarov
Дата 21.10.2011, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 12.1.2011
Где: Казань

Репутация: нет
Всего: 9



Цитата(boostcoder @ 21.10.2011,  08:40)
и 4Gb для подобных задач - совсем не много. на самом деле, сессий все же меньше 65к, т.к. часть портов зарезервирована_системой/занята_другими_программами.

Не путаем исходящие TCP соединения и входящие 8)
Кол-во входящих ограничено ресурсами ОС (и локальный порт у них у всех один - тот с которого соединение было accepted, т.е. тот, что у listening socket). 
Кол-во исходящих соединений ограничено еще и максимальным кол-вом открытых портов, которых всего м/б 65536 за минусом специальных/занятых другими/не выделяемых под исходящие соединения.
Вот. Заодно и вспомнил теорию.

Добавлено @ 10:27
Цитата(Lazin @ 21.10.2011,  10:07)
стратегию io_service per cpu можно использовать, если одна сессия часто обращается к одним и тем же данным, что-бы кэширование имело смысл, и при этом не выполняет ничего тяжелого. Под тяжелым я имею ввиду продолжительные вычисления, если одна сессия займет процессора на 1мс то ни одна другая сессия, выполняемая на этом io_service-е не сможет ничего сделать в течении этой милисекунды. А в случае пулла потоков это не так, одна из сессий заняла поток на 1мс, все остальные продолжают работать на оставшихся N потоках.

Конечно, предполагается, что тяжелой работой будет заниматься другой пул потоков.

Добавлено @ 10:28
Цитата(boostcoder @ 21.10.2011,  10:16)
Цитата(mabrarov @  21.10.2011,  09:28 Найти цитируемый пост)
SEDA

"staged event-driven architecture" ?

Да

Добавлено @ 10:31
Цитата(Lazin @ 21.10.2011,  10:07)
Для того, что-бы это было похоже на SEDA нужно еще много чего сделать smile

Естественно, это далеко от SEDA в том виде, как она описана в теории. Но смысл аналогичный - разбиваем обработку на стадии. На каждой стадии м/б свой пул потоков.

Добавлено @ 10:33
Цитата(Lazin @ 21.10.2011,  10:07)
Что-бы об этом рассуждать, нужно хоть что-нибудь знать о проблеме. Может быть не победит, может быть вообще победит thread per session smile
Добавлено @ 10:09
вообще, если клиентов не много, то асинхронный сервер будет иметь более низкую пропускную способность, нежели простой thread per client сервер выполняющий все операции ввода/вывода синхронно, ибо во втором случае будет меньше системных вызовов

Опять, "естественно" да. Эта теория проштудирована много раз. Все же, думаю, здесь рассматривается случай с (большим) множеством клиентов.

Это сообщение отредактировал(а) mabrarov - 21.10.2011, 10:36
PM MAIL WWW Skype   Вверх
rumit7
Дата 21.10.2011, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 16.6.2011

Репутация: нет
Всего: 7



Цитата(Lazin @ 21.10.2011,  10:07)
стратегию io_service per cpu можно использовать, если одна сессия часто обращается к одним и тем же данным, что-бы кэширование имело смысл, и при этом не выполняет ничего тяжелого. Под тяжелым я имею ввиду продолжительные вычисления, если одна сессия займет процессора на 1мс то ни одна другая сессия, выполняемая на этом io_service-е не сможет ничего сделать в течении этой милисекунды. А в случае пулла потоков это не так, одна из сессий заняла поток на 1мс, все остальные продолжают работать на оставшихся N потоках.


Спасибо за пояснения!

Цитата

Вообще, хотелось бы узнать какую задачу пытается решить ТС.


Там я указал:
Цитата

На данный момент меня интересует - преимущества и недостатки каждой из моделей, на основе чего можно было бы сделать выбор под конкретные требования сервера..


Можно сказать ресерч возможностей каждой из моделей, чтобы иметь информацию для выбора под конкретные требования..

Цитата

Все же, думаю, здесь рассматривается случай с (большим) множеством клиентов.


Да. Моя вина - изначально не четко сформулировал вопрос..

Это сообщение отредактировал(а) rumit7 - 21.10.2011, 10:40
PM MAIL   Вверх
mabrarov
Дата 21.10.2011, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 12.1.2011
Где: Казань

Репутация: нет
Всего: 9



Цитата(rumit7 @ 21.10.2011,  10:36)
Можно сказать ресерч возможностей каждой из моделей, чтобы иметь информацию для выбора под конкретные требования..

Оформить бы выводы в виде FAQ и засунуть в документацию Asio.
PM MAIL WWW Skype   Вверх
Lazin
Дата 21.10.2011, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 5
Всего: 154



Цитата(mabrarov @  21.10.2011,  10:24 Найти цитируемый пост)
Конечно, предполагается, что тяжелой работой будет заниматься другой пул потоков.

все равно это сложнее, нужно решить проблему балансирования нагрузки между отдельными io_service-ами

Цитата(mabrarov @  21.10.2011,  10:24 Найти цитируемый пост)
Опять, "естественно" да. Эта теория проштудирована много раз. Все же, думаю, здесь рассматривается случай с (большим) множеством клиентов.

большой - понятие растяжимое
PM MAIL Skype GTalk   Вверх
mabrarov
Дата 21.10.2011, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 12.1.2011
Где: Казань

Репутация: нет
Всего: 9



Цитата(Lazin @ 21.10.2011,  10:51)
все равно это сложнее, нужно решить проблему балансирования нагрузки между отдельными io_service-ами

О том я и писал в своем первом сообщении.
PM MAIL WWW Skype   Вверх
mabrarov
Дата 23.10.2011, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 12.1.2011
Где: Казань

Репутация: нет
Всего: 9



На счет архитектуры. Мало и, возможно, не то, что нужно было. Но интересно.
PM MAIL WWW Skype   Вверх
rumit7
Дата 23.10.2011, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 16.6.2011

Репутация: нет
Всего: 7



Цитата(mabrarov @ 23.10.2011,  09:18)
На счет архитектуры. Мало и, возможно, не то, что нужно было. Но интересно.

Спасибо за ссылку!

Я пока обнумываю все то, что здесь говорилось. В принципе есть идея того, как используя memory pool ускорить выделение памяти и помочь стратегии io_service per cpu в плане кеширования.. Есть ряд проблем, если удастся достичь положительного результата - отпишусь здесь.. Если нет, наверно промолчу, умнее казаться буду))
PM MAIL   Вверх
Олег2005
Дата 26.10.2011, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 421
Регистрация: 26.5.2005
Где: Рига Латвия

Репутация: 6
Всего: 11



Модератор: хочу отметить высокий профессионализм участников темы - и пожелать им еще больших успехов в нашем непростом сетевом программировании 
PM MAIL WWW MSN   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0560 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.