Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.03.2010, 02:30
Deusex Deusex вне форума
Прохожий
 
Регистрация: 08.03.2010
Сообщения: 5
Репутация: 10
Восклицание Процессорное время. 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  
Старый 08.03.2010, 09:37
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

WINDDK->Sources->Network->NDIS
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #3  
Старый 10.03.2010, 17:45
Deusex Deusex вне форума
Прохожий
 
Регистрация: 08.03.2010
Сообщения: 5
Репутация: 10
По умолчанию

К такому уровню пока еще не готов. Многие рекомендуют IOCP, но у меня на руках 3 различных реализации IOCP и ни одна не показывает результат выше 5000 (они тоже используют WSASend, WSARecv). Да и преимущества над блокирующими соединениями вижу только в том, что меньше потоков. Но как показала практика, даже при 5000 потоков, затраты процессорного времени на переключение не более 10%. Я создавал и 15000 потоков и никаких проблем.

Кто-то пробовал в других операционках создать нечто подобное?
Ответить с цитированием
  #4  
Старый 10.03.2010, 17:59
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Пробовал на win-7 делал http сервер (с поддержкой php) на винсоке, но таких чудо нагрузок не давал.

Можно попробовать на многопроцессорном компе с разделением потоков.

Ну можешь еще на WinPCap попробовать.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #5  
Старый 10.03.2010, 18:44
Deusex Deusex вне форума
Прохожий
 
Регистрация: 08.03.2010
Сообщения: 5
Репутация: 10
По умолчанию

так на двух процессорном (Dual Opteron 248, DDR400 ECC Reg Full-buffered 6gb) и пробую, правда там по 1 ядру на проц. Попробую на 8 ядрах....Это обычные нагрузки для популярных сервисов, у которых миллионная аудитория, просто глупо каждый раз покупать 2, 3, 5-й сервер, когда есть возможность программно повысить производительность (если она, возможность, конечно есть)

Последний раз редактировалось Deusex, 10.03.2010 в 18:49.
Ответить с цитированием
  #6  
Старый 14.03.2010, 11:38
Deusex Deusex вне форума
Прохожий
 
Регистрация: 08.03.2010
Сообщения: 5
Репутация: 10
По умолчанию

Вопрос снимается. IOCP действительно решает проблему, просто в интернете не было ни одной достойной реализации на delphi.
Ответить с цитированием
  #7  
Старый 11.05.2010, 03:13
RomanRom2 RomanRom2 вне форума
Прохожий
 
Регистрация: 11.05.2010
Сообщения: 1
Репутация: 10
По умолчанию

Цитата:
Сообщение от Deusex
Вопрос снимается. IOCP действительно решает проблему, просто в интернете не было ни одной достойной реализации на delphi.
а теперь такая реализация появилась?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:29.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter