Я разрабатываю программу на Python, которая использует UDP для получения данных от FPGA (устройства сбора данных). Скорость очень высокая, около 54 МБ / с при максимальных настройках, поэтому мы используем выделенное гигабитное Ethernet-соединение. Моя проблема: много пакетов теряются. Это не мгновенная проблема, пакеты приходят в течение долгого времени, затем пауза в несколько секунд, затем все кажется снова в порядке. Пауза зависит от скорости (более быстрая связь, больше потеря).
Я пытался установить буферы выше, но что-то, похоже, отсутствует. Я установил self.sock_data.setsockopt(socket.SOL_SOCKET,socket.SO_RCVBUF,2**28)
для увеличения размера буфера вместе с соответствующей опцией ядра: sysctl -w net.core.rmem_max=268435456
.
Пакеты имеют внутренний счетчик, поэтому я знаю, какой из них потерян (также я использую это для исправления их порядка). Пример: потеря 11 данных, около 357168 пакетов. (Я проверил, и он не кратен размеру внутреннего буфера ни в моей программе, ни в прошивке FPGA). Я смотрю сокет в отдельном потоке и сразу помещаю их в очередь, чтобы сохранить все.
Что еще я должен установить или проверить?