Дисбаланс Linux Socket Buffer - PullRequest
       8

Дисбаланс Linux Socket Buffer

4 голосов
/ 27 января 2009

У меня есть простой сценарий, где два сервера связаны через гигабитную связь. Я запускаю iperf с обеих сторон, чтобы измерить пропускную способность.

Что удивляет меня, всякий раз, когда я запускаю трафик в двух направлениях, он всегда предпочитает только одну сторону (например, ~ 900 Мбит / с против ~ 100 Мбит / с). Если я запускаю трафик однонаправленно, каждая сторона получает ~ 900 Мбит / с.

Если я подключу один из серверов (нижний объем памяти) к другому серверу, двунаправленный трафик будет сбалансирован. Так что определенно не проблема с iperf.

Другие факты:

  • Один сервер имеет довольно большой объем памяти (~ 12 ГБ), а другой - только ~ 4 ГБ.
  • Оба сервера имеют одинаковые конфигурации памяти TCP, в данном случае одинаковые TCP w / r mem, core w / r mem, длина очереди TX.
  • Оба используют одну и ту же сетевую карту (драйвер E1000).
  • Та же версия Linux, RedHat 2.6.9. Большой сервер работает под управлением 64-разрядной версии благодаря 12 ГБ памяти.
  • У обоих нет другого трафика, кроме небольшого SSH и случайного пинга каждую секунду.
  • Оба имеют "tcp_moderate_rcvbuf".

Вопросы:

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

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

1 Ответ

1 голос
/ 28 января 2009

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

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