Re: Сетевые карты
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 06.10.13 20:25
Оценка:
Здравствуйте, Лазар Бешкенадзе, Вы писали:

ЛБ>Есть серверное приложение (сервер) и клиентское стресс приложение (стресс).

ЛБ>Если запускать сервер и стресс на одном компьютере через 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() в передающем сокете. В случае удалённой сети между ними заметная задержка. Может, что-то делается в это время, из чего сложно переключиться.
Да хоть вымывание процессорных кэшей...
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.