Как оптимизировать полосу пропускания в сетях Ethernet

Original author: Rob MacQueen
  • Translation
В блоге 45 Drives вышел достаточно интересный материал Роба МакКвина, который работает в R&D отделе компании. В нем идет речь об оптимизации полосы пропускания. Попробуем разобраться в этой истории и основных моментах, о которых рассказал Роб.

/ Фото Karl Baron CC

Роб сравнивает 10-гигабитный стандарт с покупкой нового «Мустанга» после многолетней езды на обычном городском седане — гигабитном Ethernet. Схожесть в настройке позволяет не только с легкостью перейти с одного на другой, но и настроить 20-гигабитные и 30-гигабитные соединения.

Автомобильные аналогии вполне уместны, ибо пропускная способность как понятие схоже с тем, что из себя представляет магистраль: чем больше полос на дороге, тем больше автомобилей пользуется дорогой. С ИТ-инфраструктурой все аналогично.

Какое оборудование здесь упоминается:

  • Ячейки хранения Storinator (чтение и запись на скоростях больше 2 Гбайт/с)
  • Коммутатор Netgear XS708E
  • Сетевые адаптеры Intel X540-T2 (идут к Storinator'у)
  • Сетевые кабели Cat 6, Cat 6a и Cat7

Дело в том, что любая ОС, автоматически определить возможность использования 10-гигабитной сетевой карты — поэтому сам процесс в целом идентичен настройке стандартной гигабитной сети.

Что еще:

  • DHCP для коммутатора — выдача IP-адресов
  • iperf для тестирования качества сетевого соединения

Весь дальнейший процесс основан на объединении нескольких 10-гигабитных соединений. Драйвер для связывания каналов уже есть в Linux — дополнительного ПО здесь не требуется.

Далее в CentOS нужно создать конфигурационный файл (устройства, IP, подсеть, режим связывания и так далее). Для решения этой задачи Роб советует взглянуть на его руководство по модификации каналов для CentOS 7. Процесс настройки для FreeNAS находится тут.

Роб столкнулся с непредвиденной проблемой, которая позволила получить пропускную способность только в 11,3 Гбит/с (вместо 20 Гбит/с). Подозрение пало на стандартный размер окна TCP, но в итоге выяснилось, что Linux самостоятельно определяет оптимальный размер окна.

Другой ход — переключение на джамбо-кадры дал только 13,9 Гбит/с. А вот две сетевые карты в каждой машине и связывание двух интерфейсов (по одному на каждую карту) с коммутатором дало искомое 20-гигабитное соединение (что и подтвердил iperf).

P.S. Другие материалы по теме из нашего блога:

ИТ-ГРАД
301.69
vmware iaas provider
Share post

Comments 10

    +5
    То есть вся статья ради того, чтобы сказать, что у вас сетевые карты на 14 гбит, а не на 20?
    Щиорт побери.

    А где куда более важная инфа про irq, про то, что одна сессия всё равно будет в 10G?
      0
      Насколько я знаю, round-robin — единственный из механизмов port bonding, позволяющий увеличивать скорость одной сессии. Жалко, работает не везде и как попало (очень сильно зависит от конкретного свитча)
        +1
        Да, увеличивает, только резко возрастает количество TCP out of order пакетов, даже при crossover подключении без свичей вовсе. Поэтому нужно задирать параметр net.ipv4.tcp_reordering.
      0
      Узкое место: PCI-E, а точнее серверный мост, который является посредником между CPU и PCI-E устройствами. Начиная с чипсета intel c202/c602 PCI-E линии подключены напрямую к CPU. По сравнению с intel 5500/5520 ускорение на порядок! Возможно Ваша платформа не имеет прямых линий на CPU.
        +1
        Статья — много воды и немножко цитат из bonding.txt.
        Вы открыли миру аггрегацию линков!
          0
          Мне казалось, для аггрегирования обычно используют mode=4 (IEEE 802.3ad) (LACP).
          Автору статьи нужно было запустить, например, htop, чтобы посмотреть, как дела с прерываниями.
          Если видно, что загружено только одно ядро процессора загрузкой ядра linux (в htop красненький цвет), то драйвер упирался прерываниями в CPU.
          У интелового драйвера можно выставить 4 или 8 векторов прерываний, которые могут висеть каждое на своем ядре.
          Тогда драйвер сетевухи будет размазывать нагрузку на 4-8 ядер, а не на одно.
          Вполне возможно, тогда автор получил бы 20 Гб сразу.
            0
            Через iperf автор ни с каким режимом кроме round-robin никогда бы не получил больше 10Гбит.

            Ибо все эти режимы используют хеш от (srcip | dstip | srcport | dstport | srcmac | dstmac) в разных режимах и комбинациях для выбора интерфейса для передачи данных.

            В таком виде единственный TCP поток пойдет всегда по одному интерфейсу.
              0
              Ну, не совсем. Iperf поддерживает работу в несколько потоков.
              Каждый поток открывает свое соединение.
              Я получил вот такую картину:
              22:42:09.093381 IP 127.0.0.1.51086 > 127.0.0.1.5001: tcp 65483
              22:42:09.093446 IP 127.0.0.1.51090 > 127.0.0.1.5001: tcp 106
              22:42:09.093463 IP 127.0.0.1.5001 > 127.0.0.1.51090: tcp 0
              22:42:09.093479 IP 127.0.0.1.51090 > 127.0.0.1.5001: tcp 65483
              22:42:09.093562 IP 127.0.0.1.51088 > 127.0.0.1.5001: tcp 65483
              22:42:09.093590 IP 127.0.0.1.5001 > 127.0.0.1.51088: tcp 0
              22:42:09.093642 IP 127.0.0.1.51086 > 127.0.0.1.5001: tcp 65483
              22:42:09.093670 IP 127.0.0.1.5001 > 127.0.0.1.51086: tcp 0
              22:42:09.093719 IP 127.0.0.1.51089 > 127.0.0.1.5001: tcp 106
              22:42:09.093735 IP 127.0.0.1.5001 > 127.0.0.1.51089: tcp 0
              22:42:09.093750 IP 127.0.0.1.51091 > 127.0.0.1.5001: tcp 65483
              22:42:09.093774 IP 127.0.0.1.5001 > 127.0.0.1.51091: tcp 0
              22:42:09.093843 IP 127.0.0.1.51087 > 127.0.0.1.5001: tcp 65483
              


              Автору статьи нужно было просто указать -P 2, или -P 4.
                0
                Это понятно, но, как я понял, целью его был разгон именно одного потока.
                Да и никто не гарантирует, что та комбинация IP:PORT, которая будет получена приведёт к использованию двух разных интерфейсов.
                  0
                  > Это понятно, но, как я понял, целью его был разгон именно одного потока.
                  Мне кажется, автор просто не подумал об этом.
                  Как говорится, не ищите хитрый план там…
                  Я не знаю примеров реальной нагрузки, где нужно отдавать 10Г в одну TCP сессию.

          Only users with full accounts can post comments. Log in, please.