Подумал, что необходим небольшой пост, посвященный сетевым адаптерам/интерфейсам, которые устанавливают в своих ИТ-ландшафтах пользователи. Речь пойдет не столько о конкретных моделях, сколько про то, что сеть такой же компонент информационной системы (как и те же диски, память, CPU), и на него нужно обращать не менее тщательное внимание. Многие его просто игнорируют и недооценивают – «Ну сеть и сеть, что там с ней может быть не так? Вот же 10 Гбит/с. Вот график пропускной способности. Всё прекрасно.».

Дальнейшие рассуждения, связаны, скорее, с высоконагруженными системами, где каждый компонент может стать в какой-то момент узким бутылочным горлышком. Почему об этом говорю? Потому что, наверняка, этот текст читают, в том числе, и адепты размещения сервера СУБД и сервера приложения (например, 1С) на одной машине. Это ни хорошо, ни плохо. Это бывает. Но надо помнить, что есть плюсы и минусы такого локального размещения серверов.

С одной стороны, при взаимодействии серверов будет использоваться shared memory, а не IP-протокол. Это вроде как быстрее. Но с другой, у вас может возникать конкуренция за аппаратные ресурсы, которые моментально сведут на нет весь выигрыш. А ещё вы становитесь заложником лишь вертикального расширения системы (добавить памяти или CPU), что может быть даже невозможно. Поэтому с точки зрения стратегического планирования – это путь, скорее, для малых и средних систем, ибо при масштабировании бизнеса вы быстро упретесь в аппаратные ограничения. И ваша задача, как владельцев или администраторов это предвидеть и предупредить.

На этом вступление завершаю.

Что там с IP-трафиком?

Для однородного трафика (например, копирование больших файлов, бекапов) – достаточно такой характеристики сети, как пропускная способность. Но в высоконагруженных системах на базе той же платформы 1С:Предприятие трафик как раз очень неоднородный – запросы очень разные, много коротких и очень коротких запросов.

Это влечет за собой такое требование к сетевому интерфейсу – как отклик. То есть, какое количество запросов в единицу времени может быть передано с сервера приложений 1С к серверу БД (MS SQL или PostgreSQL).

Например, для выполнения отчета серверу 1С необходимо переслать на сервер СУБД 5000 разных запросов. Если отклик сети при проверке достигает всего 500 запросов в секунду, то накладные расходы на сетевой интерфейс будут 10 секунд. Таким образом, для ускорения отчета, не считая других оптимизационных мероприятий, пригодилась бы оптимизация сети. Это может быть как замена сетевой карты, так и замена драйверов и настроек, чтобы повысить показатель отклика.

Продавцы, да и производители, часто указывают в характеристиках сетевых карт лишь пропускную способность. Она, несомненно, важна, но её недостаточно для обоснованного выбора сетевой карты под ваши нужды. И, зачастую, именно показателем отклика сетевой карты обусловлена разница в цене одинаковых по пропускной способности сетевых карт.

Как проверить отклик сетевой карты

В проектах аудита производительности мы безусловно проверяем сетевой отклик между серверами приложений и сервером СУБД. Для этого используем свою утилиту NumaInfo, которая, кроме этого, еще предоставляет информацию загруженности логических процессоров в разрезе NUMA-узлов процессоров.

Для замеров характеристик сети используется кратковременное подключение (в одной сессии) к любой БД на сервере СУБД, в рамках которого в течении одной минуты выполняется простейший запрос:

SELECT 'NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN'

Длина строковой константы 500 символов. Результаты представлены в виде отчета в html-формате.

Синтетические замеры для трех сетевых карт разной пропускной способности

Ниже приведены «эталонные» замеры отклика по 1-, 2.5- и 10 гигабитным карточкам. Сервера физические, одни и те же. На каждом эксперименте просто меняем карты и делаем замеры.

Сетевые карты:

  • 10 Гбит/с : Intel[R] Ethernet Controller X540-AT2

  • 2,5 Гбит/с: Realtek PCIe 2.5GbE Family Controller

  • 1 Гбит/с: Realtek PCIe GbE Family Controller

Замер 1. Контроллер 1Гбит/сек [Realtek PCIe GbE Family Controller]

 

Нагрузки на сеть почти нет – порядка 3%. Отклик составляет порядка 2500 запросов в секунду. Это идеальные условия, в одной сессии. При реальной загрузке СУБД отклик может быть несколько ниже – на 10-20%.

Замер 2. Контроллер 2,5 Гбит/с [Realtek PCIe 2.5GbE Family Controller]

 

 

Для 2,5 гигабитного адаптера загрузка стала меньше – 1,5%, что естественно. Отклик увеличился до 2900 – 3000 запросов в секунду.

Замер 3. Контроллер 10 Гбит/с [Intel[R] Ethernet Controller X540-AT2]

Ну и последний замер провели для 10-гигабитного адаптера. Общая нагрузка на сеть – 0,5%. Отклик стал уже в районе 4000 запросов в секунду.

Замеры отклика на реальных системах

Чтобы не быть голословным, ниже приведены замеры сетевого отклика на нескольких реальных системах, где сеть была тем самым узким бутылочным горлышком в общей картине производительности. При этом системный счетчик загрузки сети демонстрировал абсолютно нормальные показатели, и никто сеть в чем-то плохом даже и не подозревал.

Система 1

Вот ситуация за неделю по счетчику количества запросов в секунду от SQL сервера и системному счетчику нагрузки на сетевой интерфейс

По верхнему графику видно, что через SQL-сервер проходит в среднем 1,5-2 тыс. запросов в секунду, а по нижнему графику видно, что гигабитный сетевой интерфейс особо не нагружен (всплески раз в день – это ежедневный бэкап базы). То есть, все нормально и хорошо. Но если получить замеры сетевого отклика от сервера 1С до сервера MS SQL, то результаты катастрофически низкие:

На гигабитном канале связи порядок цифр должен быть порядка ~2…2,5 тыс. запросов/сек., и полученные замеры отстают от них на порядок.

Система 2

Тут ситуация лучше, чем в первом случае, но все равно показатели ниже в 2-2,5 раза, чем должен выдавать сетевой адаптер. Чем более нагружена система, тем больше рисков, что сетевая карта не сможет обеспечить необходимый трафик данных.

Итого

Еще раз повторюсь о том, что сказано в начале.

Многие недооценивают проблему неверных настроек сетевых интерфейсов или их неудачного выбора. Если у вас высоконагруженная база данных, особенно на платформе 1С, то в ней обязательно присутствует большое количество маленьких запросов, создающих неоднородный трафик. Поэтому кроме пропускной способности имеет смысл проверить сетевой отклик, выполнив обычный тест – запустить большое количество простейших запросов в единицу времени в разрезе одной сессии.

Можно самому написать скрипт. Можете воспользоваться нашей готовой утилитой для связки Windows+MS SQL.

Если замеры не просядут (примерный порядок цифр см. выше в синтетических тестах), значит с сетевой картой все хорошо. Если они будут ниже в разы, то очень вероятно, что одна из проблем падения производительности вашей ИТ-системы – сетевая инфраструктура.

Что с ней может быть не так? Чаще всего – это неверные настройки или не те драйвера, настройки маршрутизации, ну и сама сетевая карта (чип, архитектура). Особенно это распространено среди виртуальных адаптеров, коих в ИТ-ландшафтах становится все больше и больше. А ошибки настройки не так очевидны без подобных замеров.

Ну и не забываем, что сетевая карта с хорошим и стабильным откликом не может стоить как домашняя карточка. Обычно ценник – это неплохой маркер для отсева, но не всегда.

Комментарии (14)


  1. Ava256
    29.01.2025 13:22

    Можно предположить, что если перейти на оптику, то производительность еще немного увеличится, так как интерфейсы 10GBASE-SR имеют меньшие задержки, чем 10GBASE-T


    1. koloskovv Автор
      29.01.2025 13:22

      Соглашусь с вами. Но оптика - это уже оборудование другого уровня.


      1. Lordzero
        29.01.2025 13:22

        В каком смысле другого? По цене стоимость комплекта пары сетевух 10гбит и sfp к ним не такая уж и огромная, в сравнении с медными сетевухами 10g, а уж если на Авито посмотреть, то вообще за дешево можно найти варианты


    1. nikweter
      29.01.2025 13:22

      Ну, на практике мне обнаружить разницу не удалось. Пару лет назад устанавливал новый сервер в том числе под 1С. Был ворох сетевух на 10G, попробовал поиграться. Вставлял модули под оптику, соединял через DAC, ну и сравнивал с простыми 10GBASE-T.

      Пытался мерить latency, смотрел отклик ФС по iscsi, результаты тестирования iperf, пробовал и postgres гонять.

      Сколь либо значимых отличий не обнаружил. Правда, везде использовал стоковые настройки linux ядра. Может быть после какого-то тюнинга сетевого стека и удалось бы выжать больше из оптики, но я понял что в рамках соседних стоек мне все равно какой тип подключения использовать.


  1. ildarz
    29.01.2025 13:22

    2500 запросов/сек - это ~400 мкс на запрос. Реальное время отклика гигабитных сетей - десятки микросекунд максимум, то есть на порядок быстрее. Допускаю, что снижение этого показателя может говорить о проблемах с сетью, но если там в идеальном раскладе 10% именно отклика сети и 90% чего-то еще - это прямо очень грубая оценка.


    1. koloskovv Автор
      29.01.2025 13:22

      В тексте есть ссылка на утилиту. Можете свою написать. Если получите результаты больше 3к з/с для 1-гигабитного интерфейса в одной сессии, то присылайте результаты, будет любопытно посмотреть.


      1. ildarz
        29.01.2025 13:22

        Утилиты для измерения латентности сети и без меня давно написаны. :) И выдают, конечно же, гораздо лучшие показатели, я ведь вам не с потолка цифры называю. У вас же в измерение входят как минимум:

        1. Отправка запроса на сервер SQL

        2. Исполнение запроса

        3. Отправка ответа клиенту

        При этом при запросе в 500 символов вы даже в один стандартный фрейм не уложитесь, то есть измеряете на самом деле некий гибрид латентности и пропускной способности сети плюс время отклика собственно сервера SQL. Применять к этом название "отклик сетевого интерфейса" попросту некорректно с точки зрения того, что происходит на самом деле.


        1. resetsa
          29.01.2025 13:22

          Полностью поддерживаю, что измеряют вообще не понятно.


  1. nerudo
    29.01.2025 13:22

    Вот так всегда, на самом интересном месте (ц)
    Чего делать-то? Ну кроме "поменяйте драйвера, покрутите настройки"


    1. koloskovv Автор
      29.01.2025 13:22

      Причин может быть много, но у вас есть инструмент (скачивайте, пользуйтесь на здоровье), который объективно вам покажет, что из точки А в точку Б запросы ходят так себе. Т.е. вы/администратор можете после каждой итерации по настройкам, драйверам и т.д. проводить замеры и понимать, в правильном ли направлении идет движение.


  1. post_ed
    29.01.2025 13:22

    Встроенные Realtek на серверах под видеонаблюдение крайне плохо себя зарекомендовали, через продолжительное время трафик начинает идти с задержками и потерями, как будто переполняется какой-то буфер. Ситуацию спасает любая другая сетевая, например Intel, LR-Link


  1. Gansterito
    29.01.2025 13:22

    А что на счет тюнинга настроек сетевух? LRO? GRO? БуферА?

    Есть ли толк от увеличения MTU (jumbo frame)?

    Как минимизировать негативное влияние высокого RTT на производительность работы с БД?


  1. orefkov
    29.01.2025 13:22

    Почему вы решили, что ваш тест замеряет отклик сети? Такой тест может замерять что угодно - пропускную способность кэша, скорость парсера sql сервера и т.д и т.п. При выполнении запросов столько всего происходит, почему решили, что уперлись именно в сетку?


    1. gallam
      29.01.2025 13:22

      Это очень просто, при исследовании меняется только сетевая карта, среда настройки, конфигурация, инструмент одинаковый. При этом результат для каждой сетевой карты имеет чёткий тренд, кстати, проверенный неоднократно.