... {toc} В производительность модуля фильтрация не упирается, как правило единственной проблемой при запуске бывает не совсем корректное работающее по умолчанию оборудование (процессор, сетевые карты). Мы много сталкивались с этим, поэтому готовы помочь с настройкой этого оборудования для обеспечения отличной производительности. Есть четыре вещи которые в основном влияют на потерю пакетов при приёме (допустим, нас не волнует как долго он будет проходить через нашу систему, то есть latency мы можем жертвовать), а наша задача - поймать все пакеты, не упустив ни одного и обработать. h1. Как увидеть информацию о потерях Ключевые слова: missed, dropped, fifo, error, rx. {code} ip -s -s link show eth1 {code} Смотреть нужно на RX Errors. Некоторые сетевые карты предоставляют более подробную информацию о характере потерь: {code} ethtool -S eth1 {code} Потери могут быть не только на сетевых картах Carbon Reductor. Они могут быть и на порту сетевого оборудования, отправляющего зеркало трафика. О том, как это посмотреть можно узнать из документации производителя сетевого оборудования. h1. Нагрузка на процессор и что она значит Выполните команду {code} top -cd1 {code} и нажмите клавишу "1". Вы увидите что-то в духе: {code} Tasks: 143 total, 1 running, 142 sleeping, 0 stopped, 0 zombie Cpu0 : 0.0%us, 0.0%sy, 0.0%ni, 88.0%id, 0.0%wa, 0.0%hi, 12.0%si, 0.0%st Cpu1 : 0.0%us, 0.0%sy, 0.0%ni, 88.8%id, 0.0%wa, 0.0%hi, 11.2%si, 0.0%st Cpu2 : 0.0%us, 1.0%sy, 0.0%ni, 85.0%id, 0.0%wa, 0.0%hi, 14.0%si, 0.0%st Cpu3 : 0.0%us, 0.0%sy, 0.0%ni, 87.8%id, 0.0%wa, 0.0%hi, 12.2%si, 0.0%st {code} Нас в основном интересуют цифры "%si". # Нагрузка должна быть распределена равномерно, если Cpu0 трудится, а 1..n находятся на нуле - это не очень хорошо. # 0% на каждом ядре - вы скорее всего ещё не настроили зеркало, а если всё работает - у вас замечательный сервер. # 1-3% на каждом ядре - всё хорошо настроено, можно даже увеличивать канал и не особо беспокоиться об апгрейде железа. # 6-10% в принципе сойдёт. # 11-15% повод задуматься о покупке более хорошего оборудования или его настройке. # 20-100% скорее всего будут потери пакетов и пропуски фильтрации. Если ситуация сохраняется после того, как вы прошлись по всем пунктам в этой статье (и воспользовались ими) - свяжитесь с технической поддержкой. На постоянное использование можно добавлять команды в хук start.sh в функцию client_post_start_hook(). h1. Network Top В комплекте с редуктором поставляется утилита {code} chroot /app/reductor network-top {code} Запускается без аргументов, показывает полную картину нагрузки на сетевые карты и ядра процессора в реальном времени. Аномально высокие значения подсвечиваются желтым (больше нормы) или красным (критично) цветом. h1. Размер буфера сетевой карты {code} [root@centos ~]# ethtool -g eth1 Ring parameters for eth1: Pre-set maximums: RX: 4096 RX Mini: 0 RX Jumbo: 0 TX: 4096 Current hardware settings: RX: 4096 RX Mini: 0 RX Jumbo: 0 TX: 256 {code} Здесь мы видим увеличенный до максимума rx-буфер. В Carbon Reductor DPI X при добавлении сетевой карты для фильтрации через мастер для неё автоматически настраивается оптимальный размер RX-буфера. Также он настраивается автоматически при использовании опции FWBOOST. h1. Распределение прерываний {include:reductor5:Распределение прерываний} h1. Мощность ядер процессора В Carbon Reductor DPI X процессор автоматически настраивается на максимально доступную базовую частоту.
|
|
h1. Различные значения rx-usecs
|
h1. Настройки rx-usecs
|
|
Статья для лучшего понимания, правда больше под маршрутизаторы : [http://habrahabr.ru/post/108240/]
|
В Carbon Reductor DPI X автоматически подбирается оптимальное значение этого параметра для сетевой карты при использовании опций FWBOOST.
|
|
В кратце - можно за счёт повышения нагрузки на процессор слегка снять нагрузку с сетёвки уменьшая rx-usecs. На большинстве машин использумых в нашем случае оптимальным оказалось значение 1.
|
{code}
|
{code}
|
ethtool -C eth1 rx-usecs 1 {code}
|
h1. Замена сетевых карт
|
Иногда бывает дело просто в железе. Если уверены, что сетевая карта хорошей модели и есть ещё одна такая же - попробуйте использовать её. Возможно она просто бракованная, хоть вероятность и мала.
|
Иногда бывает дело в используемом оборудовании. Если Вы уверены, что сетевая карта хорошей модели и есть ещё одна такая же - попробуйте использовать её. Возможно она просто бракованная.
|
|
Иногда дело бывает в драйвере (в случае dlink / realtek сетевых карт). Они, конечно, здорово поддерживаются практически любым дистрибутивом, но для высоких нагрузок не очень подходят.
|
Иногда дело бывает в драйвере (в случае dlink / realtek сетевых карт). Они не подходят для высоких нагрузок.
|
h1. Отключение гипертрединга
|
... В некоторых случаях использование процессора с отключенным гипертредингом оказывалось эффективнее, чем с включенным, несмотря на меньшее количество логических ядер. Делать это стоит, если все предыдущие пункты не помогают.
|
|
h1. Включение RPS (актуально для realtek/dlink/бюджетных intel)
|
h1. Включение RPS
|
|
Примечание - включать надо для всех vlan на сетевой карте отдельно. Включение только для самого девайса ethX не снизит нагрузку, создаваемую обработкой пакетов с vlan-интерфейсов.
|
В Carbon Reductor DPI X эта технология автоматически настраивается для сетевых карт с одной очередью.
|
|
При использовании опции FWBOOST эта технология автоматически настраивается в сочетании с RSS.
|
|
Мы в скором времени постараемся сделать автоматическую настройку при необходимости.
|
{code}
|
|
Пока можно включить руками или добавив в хук команду в духе:
|
{code}
|
cpucount="$(grep -c 'model name' /proc/cpuinfo)" printf "%x\n" $((2**cpucount-1)) > /sys/class/net/eth1/queues/rx-0/rps_cpus {code}
|
h1. Актуализация настроек зеркала трафика
|
Разнесение всех интерфейсов зеркала трафика по отдельным бриджам даёт небольшое снижение нагрузки за счёт устранения небольшой петли.
|
Разнесение всех интерфейсов зеркала трафика по отдельным бриджам даёт снижение нагрузки.
|
h1. Использование нескольких сетевых карт для приёма зеркала
|
Вы можете раскидать распределить зеркало между несколькими сетевыми картами, указав в настройках создаваемых сессий зеркалирования равные диапазоны абонентских физических портов.
|
|
h1. Отключение логирования
|
h1.
|
|
menu > настройки алгоритма фильтрации > логировать срабатывания отключите эту опцию, это _немного_ ускорит процесс обработки пакета и отправки редиректа. Однако несмотря на "немного", при очень частых срабатываниях - способно даже немного снизить нагрузку на процессор.
|
h1. MTU
|
MTU на порту железки, отправляющей коммутатора, отправляющего зеркало не должно быть больше, чем MTU интерфейса на Carbon Reductor (в том числе и всех VLAN), принимающего зеркалированный трафик.
|
|
Рекомендуем посмотреть статистику на свитче коммутаторе по распределению размеров пакетов, для D-Link например команда
|
{code}
|
... show packet port 1:1 {code} и вывод в духе: {code} Port number : 2:11 Frame Size/Type Frame Counts Frames/sec --------------- ---------------------- ----------- 64 1470536789 6330 65-127 511753536 12442 128-255 1145529306 1433 256-511 704083758 1097 512-1023 842811566 882 1024-1518 1348869310 7004 1519-1522 2321195608 1572 1519-2047 2321195608 1572 2048-4095 0 0 4096-9216 0 0 Unicast RX 0 0 Multicast RX 16 0 Broadcast RX 0 0 Frame Type Total Total/sec --------------- ---------------------- ----------- RX Bytes 1384 0 RX Frames 16 0 TX Bytes 20409818277370 15162751 TX Frames 34114583632 30760 {code} По дефолту, CentOS ставит MTU = 1500, лучше выставить его равным максимальному ненулевому значению из статистики. {code} 1519-2047 2321195608 1572 {code}
|
h2. Как определить потери пакетов из-за низкого MTU?
|
Смотрите Посмотрите на RX: length значение.
|
{code}
|
... # ip -s -s link show eth1 3: eth1: <BROADCAST,MULTICAST,NOARP,UP,LOWER_UP> mtu 1528 qdisc mq state UP qlen 1000 link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff RX: bytes packets errors dropped overrun mcast 5956390755888 19345313821 3533855 0 0 817154 RX errors: length crc frame fifo missed 3533855 0 0 0 0 TX: bytes packets errors dropped carrier collsns 23100 330 0 0 0 0 TX errors: aborted fifo window heartbeat 0 0 0 0
|
{code}
|
# Как избавиться от этих потерь?
|
|
|
Разово:
|
... {code} ip link set eth1 mtu 1540
|
{code}
|
На постоянку:
|
На постоянной основе:
|
|
Дописать в конфиг сетёвки (/etc/sysconfig/network-scripts/ifcfg-eth1):
|
Дописать в конфиг сетевой карты (например /etc/sysconfig/network-scripts/ifcfg-eth1):
|
{code}
|
... MTU=1540 {code}
|