Почему различная пропускная способность при использовании netperf?

768
RockLegend

Я использую netperf в ОС Windows, с двумя компьютерами, соединенными перекрестным кабелем. Первый ПК использует сетевой контроллер Realtek FE, а второй ПК имеет контроллер Realtek GBE.

С первым компьютером в качестве сервера, а вторым в качестве клиента я получаю следующие результаты:

Recv Send Send  Socket Socket Message Elapsed  Size Size Size Time Throughput  bytes bytes bytes secs. 10^6bits/sec   8192 65536 65536 10.00 95.11  

Когда я переключаюсь, второй компьютер - сервер, а первый - клиент, я получаю следующие результаты:

Recv Send Send  Socket Socket Message Elapsed  Size Size Size Time Throughput  bytes bytes bytes secs. 10^6bits/sec   65536 8192 8192 10.00 50.11  

Почему разная пропускная способность в этих двух случаях?

1

1 ответ на вопрос

1
Spiff

Возможно, это связано с тем, что одна из машин использует плохо настроенное окно TCP (netperf, очевидно, называет это размером сокета Recv). Во время трехстороннего рукопожатия TCP, которое открывает TCP-соединение, каждый хост сообщает, какой размер TCP-окна он может обработать при получении, так что другой хост знает, сколько данных нужно поместить в полет, прежде чем ждать подтверждения TCP.

8 КБ (8 192 байта = 65 536 бит) не позволяют вводить в полет достаточное количество данных при скорости сети 100 000 000 бит / с и приблизительном RTT (время прохождения сигнала == время пинга) в 1 мс.

Чтобы рассчитать правильное окно TCP для использования, вам нужно рассчитать ваш «Bandwidth * Delay Product» (BDP). Пингуйте одну машину от другой и запишите время пинга. В моей загруженной сети GigE сейчас около 1 мс. Я думаю, что это немного выше для GigE, но давайте продолжим, так как один конец вашей ссылки - просто 100BASE-TX.

100 000 000 бит в секунду * 0,001 секунды (1 мс) RTT = 100 000 бит

100 000 бит / 8 бит на байт = 12 500 байт

12 500 байт / 1024 байт на КибиБайт = 12,2 КБ

Таким образом, ваше окно приема TCP на медленной машине должно быть как минимум на 50% больше, чем оно есть (12,2 вместо 8 КиБ).

Опять же, если вы используете современную ОС, такую ​​как Windows 8.x, этот ответ не должен применяться, потому что ваши хосты должны иметь автоматическую настройку окна TCP, поэтому первоначально сообщаемые значения могут быть ненадежными. Если вы используете древнюю ОС, такую ​​как Windows XP, или если автоматическая настройка окна TCP отключена или по какой-то причине не работает, то это применимо.

Похожие вопросы