Linux Socket Buffer Imbalance

I have a simple scenario, where two servers are connected through a gigabit link. I run iperf on both sides to measure the throughput.

What surprises me, whenever I run the traffic bidirectionally, it always favor one side only (eg. ~900Mbps vs. ~100Mbps). If I run the traffic unidirectional, each side got ~900Mbps.

If I connect one of the server (the lower memory) to another server, the bidirectional traffic was balanced out. So definitely not the iperf problem.

Other facts:

  • One server has pretty big memory (~12GB), while the other only has ~4GB.
  • Both server have the same TCP memory configurations, in this case, the same TCP w/r mem, core w/r mem, TX queue length.
  • Both are using the same ethernet card (E1000 driver).
  • Same Linux version, RedHat 2.6.9. The big server runs 64-bit version, due to the 12GB memory.
  • У обоих нет другого трафика, кроме небольшого SSH и случайного пинга каждую секунду.
  • Оба имеют "tcp_moderate_rcvbuf" на.

Вопросы:

  1. Почему несбалансированный?
  2. Какую область я должен посмотреть, если буфер сокета интенсивно используется с одной стороны, и как?
  3. Помимо iperf, какие еще хорошие программы (не аппаратное обеспечение / тестер) для измерения производительности?
  4. Какой лучший способ получить представление о том, как Linux распределяет буфер, из кольцевого буфера Ethernet, буфера TCP, буфера сокетов и других буферов?
  5. Что может быть другой сущностью, которая может повлиять на пропускную способность, которую я не рассмотрел выше?
  6. Есть ли документация, которая объясняет, как Linux распределяет распределение памяти между пользователем, ядром, драйверами устройств и сетевым стеком?

Любой совет высоко ценится.

1 ответ

Решение

Предложения:

  • Посмотрите на фактические настройки ваших интерфейсов Ethernet. "ethtool" - это один из способов получить подробный обзор. ifconfig говорит вам кое-что, хотя и меньше. (Оба, вероятно, в /usr/sbin/.) Поиск сообщений ядра с помощью "dmesg" может вам кое-что сказать. Глядя на частоту появления ошибок в ссылках, вы можете кое-что увидеть
  • Запрос вашего коммутатора на предмет его состояния порта может также показать, что на самом деле происходит. (Не имеет значения, если вы просто используете кабель CAT5 между интерфейсами, без коммутатора.)
  • Так как одна пара машин работает, как вы ожидаете, а другая пара машин не работает, я думаю о некоторой аномалии с дуплексным автосогласованием. Полудуплекс необычен для GigE, но, возможно, причиной этого является ваш коммутатор или сетевой адаптер. Возможной причиной может быть обнаружение полудуплексной настройки в любом месте или, в особенности, разногласия между хостом и его переключателем относительно состояния порта.
Другие вопросы по тегам