Здравствуйте, Лазар Бешкенадзе, Вы писали:
ЛБ>Есть серверное приложение (сервер) и клиентское стресс приложение (стресс).
ЛБ>Если запускать сервер и стресс на одном компьютере через loopback 127.0.0.1, то чтобы перенапрячь сервер (чтобы он отклонился от 0 в загрузке ЦП) необходимо запустить 10 (десять) копий стресса.
ЛБ>Если запускать на разных компьютерах через Ethernet, то одной копии стресса достаточно. Загрузка (количество UDP пакетов в секунду) пропорциональна количеству копий стресса.
ЛБ>На компьютере, где работает сервер, стоит какой-то чип REALTEK встроенный в материнскую плату. Каковы прогнозы, если поставить серверную сетевую плату, например, эту?
А какое количество этих самых пакетов в секунду у одного стресс-клиента и какой процессор на сервере?
То, на чём экономится в случае loopback и не экономится на простейших адаптерах — это offloading подсчётов контрольных сумм и деления TCP сегмента на IP пакеты (для UDP, понятно, неприменимо). Да, установка такой карточки решит эту проблему, но мне кажется, что это перебор; даже среди Intel можно найти адекватные модели с поддержкой нужных характеристик за 30, а не 90 долларов. В верхнем сегменте сетевух идут уже варианты с умением удалённого управления (IPMI и аналоги), оффлоадингом IPSec шифрования, и прочие особые навороты.
Кстати, если эта ссылка у них верна, то модель разработки 2005-го года за 90 вечнозелёных может вполне соответствовать современной в треть этой цены
ЛБ>То есть меня несколько озадачила разница в 1000% (тысяча процентов). Я написал сервер на блокирующих сокетах с тем, чтобы когда все выше сокетов отлажу перейти на асинхронные с портами завершения и пулом потоков. Получается все это чушь собачья и основные потери на уровне сетевого адаптера, драйверов и стека протоколов ниже IP.
Мне вот тоже кажется, что сама по себе передача через реальный сетевой канал не даст такого эффекта. Работает что-то ещё.
Например, может быть неоптимальный шедулинг. В случае loopback данные оказываются в приёмном сокете ещё до выхода из send() в передающем сокете. В случае удалённой сети между ними заметная задержка. Может, что-то делается в это время, из чего сложно переключиться.
Да хоть вымывание процессорных кэшей...