rx_missed_errors с максимальным размером звонка - пакеты udp
Приложение A отправляет трафик B через TCP. B, использующий многоадресную передачу (UDP), отправляет трафик дальше к C. Приложения на D получают эти данные через TCP.
A -> (TCP) -> B -> (UDP) -> C -> (TCP) -> D
A - Windows Server
B - Linux VM на хосте ESX
C - Linux VM на другом хосте ESX (без нагрузки - только один виртуальный компьютер)
D - клиенты Windows
Когда B отправляет трафик на C, можно наблюдать множественные отбрасывания из-за характера трафика (пакетов), происходящего на уровне NIC (ixgbe) (rx_missed_errors напрямую соответствует тому, какое приложение наблюдает на C).
Увеличение размера кольцевого буфера (на C) до максимального значения (4096) делает ситуацию еще хуже.
Все соединения 10G, уровни трафика не превышают 2 Гбит / с (во время пакетов) (проверено с помощью sar -n DEV 1
).
Вопросы:
Как я могу измерить пакеты с интервалом менее 1 секунды?
Почему увеличение размера кольца может ухудшить ситуацию?
Есть ли способ замедлить трафик на B, чтобы он мог обрабатываться на C без падений на уровне NIC? (Формирование трафика, изменение размера окна tcp / размера буфера?)
Почему, если я заменю B на хост с Windows, падения вообще не будут происходить, как если бы пакеты udp формировались в более удобной форме.
Как еще я мог подойти, проанализировать эту проблему?
Спасибо