|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Процессорное время. WSARecv, WSAsend, Indy TCPServer, HTTPServer
Создаю производительный веб-сервер. Для чего и почему не использую существующие - это выходит за рамки этой темы.
Использую компоненты Indy. c включенным KeepAlive (без него результаты в 2 раза хуже) сервер способен обработать не более 5000 запросов в секунду (тестировал с помощью утилиты ab.exe ApacheBench). Основная нагрузка идет на процессор (100% нагрузка на все ядра). Основное время отжирается функциями winsock: WSASend и WSARecv Это означает, что проблема не в Indy Достоверно известно, что на этом же железе nginx обрабатывает более 10000 запросов в секунду. А некоторые роутеры, способны обрабатывать и более 300 000 запросов в секунду. Вопросы: 1) Возможно ли каким-либо образом ускорить работу WSASend и WSARecv? 2) Как обойти эти команды, не использовать их вообще? Я так понимаю, что для этого нужно писать свой драйвер, может у кого-то есть документация или примеры?. 3) Может проблему можно решить переписав код на Lazarus и запустить это всё дело под FreeBSD (там уж точно нету WSASend). |
#2
|
||||
|
||||
WINDDK->Sources->Network->NDIS
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#3
|
|||
|
|||
К такому уровню пока еще не готов. Многие рекомендуют IOCP, но у меня на руках 3 различных реализации IOCP и ни одна не показывает результат выше 5000 (они тоже используют WSASend, WSARecv). Да и преимущества над блокирующими соединениями вижу только в том, что меньше потоков. Но как показала практика, даже при 5000 потоков, затраты процессорного времени на переключение не более 10%. Я создавал и 15000 потоков и никаких проблем.
Кто-то пробовал в других операционках создать нечто подобное? |
#4
|
||||
|
||||
Пробовал на win-7 делал http сервер (с поддержкой php) на винсоке, но таких чудо нагрузок не давал.
Можно попробовать на многопроцессорном компе с разделением потоков. Ну можешь еще на WinPCap попробовать. — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#5
|
|||
|
|||
так на двух процессорном (Dual Opteron 248, DDR400 ECC Reg Full-buffered 6gb) и пробую, правда там по 1 ядру на проц. Попробую на 8 ядрах....Это обычные нагрузки для популярных сервисов, у которых миллионная аудитория, просто глупо каждый раз покупать 2, 3, 5-й сервер, когда есть возможность программно повысить производительность (если она, возможность, конечно есть)
Последний раз редактировалось Deusex, 10.03.2010 в 18:49. |
#6
|
|||
|
|||
Вопрос снимается. IOCP действительно решает проблему, просто в интернете не было ни одной достойной реализации на delphi.
|
#7
|
|||
|
|||
Цитата:
|