Данное сообщение будет служить для сбора всей информации, что мне удастся собрать по теме производительности Asio. Буду рад видеть в комментариях вопросы/критику/дополнения и результаты/методики тестов читателей.
Для начала выложу самое простое – отчеты профилировщика MS VS 2010. И клиент и сервер работали одновременно на моей домашней машине (причем без отключения прочих приложений вроде uTorrent и MS Outlook):
- MS Windows 7 Pro x64 SP1 + все обновления на 19.07.2012
- ASUS P6T Deluxe (LGA 1366)
- Intel Core i7 920 2.6Hz (4 physical cores), Hyper-threading on (8 logical cores)
- 12 Gb RAM 1333MHz
- Boost C++ Libraries 1.50 + все патчи из /asio_samples/build/patches/boost_1_50_0
- Qt 4.8.2 static build with static C/C++ runtime + патчи из /asio_samples/build/patches/qt_4_8_1_patches: build_static_win32-msvc2010.patch, container_msvc_warn.patch, win_cursors.patch
- Исходники asio samples из https://asio-samples.svn.sourceforge.net/svnroot/asio-samples/trunk (revision 617)
- Проект echo_server, собранный в конфигурации Profile/Win32
- Проект asio_performance_test_client, собранный в конфигурации Profile/Win32
Тестирование echo_server (
echo_server120719.vsps).
- Параметры запуска echo_server (echo_server.psess):
--port=7 --inactivity_timeout=60 --session_threads=4
- Параметры запуска asio_performance_test_client:
127.0.0.1 7 4 4096 10000 600 0
Тестирование asio_performance_test_client (
asio_performance_test_client120719.vsps).
- Параметры запуска asio_performance_test_client (asio_performance_test_client.psess):
127.0.0.1 7 4 4096 10000 600 0
- Параметры запуска qt_echo_server (кроме тех, чьи значения по умолчанию не менялись):
Execution/Session (IO) threads: 4; Session management/Listen backlog: 10000; Session/Inactivity timeout (seconds): 60.
Буду постепенно дописывать данное сообщение. Пока выкладываю результаты как есть.
Немного поколдовал над результатами тестов: для исключения некоторых функций пришлось сделать выгрузку в Excel -
echo_server120723.xls и
asio_performance_test_client120723.xls (см. столбец "Elapsed Exclusive Time, fixed %").
Думал над функцией [<Unknown>] в отчете по asio_performance_test_client. Похоже, это ConnectEx - именно ее название компилятору неизвестно и именно ее вызывает функция ma::async_connect.
Updated 24.07.2012
Залил конфигурацию сборки проектов echo_server и asio_performance_test_client в SVN.
Обновил результаты тестов.
Добавил скорректированные таблицы результатов работы профилировщика в разрезе функций.
Updated 26.07.2012
Как видно из "скорректированных" таблиц результатов работы профилировщика, большую часть времени и echo_server и asio_performance_test_client проводят в системных функциях ввода-вывода (почему-то в WSASend - видимо, это связано с тем, что и сервер и клиент работали на одной и той же машине и общались через localhost) и демультиплексирования событий. По-моему, это хороший результат.
Думаю, стоит попробовать Intel VTune - интересует работа потоков.
Updated 11.08.2012
Попробовал погонять по сети и измерить VTune-ом (Core2 Duo E7200, Windows 7 x86 SP1 Pro, https://asio-samples.svn.sourceforge.net/svnroot/asio-samples/trunk@660):
Для большей наглядности почти те же данные в виде графиков:
Результаты, в общем-то, ожидаемо положительные и совпадают с отчетом "студийного" профилировщика. Единственное, что вызывает подозрение, это 2-х ядерный процессор. Я все еще ищу возможность использовать VTune на 8-ядерном процессоре (думаю, еще понадобится несколько n-ядерных машин, чтобы нагрузить такой сервер "под завязку").