Потеря UDP-пакетов при большой загрузке процессора
От: Basil2 Россия https://starostin.msk.ru
Дата: 08.12.03 14:16
Оценка:
Есть:
UDP-сервер под Windows NT/2000 (написан мной). Сервер — single-thread async, гарантия доставки пакетов обеспечивается перепосылкой пакета до тех пор, пока на него не придет подтверждение от получателя. (подтверждение — тоже UDP-пакет в 20 байт)

Проблема:
При большой загрузке компьютера (например, архивация логов) значительная часть пакетов (иногда — почти все) начинает теряться. Причем из лога сервера видно, что он ОТПРАВЛЯЕТ пакеты как обычно (с той же частотой), но они ПЕРЕСТАЮТ ДОХОДИТЬ до адресата. Клиент продолжает долбиться на сервер с пакетом, не получая отсылаемых сервером подтверждений. При убирании нагрузки пакеты снова начинают проходить нормально. То есть, подытоживая, при большой нагрузке ИСХОДЯЩИЙ UDP-трафик начинает теряться (входящий — в полном порядке).

Вопрос:
Что можно подкрутить в Windows, в программе и в настройках сокета, чтобы уменьшить потерю исходящих UDP-пакетов под нагрузкой?
Какие параметры задать для сокета?


P.S. Например, у меня был размер буферов SNDBUF и RCVBUF по 64Кб — пакеты терялись очень сильно, уменьшил до 4Кб — стало работать гораздо лучше (но все равно потери есть).
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.