Какое прерывание используется сетевой картой
Большинство настроек производительности сервера Carbon Reductor настраивает автоматически, но некоторые нужно подстраивать под конкретный сервер вручную. Если Ваш сервер перестал справляться с нагрузкой или вы хотите повысить запас производительности сервера, воспользуйтесь советами из этой статьи.
Для оценки будем использовать набор утилит в Carbon Reductor и стандартные инструменты iproute.
Все команды надо запускать перейдя в контейнер Carbon Reductor:
Сетевые карты
Режим энергосбережения
Ещё одно "но", которое приводит к проблемам и которое сложно выяснить программным путём - режим энергосбережения в UEFI или BIOS, который у некоторых процессоров Intel Xeon приводил напротив, к повышению нагрузки. Лучше выключить эту опцию, выбрав режим "производительность" (для этого потребуется перезагрузить сервер).
Владельцам процессоров Intel Xeon и сетевых карт Intel 82599 (а также многих других 10Гбит/сек сетевых карт от Intel) стоит проверить настройки DCA в BIOS/UEFI, эта опция может дать приблизительно 5-10% производительности. Включен он или нет можно посмотреть командами (после запуска):
Если включен, в выводе будет:
Масштабирование
В рамках одного сервера
Вы можете распределить зеркало между несколькими сетевыми картами, указав в настройках создаваемых зеркал равные диапазоны абонентских портов.
Обычно это имеет смысл в случае если сервер имеет несколько физических процессоров и несколько сетевых карт (несколько портов одной карты привязываются к одному и тому же процессору, использование "чужого процессора" ведёт к меньшей производительности).
Между серверами
Вы можете располагать сетевые карты из пункта выше в разных серверах для масштабирования нагрузки.
Load per CPU
Отображает что делает каждое ядро. Распределение обработки трафика может достигается за счёт очередей сетевой карты (RSS) или технологии RPS ("программный" RSS).
- Interrupts - прерывания от сетевой карты
- NET_RX - отложенная обработка входящего трафика: собственно обработка пакетов файрволом
- Total - число обрабатываемых пакетов
- dropped - потери пакетов
- time_squeeze - количество дополнительных циклов обработки пакетов из 1 прерывания. При наличии потерь, косвенно указывает что именно ядро не справляется с обработкой пакетов (при большом количестве циклов, более 100-300)
Низкая частота
Процессоры с большим числом ядер, но низкой частотой - 2 - 2.2GHz не подходят для сетевых задач с низкими задержками. Низкая частота приводит к медленной обработке отдельно взятого пакета, которая не масштабируется с числом ядер. Иными словами, числом ядер невозможно побороть задержки в обработке пакетов.
Что с этим делать - лучше не покупать такие процессоры, они созданы для других задач. Если он уже куплен - поискать ему другое применение.
Оптимальная частота для процессоров используемых для сетевых задач - 3GHz+, но чем выше - тем лучше.
Flow-control
По умолчанию Carbon Reductor отключает flow-control для сетевых карт принимающих зеркало трафика, так как она чаще приводит к потерям, чем к сглаживанию пиковых нагрузок.
Проверить настройки можно с помощью команды:
MTU на порту железки, отправляющей зеркало не должно быть больше, чем MTU интерфейса на Carbon Reductor (в том числе и всех VLAN), принимающего зеркало.
Рекомендуем посмотреть статистику на свитче по распределению размеров пакетов, для D-Link например команда `show packet port 1:1`
По умолчанию CentOS используется MTU = 1500, лучше выставить его равным максимальному ненулевому значению из статистики.
Как определить потери пакетов из-за низкого MTU?
Смотрите на RX: length значение в выводе команды:
Как избавиться от этих потерь?
*Разово* - выполнить команду:
*Постоянно* - дописать в настройки сетёвой карты `/etc/sysconfig/network-scripts/ifcfg-eth1`:
Параметры платы сетевого адаптера иногда устанавливаются в программном обеспечении, но они должны совпадать с установками, заданными на плате перемычками или DIP-переключателями. Дополнительную информацию о настройке платы с помощью переключателей можно получить из ее документации.
Линии запроса прерывания - это физические линии, по которым различные устройства (например, порты ввода/вывода, клавиатура, драйверы дисков и платы сетевого адаптера) могут послать микропроцессору компьютера запросы на обслуживание, или на прерывание. Линии запроса прерывания встроены в аппаратуру компьютера, они имеют различные уровни приоритетов, что позволяет процессору определить наиболее важный из запросов.
Посылая компьютеру запрос, плата сетевого адаптера использует прерывание (interrupt) - электрический сигнал, который направляется центральному процессору компьютера. Все устройства в компьютере должны пользоваться разными линиями запроса прерывания, или прерыванием (IRQ). Линия запроса прерывания задается при настройке устройства. (Примеры см. в таблице.)
В большинстве случаев в PC платы сетевого адаптера используют прерывание 1RQ3, IRQ5, IRQ10 или IRQ11. Если есть выбор, рекомендуем отдать предпочтение IRQ5, тем более что это значение установлено по умолчанию во многих системах. Чтобы определить, какие значения прерываний установлены по умолчанию в системе можно воспользоваться диагностическими утилитами или заглянуть в файл \var\log. .
Если ни IRQ3, ни IRQ5 недоступны, выберите другой доступный номер пррывания из свободных.
IRQ | Компьютер с процессором 80286 (или выше) |
1em2 (9) | EGA/VGA |
3 | Доступен [если не занят вторым последовательным портом (COM2, COM4) или мышью |
4 | СОМ1, СОМЗ |
5 | Доступен [если не занят вторым параллельным портом (LPT2) или звуковой платой] |
6 | Контроллер дисковода |
7 | Параллельный порт (LPT1) |
8 | Часы реального времени |
10 | Доступен |
11 | Доступен |
12 | Мышь (PS/2) |
13 | Математический сопроцессор |
14 | Контроллер жесткого диска |
15 | Доступен |
Базовый порт ввода/вывода
Базовый порт ввода/вывода (base i/o port) определяет канал, по которому передаются данные между устройством компьютера (например, платой сетевого адаптера) и центральным процессором. Для центрального процессора порт выглядит как адрес. Каждое устройство системы должно иметь уникальный адрес базового порта ввода/вывода. Современные платы сетевых адаптеров используют протокол plug-n-play для установки большинства параметров конфигурации еще до начала загрузки ОС.
Адреса портов ввода/вывода, занятые устройствами, оюычно приводятся в документации на компьютер. Чтобы узнать какие адреса какими устройствами используются можно можно воспользовавшись диагностическими утилитами или заглянув в файл \var\log. .
Базовый адрес памяти
Базовый адрес памяти (base address) указывает на ту область памяти компьютера (RAM), которая используется платой сетевого адаптера в качестве буфера для входящих и исходящих кадров данных. Этот адрес иногда называют начальным адресом RAM. Часто базовым адресом памяти у платы сетевого адаптера является D8000. (Иногда последний нуль не указывается: вместо D8000 пишется D800.) Следует выбирать базовый адрес памяти, не занятый другим устройством.
Многие платы сетевых адаптеров не используют адресное пространство системы, следовательно, такой параметр, как базовый адрес памяти, у них отсутствует.
Некоторые платы сетевого адаптера имеют параметр, позволяющий выделить определенный объем памяти для хранения кадров данных. Например, есть платы, в которых Вы можете выделить 16 Кб или 32 Кб памяти. Чем больше памяти Вы выделяете, тем выше скорость сети, но тем меньше памяти остается для других целей.
Next: Внешний и внутренний трансивер Up: Сетевые адаптеры Previous: Сетевой адрес Contents Index Alex Otwagin 2002-12-16
Параметры платы сетевого адаптера должны быть корректно установлены, чтобы ее работа протекала правильно. В их число входят:
• базовый адрес порта ввода/вывода;
• базовый адрес памяти;
Параметры платы сетевого адаптера иногда устанавливаются в программном обеспечении, но они должны совпадать с установками, заданными на плате перемычками или DIP-переключателями. Дополнительную информацию о настройке платы с помощью переключателей можно получить из ее документации.
Линии запроса прерывания — это физические линии, по которым различные устройства (например, порты ввода/вывода, клавиатура, драйверы дисков и платы сетевого адаптера) могут послать микропроцессору компьютера запросы на обслуживание, или на прерывание /3-8/.
Линии запроса прерывания встроены в аппаратуру компьютера, они имеют различные уровни приоритетов, что позволяет процессору определить наиболее важный из запросов. Посылая компьютеру запрос, плата сетевого адаптера использует прерывание (interrupt) — электрический сигнал, который направляется центральному процессор; компьютера. Все устройства в компьютере должны пользоваться разными линиям запроса прерывания, или прерыванием (IRQ). Линия запроса прерывания задается при настройке устройства.
В большинстве случаев платы сетевого адаптера используют прерывание IRQ3 IRQ5, IRQ10 или IRQ11. Если есть выбор, рекомендуется отдать предпочтение IRQ5 тем более что это значение установлено по умолчанию во многих системах. Если ни IRQ3, ни IRQ5 недоступны, необходимо другой доступный номер прерывания. Данные по прерываниям для IBM-совместимых компьютерам от 286 процессора и выше представлены в таблице 5
Прерывания, используемые в компьютере Таблица 5
Номер прерывания | Устройство |
2(9) | видеоадаптер EGA/VGA |
Доступен [если не занят вторым последовательным портом (COM2, COM4) или мышью | |
СОМ1.СОМЗ | |
Доступен [если не занят вторым параллельным портом (LPT2) или звуковой платой) | |
Контроллер дисковода | |
Параллельный порт (LPTI) | |
Часы | |
Доступен | |
Доступен | |
Мышь (только для компьютеров РS/2) | |
Математический сопроцессор | |
Контроллер жесткого диска | |
Контроллер жесткого диска |
Базовый порт ввода/вывода
Базовый порт ввода/вывода (base i/o port) определяет канал, по которому курсирую данные между устройством компьютера (например, платой сетевого адаптера) и его центральным процессором. Для центрального процессора порт выглядит как адрес. Каждое устройство системы должно иметь уникальный адрес базового порта
ввода/вывода. Адреса портов (в шестнадцатеричном формате), представленные в следующей таблице, если они не заняты, могут быть выделены плате сетевого адаптера. В таблице 6 перечислены адреса портов и соответствующие им устройства.
Адреса портов компьютера Таблица 6
Порт | Устройство | Порт | Устройство |
200-20F | Игровой порт | 300-30F | Плата сетевого адаптера |
210-21F | 310-31F | ||
220-22F | Звуковая карта | 320-32F | |
230-23F | 330-33F | ||
240-24F | 340-34F | ||
250-25F | 350-35F | ||
260-26F | 360-36F | ||
270-27F | LPT2 | 370-37F | LPT1 |
290-29F | 380-38F | FM–синтезатор | |
2D0-2DF | 390-39F | ||
2A0-2AF | 3A0-3AF | ||
2B0-2BF | 3B0-3BF | ||
2C0-2CF | 3C0-3CF | EGA/VGA | |
2D0-2DF | 3D0-3DF | CGA/MCGA | |
2E0-2EF | COM4 | 3E0-3EF | СOM3 |
2F0-2FF | COM2 | 3F0-3FF | COM1 и FDD |
Базовый адрес памяти (base address) указывает на ту область памяти компьютера (RAM), которая используется платой сетевого адаптера в качестве буфера для входящих и исходящих кадров данных. Этот адрес иногда называют начальным адресом RAM.
Часто базовым адресом памяти у платы сетевого адаптера является D8000. (Для некоторых плат последний нуль не указывается: вместо D8000 пишется D800.). При этом необходимо выбирать базовый адрес памяти, не занятый другим устройством. У плат сетевого адаптера, которые не используют оперативную память системы, отсутствует такой параметр, как базовый адрес памяти.
Некоторые платы сетевого адаптера имеют параметр, позволяющий выделить определенный объем памяти для хранения кадров данных. Например, есть платы, в которых можно выделить 16 Кб или 32 Кб памяти. Чем больше памяти выделяется, тем выше скорость сети, но тем меньше памяти остается для других целей. Чтобы обеспечить совместимость компьютера и сети, плата сетевого адаптера должна отвечать следующим требованиям:
• соответствовать внутренней структуре компьютера (архитектуре шины данных);
• иметь соединитель (он должен подходить к типу кабельной системы) для
подключения сетевого кабеля.
Архитектура шины данных
К распространенным типам архитектуры шины данных относятся ISA, EISA, Micro Channel® и PCI. Каждая из них физически отличается от остальных.
EISA (Extended Industry Standard Architecture). Этот стандарт шины был представлен в 1988 году консорциумом из девяти компьютерных компаний: AST Research,. Inc., Compaq, Epson, Hewlett-Packard, NEC, Olivetti, Tandy, Wyse Technology и Zenith. EISA предлагает 32-разрядную шину, совместимую с ISA. Кроме того, она поддерживает дополнительные возможности, которыми обладает шина Micro Chain Architecture, разработанная IBM.
MCA (Micro Channel Architecture). IBM представила этот стандарт в 1988 году как часть своего проекта PS/2. Эта архитектура электрически и физически несовместима с шиной ISA. В отличие от ISA, Мicro Channel работает и как 16-разрядная, и как 32-разрядная шина. Несколько процессоров контроля шины могут независимо управлять ею.
PCI (Peripheral Component Interconnect). Это 32-разрядная локальная шина, которая используется в большинстве компьютеров с процессором Pentium и в компьютерах Apple Power Macintosh. Современная архитектура PCI удовлетворяет большинству требований технологии Plug and Play. Plug and Play — это одновременно и философия построения персонального компьютера, и набор спецификаций его архитектуры. Цель технологии Plug and Play — возможность изменить конфигурацию персонального компьютера без вмешательства пользователя, т.е. максимально упростить подключение любого устройства. Операционными системами, поддерживающими спецификацию Plug and Play, являются Microsoft
Сетевые кабели и соединители
Координируя взаимодействие сетевого кабеля и компьютера, плата сетевого адаптера выполняет три важные функции:
• организует физическое соединение с кабелем;
• генерирует электрические сигналы, передаваемые по кабелю;
• следует определенным правилам, регламентирующим доступ к сетевому кабелю.
Прежде чем выбрать плату сетевого адаптера, соответствующую сети, необходимо определить тип кабеля и соединителей, которые будут использоваться. Каждый тип кабеля имеет различные физические характеристики, которым должна соответствовать плата. Поэтому плата сетевого адаптера рассчитана для работы с определенным типом кабеля (коаксиальным, витой парой или оптоволокном).
Некоторые платы сетевого адаптера имеют несколько типов соединителей. Например, есть платы, разъемы которых подходят для тонкого и толстого коаксиальных кабелей или для витой пары и толстого коаксиального кабеля.
Если у платы сетевого адаптера более одного интерфейсного разъема, выбор каждого из них производится с помощью перемычек или DIP-переключателя, расположенных на самой плате, либо программно. Чтобы правильно сконфигурировать етевую плату, обращайтесь к ее документации.
Производительность сети
Поскольку плата сетевого адаптера оказывает существенное влияние на передачу данных, естественно, она влияет и на производительность всей сети. Если плата медленная, то и скорость передачи данных по сети не будет высокой. В сети с топологией "шина", где нельзя начать передачу, пока кабель занят, медленная сетей плата увеличивает время ожидания для всех пользователей.
После определения физических требований к плате сетевого адаптера — типа разъема и типа сети, в которой она будет использоваться, — необходимо рассмотреть ряд факторов, влияющих на возможности платы.
Хотя все платы сетевого адаптера удовлетворяют определенным минимальным стандартам и спецификациям, некоторые из плат имеют дополнительные возможности, повышающие производительность сервера, клиента и всей сети.
Итак, к факторам, от которых зависит скорость передачи данных, относят следующие. • Прямой доступ к памяти. Данные напрямую передаются из буфера платы сетевого адаптера в память компьютера, не затрагивая при этом центральный процессор. Разделяемая память адаптера. Плата сетевого адаптера имеет собственную оперативную память, которую она пользует совместно с компьютером. Компьютер воспринимает эту память как часть собственной.
Разделяемая системная память. Процессор платы сетевого адаптера использует для обработки данных часть памяти компьютера.
Управление шиной. К плате сетевого адаптера временно переходит управление шиной компьютера, минуя центральный процессор, плата передает данные непосредственно в системную память компьютера. При этом повышается производительность компьютера, так как его процессор в это время может решать другие задачи. Подобные платы дороже стандартных, но они способны повысить производительность сети на 20—70 процентов. Архитектуры EISA, МСА и РСI поддерживают этот метод.
Буферизация. Для большинства плат сетевого адаптера современные скорости передачи данных по сети слишком высоки. Поэтому на плате сетевого адаптера устанавливают буфер — с помощью микросхем памяти. В случае, когда плата принимает данных больше, чем способна обработать, буфер сохраняет данные до тех пор, пока они не будут обработаны адаптере. Буфер повышает производительность платы, не давая ей стать узким местом системы
Встроенный микропроцессор. С таким микропроцессором плате сетевого адаптера для обработки данных не требуется помощь компьютера. Большинство сетевых плат имеет свои микропроцессоры, которые увеличивают скорость сетевых операций.
ПЗУ удаленной загрузки Бывают ситуации, когда безопасность данных настолько важна, что рабочие станции не оборудуются жесткими и гибкими дисками. Эта мера гарантирует, что пользователи не смогут ни скопировать данные на какой-либо магнитный носитель, ни вынести диск с рабочего места. Однако (поскольку обычно компьютер загружается с дискеты или с жесткого диска) необходимо иметь другой источник загрузки программного обеспечения, запускающего компьютер и подключающего его к сети. В таких случаях плата сетевого адаптера снабжается специальной микросхемой ПЗУ удаленной загрузки (remote-boot FROM), которая содержит код для загрузки компьютера и для подключения его к сети (зависит от сетевой операционной системы). С такой микросхемой бездисковые рабочие станции при запуске могут подключаться к сети.
Сетевой адаптер (Network Interface Card, NIC) вместе со своим драйвером реализует второй, канальный уровень модели открытых систем в конечном узле сети — компьютере. Сетевой адаптер совместно с драйвером выполняют две операции: передачу и прием кадра.
Передача кадра из компьютера в кабель состоит из следующих этапов:
· Прием кадра данных через межуровневый интерфейс вместе с адресной
информацией аппаратного уровня. Обычно взаимодействие между протоколами внутри компьютера происходит через буферы, расположенные в оперативной памяти.
· Оформление кадра данных аппаратного уровня, в который инкапсулируется кадр данных. Заполнение адресов назначения и источника, вычисление контрольной суммы.
· Формирование символов кодов при использовании избыточных кодов типа
4В/5В. Скрэмблирование кодов для получения более равномерного спектра сигналов. Этот этап используется не во всех протоколах — например, технология Ethernet 10 Мбит/с обходится без него.
· Выдача сигналов в кабель в соответствии с принятым линейным кодом — манчестерским, NRZI, MLT-3 и т. п.
Прием кадра из кабеля в компьютер включает следующие действия.
· Прием из кабеля сигналов, кодирующих битовый поток.
· Выделение сигналов на фоне шума. Эту операцию могут выполнять различные специализированные микросхемы. В результате в приемнике адаптера образуется некоторая битовая последовательность, с большой степенью вероятности совпадающая с той, которая была послана передатчиком.
· Если данные перед отправкой в кабель подвергались скрэмблированию, то они пропускаются через дескрэмблер, после чего в адаптере восстанавливаются символы кода, посланные передатчиком.
· Проверка контрольной суммы кадра. Если она неверна, то кадр отбрасывается. Если контрольная сумма верна, то из кадра извлекаются данные и передается через межуровневый интерфейс наверх.
Распределение обязанностей между сетевым адаптером и его драйвером стандартами не определяется, поэтому каждый производитель решает этот вопрос самостоятельно. Обычно сетевые адаптеры делятся на адаптеры для клиентских компьютеров и адаптеры для серверов.
В адаптерах для клиентских компьютеров значительная часть работы перекладывается на драйвер, тем самым адаптер оказывается проще и дешевле. Недостатком такого подхода является высокая степень загрузки центрального процессора компьютера рутинными работами по передаче кадров из оперативной памяти компьютера в сеть. Центральный процессор вынужден заниматься этой работой вместо выполнения прикладных задач пользователя.
Поэтому адаптеры, предназначенные для серверов, обычно снабжаются собственными процессорами, которые самостоятельно выполняют большую часть работы по передаче кадров из оперативной памяти в сеть и в обратном направлении.
В зависимости от того, какой протокол реализует адаптер, адаптеры делятся на Ethernet-адаптеры, Token Ring-адаптеры, FDDI-адаптеры и т. д.
Так как протокол Fast Ethernet позволяет за счет процедуры автопереговоров автоматически выбрать скорость работы сетевого адаптера в зависимости от возможностей концентратора, то многие адаптеры Ethernet сегодня поддерживают две скорости работы и имеют в своем названии приставку 10/100. Это свойство некоторые производители называют авточувствительностью.
Сетевой адаптер перед установкой в компьютер необходимо конфигурировать. При конфигурировании адаптера обычно задаются номер прерывания IRQ, используемого адаптером, номер канала прямого доступа к памяти DMA (если адаптер поддерживает режим DMA) и базовый адрес портов ввода/вывода.
Если сетевой адаптер, аппаратура компьютера и операционная система поддерживают стандарт Plug-and-Play, то конфигурирование адаптера и его драйвера осуществляется автоматически. В противном случае нужно сначала сконфигурировать сетевой адаптер, а затем повторить параметры его конфигурации для драйвера. В общем случае, детали процедуры конфигурирования сетевого адаптера и его драйвера во многом зависят от производителя адаптера, а также от возможностей шины, для которой разработан адаптер.
Классификация сетевых адаптеров
В качестве примера классификации адаптеров используем подход фирмы 3Com. Фирма 3Com считает, что сетевые адаптеры Ethernet прошли в своем развитии три поколения.
Адаптеры первого поколения были выполнены на дискретных логических микросхемах, в результате чего обладали низкой надежностью. Они имели буферную память только на один кадр, что приводило к низкой производительности адаптера, так как все кадры передавались из компьютера в сеть или из сети в компьютер последовательно. Кроме этого, задание конфигурации адаптера первого поколения происходило вручную, с помощью перемычек. Для каждого типа адаптеров использовался свой драйвер, причем интерфейс между драйвером и сетевой операционной системой не был стандартизирован.
В сетевых адаптерах второго поколения для повышения производительности стали применять метод многокадровой буферизации. При этом следующий кадр загружается из памяти компьютера в буфер адаптера одновременно с передачей предыдущего кадра в сеть. В режиме приема, после того как адаптер полностью принял один кадр, он может начать передавать этот кадр из буфера в память компьютера одновременно с приемом другого кадра из сети.
В сетевых адаптерах второго поколения широко используются микросхемы с высокой степенью интеграции, что повышает надежность адаптеров. Кроме того, драйверы этих адаптеров основаны на стандартных спецификациях. Адаптеры второго поколения обычно поставляются с драйверами, работающими как в стандарте NDIS (спецификация интерфейса сетевого драйвера), разработанном фирмами 3Com и Microsoft и одобренном IBM, так и в стандарте ODI (интерфейс открытого драйвера), разработанном фирмой Novell.
В сетевых адаптерах третьего поколения (к ним фирма 3Com относит свои адаптеры семейства EtherLink III) осуществляется конвейерная схема обработки кадров. Она заключается в том, что процессы приема кадра из оперативной памяти компьютера и передачи его в сеть совмещаются во времени. Таким образом, после приема нескольких первых байт кадра начинается их передача. Это существенно (на 25-55 %) повышает производительность цепочки оперативная память — адаптер — физический канал — адаптер — оперативная память.
Адаптеры третьего поколения базируются на специализированных интегральных схемах (ASIC), что повышает производительность и надежность адаптера при одновременном снижении его стоимости. Компания 3Com назвала свою технологию конвейерной обработки кадров Parallel Tasking, другие компании также реализовали похожие схемы в своих адаптерах.
Выпускаемые сегодня сетевые адаптеры можно отнести к четвертому поколению. В эти адаптеры обязательно входит ASIC, выполняющая функции МАС-уровня, а также большое количество высокоуровневых функций. В набор таких функций может входить поддержка агента удаленного мониторинга RMON, схема приоритезации кадров, функции дистанционного управления компьютером и т. п. В серверных вариантах адаптеров почти обязательно наличие мощного процессора, разгружающего центральный процессор. Примером сетевого адаптера четвертого поколения может служить адаптер компании 3Com Fast EtherLink XL 10/100.
В Linux сетевое оборудование (процессор, сетевые карты) по умолчанию работает неидеально. Наша задача - поймать пакеты, не упустив ни одного и обработать, при этом желательно в реальном времени.
Для начала убедимся в существовании проблемы. Для этого будем использовать набор утилит в Carbon Reductor и стандартные инструменты iproute.
Все команды надо запускать перейдя в контейнер Carbon Reductor:
Информация о сетевом стеке
Просмотр подробной информации о текущем состоянии сетевого стека:
Некоторые значения подсвечиваются жёлтым (высокое значение) и красным (чрезвычайно высокое значение или ошибка). Это эвристика и не подстраивается под конкретный сервер.
При количестве ядер больше 20 или большом числе VLAN информация может не влезать на экран, решение проблемы - уменьшить масштаб терминала или перечислить необходимые девайсы `--devices=eth1,eth2,eth3`:
Вывод выглядит так:
Данные собираются из нескольких источников (`/proc/interrupts`, `/proc/softirqs`, `/proc/net/softnet_stat` и др) и представленны в удобочитаемом виде. По умолчанию отображаются изменения по сравнению с предыдущими значениями. Режим `--no-delta-mode`, отображает абсолютные значения.
Load per CPU
Отображает что делает каждое ядро. Распределение обработки трафика может достигается за счёт очередей сетевой карты (RSS) или технологии RPS ("программный" RSS).
- Interrupts - прерывания, это копирование пакетов из сетевой карты в оперативной памяти.
- NET_RX - отложенная обработка входящего трафика: собственно обработка пакетов файрволом
- Total - число обрабатываемых пакетов
- dropped - потери пакетов
- time_squeeze - задержки пакетов - пакет не успел обработаться за отведённое время, отложен для обработки позже. Наличие задержек - признак того, что сервер перестаёт справляться с нагрузкой.
"Плавающая" частота
Информация о конкретной сетевой карте
Смотреть нужно на все виды RX Errors.
Некоторые сетевые карты предоставляют подробную информацию о характере потерь:
Обращать внимание нужно не только на наличие ошибок, но и на скорость их появления: например, они могут появиться разово во время настройки сетевой карты.
Потери могут быть как на сетевых картах сервера, так и на порту сетевого оборудования, отправляющего зеркало трафика. О том, как это посмотреть можно узнать из документации производителя сетевого оборудования.
Размер буфера
Здесь видим увеличенный на максимум rx-буфер. В нашем случая оптимальное - максимальное значение, но иногда мы уменьшаем это значение, чтобы ускорить обработку пакетов.
Пример команд для увеличения буфера:
В RHEL-based дистрибутивы (платформа Carbon, CentOS, Fedora итд) укажите параметры ethtool в настройках интерфейса (`/etc/sysconfig/network-scripts/ifcfg-eth1`) строчкой:
Альтернативный вариант с автоматическим определением оптимального значения:
Режим энергосбережения
У многих процессоров существует режим энергосбережения в UEFI или BIOS. Это трудно определить программным путем, поэтому лучше сразу, при настройке сервера, выключить эту опцию, выбрав режим "производительность".
Владельцам процессоров Intel Xeon и сетевых карт Intel 82599 (а также многих других 10Гбит/сек сетевых карт от Intel) стоит проверить настройки DCA в BIOS/UEFI, эта опция может дать приблизительно 5-10% производительности. Включен он или нет можно посмотреть командами (после запуска):
Если включен, в выводе будет:
Опции несовместимые с FORWARD / bridge
General Receive Offload и Large Receive Offload могут приводить к паникам ядра Linux и их лучше отключать:
Либо при компиляции драйвера.
Процессоры
Частые проблемы в настройках процессора.
Веса очередей (RX Flow Indirection)
В ситуации с одной активной сетевой картой и двумя физическими процессорами с разными NUMA-нодами имеет смысл снизить нагрузку на "чужую" NUMA-ноду.
Настраивается с помощью ethtool, очередям задаются веса, не все сетевые карты это поддерживают.
Экспериментов пока было не так много, но оптимальным кажется сочетание весов: 3 на ядра своей ноды, 2 на ядра чужой, так как обращения к оперативной памяти чужой NUMA-ноды медленнее, чем к своей.
Пример - допустим у нас есть 2 двухядерных процессора и сетевая карта eth2, поддерживающая 4 очереди. CPU0, CPU1 - это её локальная нода, CPU2, CPU3 - чужая.
Обязательно проверяйте после этих изменений что всё работает так, как и ожидалось с помощью утилиты network-top.
NOTRACK
Эта опция включена по-умолчанию, выключать ее можно только в исключительных случаях.
Технология NOTRACK отключает наблюдение за состоянием соединения для пакетов к которым она была применена. Она приводит к значительному снижению нагрузки на процессор в случае, если состояние соединения нас не интересует (захват трафика).
Повышенная нагрузка может быть вызвана тем, что к сетевым картам, которые используются для приёма зеркала не применяется правило NOTRACK.
Проверить это можно:
- посмотрев объёмы трафика по сетевым картам с помощью утилиты link-rate
- проверив, что все сетевые карты, принимающие зеркало трафика, имеют ссылку в цепочку mirror_traffic с помощью команды iptables -t raw -nvL PREROUTING
Как интерпретировать нагрузку на процессор
и нажмите клавишу "1", чтобы увидеть информацию о каждом конкретном процессоре.
Формат вывода следующий:
Интерес представляет колонка "%si".
Если нагрузка распределена неравномерно, т.е. Cpu0 трудится, а 1..n нет, то ресурсы процессора используются нерационально.
- 0% на каждом ядре - возможно на сервере нет трафика.
- 1-3% - увеличение канала возможно без апгрейда оборудования.
- 6-10% - текущая нагрузка обрабатывается нормально, увеличение канала потребует апгрейд оборудования.
- 11-15% - вероятно требуется апгрейд оборудования или оптимизации настроек имеющегося.
- 20-100% - с вероятностью 99% присутствуют потери пакетов. Если ситуация сохраняется после применения последующих пунктов этой статьи - свяжитесь с технической поддержкой.
Процессоры
Частые проблемы в настройках процессора.
Гипертрединг
Использование процессора с отключенным гипертредингом может быть эффективнее, чем с включенным, несмотря на меньшее количество логических ядер. Отключить его можно при перезагрузке в UEFI или BIOS.
Различные значения rx-usecs
Мы рекомендуем использовать стандартные значения сетевой карты до тех пор, пока не возникнут проблемы.
В кратце - можно за счёт повышения нагрузки на процессор слегка снять нагрузку с сетевой карты, уменьшая rx-usecs.
На большинстве машин использумых в нашем случае оптимальным оказалось значение 1.
Гипертрединг
Использование процессора с отключенным гипертредингом может быть эффективнее, чем с включенным, несмотря на меньшее количество логических ядер. Отключить его можно при перезагрузке в UEFI или BIOS.
Как интерпретировать нагрузку на процессор
и нажмите клавишу "1", чтобы увидеть информацию о каждом конкретном процессоре.
Формат вывода следующий:
Интерес представляет колонка "%si".
Если нагрузка распределена неравномерно, т.е. Cpu0 трудится, а 1..n нет, то ресурсы процессора используются нерационально.
Показатель "%si" растет нелинейно при повышении нагрузки. Чем больше в Вашем сервере ядер - тем больше они влияют друг на друга и тем сильнее растет "%si".
Если значение стабильно выше 60-80% - что сервер работает практически на пределе. Если подходит к 100% - сервер начинает плохо справляться с фильтрацией (пакеты начинают теряться или обрабатываются с задержкой).
Размер буфера
Здесь видим выкрученный на максимум rx-буфер. Подобрать оптимальное значение сложно, большой буфер - задержки, маленький буфер - потери. В нашем случая оптимальное - максимальное значение, оптимизации осмыслены только при наличии проблем.
Пример команд для увеличения буфера:
В RHEL-based дистрибутивы (платформа Carbon, CentOS, Fedora итд) укажите параметры ethtool в настройках интерфейса (`/etc/sysconfig/network-scripts/ifcfg-eth1`) строчкой:
Альтернативный вариант с автоматическим определением оптимального значения (утилита из netutils-linux):
Информация о конкретной сетевой карте
Смотреть нужно на все виды RX Errors.
Некоторые сетевые карты предоставляют подробную информацию о характере потерь:
Потери могут быть как на сетевых картах сервера, так и на порту сетевого оборудования, отправляющего зеркало трафика. О том, как это посмотреть можно узнать из документации производителя сетевого оборудования.
Сетевой стек, iptables
/proc/interrupts
Отображает то, как очереди сетевой карты распределены между ядрами. Рекомендуем распределять 1 очередь на 1 ядро, можно "лесенкой".
Если в одну очередь приходит больше пакетов, чем в остальные - возможно трафик инкапсулирован (QinQ, PPP).
Опции несовместимые с FORWARD / bridge
General Receive Offload и Large Receive Offload могут приводить к паникам ядра Linux и их лучше отключать:
Либо при компиляции драйвера.
Распределение прерываний
Реальные прерывания
Хорошие сетевые карты поддерживают несколько очередей для входящих пакетов. Каждая очередь привязана к одному или нескольким ядрам. Несмотря на указанный список зачастую сетевые карты по умолчанию коробки работают на первом ядре процессора. Обойти это можно распределив прерывания c помощью утилиты rss-ladder.
Используйте разные ядра (cores), гипертрединг лучше выключить, с ним легко получить неоптимальные настройки.
Многопроцессорные системы
Если в системе больше одного физического процессора, лучше распределять прерывания сетевой карты в пределах ядер её локальной NUMA-ноды. rss-ladder делает это автоматически. Число очередей лучше подстроить под число ядер одного физического процессора, по умолчанию их число часто равно общему числу ядер.
Пример - поставим eth2 8 объединённых очередей.
Очереди бывают combined или отдельные tx и rx, зависит от модели и драйвера сетевой карты.
Не все многопроцессорные системы поддерживают NUMA, иногда память является общей для обоих процессоров и для сетевых карт.
Пример для Carbon Reductor 8
Мы не используем автоматическую настройку RSS, т.к. в редких ситуациях это приводит к зависанию сетевой карты. Так что настраивать это необходимо вручную:
Создаем сам файл-хук: `/app/reductor/cfg/userinfo/hooks/start.sh`
В него добавляем следующее содержимое:
и делаем файл исполнимым: `chmod a+x /app/reductor/cfg/userinfo/hooks/start.sh`.
Отложенные прерывания
Существует технология программного распределения обрабатываемых пакетов между ядрами - RPS. Она универсальна и подходит для любых сетевых карт, даже с одной очередью. Пример настройки:
В Carbon Reductor 8 данная утилита используется автоматически для сетевых карт с одной очередью.
Комбинирование RSS и RPS
После замеров сравните, как этот показатель изменился.
Оптимизация без замеров может ухудшить ситуацию!
- Используется одна сетевая карта
- Сетевая карта не привязана к конкретной NUMA-ноде (команда cat /sys/class/net/eth0/device/numa_node выводит "-1")
- Система имеет 2+ физических процессора
- Один процессор не справляется с нагрузкой
- При использовании распределения реальных прерываний по ядрам обоих процессоров потерь становится ещё больше
Можно попробовать комбинировать RSS и RPS.
Для RPS нужно явно указать маску перечисляющую все доступные процессоры.
- Для 4 ядер - f
- Для 8 ядер - ff
- Для 12 ядер - fff
- Маску можно посмотреть в файле /sys/class/net/eth0/device/local_cpus
Чтобы эффект сохранялся после перезагрузки нужно в хуке /app/reductor/cfg/userinfo/hooks/start.sh добавить следующее:
Если ситуация стала хуже, RPS можно отключить, указав маску = 0:
Сеть провайдера
Network devices
Статистика по сетевым картам
- rx-errors - общее число ошибок, суммирует остальные. В какой счётчик попадает потерявшийся пакет зависит от драйвера сетевой карты.
- dropped, fifo, overrun - как правило, пакеты, не успевшие обработаться сетевым стеком
- missed - как правило, пакеты, не успевшие попасть в сетевой стек
- length - как правило слишком большие пакеты, которые не влезают в MTU на сетевой карте. Лечится увеличением MTU.
- crc - прилетают битые пакеты. Часто - следствие высокой нагрузки на коммутатор.
Различные значения rx-usecs
Мы рекомендуем использовать стандартные значения сетевой карты до тех пор, пока не возникнут проблемы.
В кратце - можно за счёт повышения нагрузки на процессор слегка снять нагрузку с сетевой карты, уменьшая rx-usecs.
На большинстве машин использумых в нашем случае оптимальным оказалось значение 1.
Сетевые карты
Замена сетевых карт
Иногда бывает дело просто в железе. Если уверены, что сетевая карта хорошей модели и есть ещё одна такая же - попробуйте использовать её. Возможно она просто бракованная, хоть вероятность и мала.
Иногда дело бывает в драйвере (в случае dlink / realtek сетевых карт). Они, конечно, здорово поддерживаются практически любым дистрибутивом, но для высоких нагрузок не очень подходят.
Низкая частота
Процессоры с большим числом ядер, но низкой частотой - 2 - 2.2GHz плохо подходят для сетевых задач с низкими задержками. Низкая частота приводит к медленной обработке отдельно взятого пакета.
Оптимальная частота для процессоров используемых для сетевых задач - 3GHz+, но чем выше - тем лучше.
Информация о сетевом стеке
Просмотр подробной информации о текущем состоянии сетевого стека:
Некоторые значения подсвечиваются жёлтым (высокое значение) и красным (чрезвычайно высокое значение или ошибка). Это эвристика и не подстраивается под конкретный сервер.
При количестве ядер больше 20 или большом числе VLAN информация может не влезать на экран, решение проблемы - уменьшить масштаб терминала или перечислить необходимые девайсы `--devices=eth1,eth2,eth3`:
Вывод выглядит так:
Распределение прерываний
Включение из консоли:
Шаг 1. Выбрать пункт "Включить RSS для сетевых карт"
Далее выйти с сохранением настроек.
Шаг 2. Проверить запись в mirror_info.conf
Открыть любым удобным для вас редактором ( например vim ) файл mirror_info.conf
Убедиться в наличие соответствующей записи "mirror rss" напротив каждого указанного интерфейса.
Шаг 3. Рестарт редуктора
Отложенные прерывания
Существует технология программного распределения обрабатываемых пакетов между ядрами - RPS. Она универсальна и подходит для любых сетевых карт, даже с одной очередью. Пример настройки:
В Carbon Reductor данная утилита используется автоматически для сетевых карт с одной очередью.
Комбинирование RSS и RPS
После замеров сравните, как этот показатель изменился.
Оптимизация без замеров может ухудшить ситуацию!
- Используется одна сетевая карта
- Сетевая карта не привязана к конкретной NUMA-ноде (команда cat /sys/class/net/eth0/device/numa_node выводит "-1")
- Система имеет 2+ физических процессора
- Один процессор не справляется с нагрузкой
- При использовании распределения реальных прерываний по ядрам обоих процессоров потерь становится ещё больше
Можно попробовать комбинировать RSS и RPS.
Для RPS нужно явно указать маску перечисляющую все доступные процессоры.
- Для 4 ядер - f
- Для 8 ядер - ff
- Для 12 ядер - fff
- Маску можно посмотреть в файле /sys/class/net/eth0/device/local_cpus
Чтобы эффект сохранялся после перезагрузки нужно в хуке /app/reductor/cfg/userinfo/hooks/start.sh добавить следующее:
Если ситуация стала хуже, RPS можно отключить, указав маску = 0:
Совместимость VLAN и RSS
Некоторые сетевые карты направляют все пакеты с одного VLAN в одну и ту же очередь, так как RSS hashing вычисляет один и тот же хэш для этих пакетов.
Некоторые карты умеют обрабатывать только VLAN первого уровня, но при использовании QinQ сталкиваются с той же проблемой.
Решения бывают разные:
- найти драйвера с поддержкой RSS+VLAN, сделанные сообществом.
- сменить сетевые карты на другую модель, которая поддерживает VLAN лучше.
- отказаться от VLAN, зеркалируя чистый трафик, без VLAN-тегов, либо снимать их при зеркалировании.
- в случае с QinQ может оказаться достаточно снять один тег.
Большое число VLAN
При большом количестве VLAN создаётся большое количество правил iptables в цепочке iptables -t raw -nvL PREROUTING.
Их число можно сократить, перечислив через пробел интерфейсы с большим числом VLAN-тегов в опции: menu -> Reductor DPI X -> Настройки алгоритма фильтрации -> Интерфейсы с большим количеством VLAN.
Опция позволяет добиться 1-3% прироста производительности.
NOTRACK
Эта технология отключает наблюдение за состоянием соединения для пакетов к которым она была применена. Это приводит к значительному снижению нагрузки на процессор в случае, если состояние соединения нас не интересует (захват трафика).
Крупным провайдерам с большим объёмом трафика эта опция практически обязательна, почему - показывает пример:
Веса очередей (RX Flow Indirection)
В ситуации с одной активной сетевой картой и двумя физическими процессорами с разными NUMA-нодами имеет смысл снизить нагрузку на "чужую" NUMA-ноду.
Настраивается с помощью ethtool, очередям задаются веса, не все сетевые карты это поддерживают.
Экспериментов пока было не так много, но оптимальным кажется сочетание весов: 3 на ядра своей ноды, 2 на ядра чужой, так как обращения к оперативной памяти чужой NUMA-ноды медленнее, чем к своей.
Пример - допустим у нас есть 2 двухядерных процессора и сетевая карта eth2, поддерживающая 4 очереди. CPU0, CPU1 - это её локальная нода, CPU2, CPU3 - чужая.
Обязательно проверяйте после этих изменений что всё работает так, как и ожидалось с помощью утилиты network-top.
/proc/interrupts
Отображает то, как очереди сетевой карты распределены между ядрами. Для большинства серверов мы советуем сделать количество очередей сетевой карты, куда приходит зеркало, равным количеству ядрер и привязать каждую очередь к своему ядру.
Если в одну очередь приходит больше пакетов, чем в остальные - возможно трафик инкапсулирован (QinQ, PPP), что мешает сетевой карте равномерно их распределить.
Сетевой стек, iptables
Отправлять меньше трафика
Проанализируйте что вы отправляете в зеркало. Возможно там есть что-то лишнее.
- Иногда один и тот же трафик попадает в зеркало дважды — инкапсулированным и чистым, в таком случае от инкапсулированного можно избавиться.
- Возможно отправляется трафик в обоих направлениях, а достаточно только исходящего.
- Возможно там есть лишние VLAN'ы с служебным трафиком, а Carbon Reductor анализирует только часть.
- Если зеркал трафика несколько, можно балансировать отправку, указывая порты коммутатора, с которых оно снимается (в случае "перекосов").
Замена сетевых карт
Иногда бывает дело просто в железе. Если уверены, что сетевая карта хорошей модели и есть ещё одна такая же - попробуйте использовать её. Возможно она просто бракованная, хоть вероятность и мала.
Иногда дело бывает в драйвере (в случае dlink / realtek сетевых карт). Они, конечно, здорово поддерживаются практически любым дистрибутивом, но для высоких нагрузок не очень подходят.
Network devices
Статистика по сетевым картам
- rx-errors - общее число ошибок, суммирует остальные. В какой счётчик попадает потерявшийся пакет зависит от драйвера сетевой карты.
- dropped, fifo, overrun - как правило, пакеты, не успевшие обработаться сетевым стеком
- missed - как правило, пакеты, не успевшие попасть в сетевой стек
- length - как правило слишком большие пакеты, которые не влезают в MTU на сетевой карте. Лечится увеличением MTU.
- crc - прилетают битые пакеты. Часто - следствие высокой нагрузки на коммутатор.
Читайте также: