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" на.
Вопросы:
- Почему несбалансированный?
- Какую область я должен посмотреть, если буфер сокета интенсивно используется с одной стороны, и как?
- Помимо iperf, какие еще хорошие программы (не аппаратное обеспечение / тестер) для измерения производительности?
- Какой лучший способ получить представление о том, как Linux распределяет буфер, из кольцевого буфера Ethernet, буфера TCP, буфера сокетов и других буферов?
- Что может быть другой сущностью, которая может повлиять на пропускную способность, которую я не рассмотрел выше?
- Есть ли документация, которая объясняет, как Linux распределяет распределение памяти между пользователем, ядром, драйверами устройств и сетевым стеком?
Любой совет высоко ценится.
1 ответ
Решение
Предложения:
- Посмотрите на фактические настройки ваших интерфейсов Ethernet. "ethtool" - это один из способов получить подробный обзор. ifconfig говорит вам кое-что, хотя и меньше. (Оба, вероятно, в /usr/sbin/.) Поиск сообщений ядра с помощью "dmesg" может вам кое-что сказать. Глядя на частоту появления ошибок в ссылках, вы можете кое-что увидеть
- Запрос вашего коммутатора на предмет его состояния порта может также показать, что на самом деле происходит. (Не имеет значения, если вы просто используете кабель CAT5 между интерфейсами, без коммутатора.)
- Так как одна пара машин работает, как вы ожидаете, а другая пара машин не работает, я думаю о некоторой аномалии с дуплексным автосогласованием. Полудуплекс необычен для GigE, но, возможно, причиной этого является ваш коммутатор или сетевой адаптер. Возможной причиной может быть обнаружение полудуплексной настройки в любом месте или, в особенности, разногласия между хостом и его переключателем относительно состояния порта.