Привет, Хабр! Меня зовут Максим, я инженер команды Нагрузочного тестирования в Ideco. Вместе с командой мы развиваем Ideco NGFW Novum и регулярно гоняем его под синтетической нагрузкой — и для проверки регрессии по производительности, и чтобы честно отвечать на вопрос заказчика «а сколько он у вас держит».
У производительности NGFW есть неудобное свойство: один и тот же межсетевой экран на двух разных стендах легко показывает разные числа — и оба теста при этом честные. Причина в том, что производительность — не константа, «зашитая в железо», и сильно зависит от методики. Один тестировщик меряет «голый» форвардинг, другой — HTTP на крупных объектах; один требует ноль потерь, другой допускает процент; один снимает пиковые цифры, другой держит нагрузку несколько минут; на одном стенде стоит свежая сборка, на другом — версия постарше. Поменяйте один параметр — и результат меняется в разы. Сравнивать цифры имеет смысл только тогда, когда выложены обе методики.
Поэтому мы в этой статье говорим о том, как всё устроено у нас: как собран стенд, почему генератор — TRex в режиме ASTF, что именно мы считаем «потерей» и какой у нас критерий успешности по дропам, как бинарным поиском находим максимум и зачем удерживаем каждую точку 300 секунд. Цель — чтобы наши измерения мог воспроизвести любой и точно понять, что стоит за каждой цифрой. В конце отдельно разберём, почему два честных стенда легко получают разные числа — это не «у кого-то ошибка», а сумма методических решений.
И сразу честно: производительность это диапазон, значений зависящий от реальной нагрузки, которая зачастую уникальна у каждого — своя. Наша цель — измерение производительности в лабораторных условиях, которые приближены к реальным, а не рекорд за одну секунду. Намерить больше можно — но это будет число, которого пользователь никогда не увидит в бою.
Методику мы старались сделать воспроизводимой: в конце есть конфиги и команды, чтобы любой желающий повторил измерения у себя.
Что вообще меряют у NGFW и почему числа несравнимы
Прежде чем показывать стенд, договоримся о метриках. У межсетевого экрана нового поколения есть несколько независимых «потолков», и упираться в нагрузке можно в любой из них:
-
Throughput (пропускная способность) — сколько Гбит/с устройство пропускает на уже установленных соединениях. Зависит от размера пакета/объекта: на мелких пакетах упираемся в обработку заголовков (PPS), на крупных — в копирование/инспекцию полезной нагрузки.
-
CPS (Connections Per Second) — сколько новых соединений в секунду NGFW успевает обработать. Это установка сессии, поиск правила, запись в таблицу состояний, логирование. Часто именно CPS, а не Гбит/с, первым упирается в потолок.
-
CC (Concurrent Connections) — сколько одновременных сессий помещается в таблицу состояний. Упираемся в память и в скорость её обхода. Один активный пользователь держит десятки–сотни соединений (вкладки, мессенджеры, фоновые синхронизации, стримы). CC определяет, сколько пользователей/устройств работают одновременно, не вытесняя друг друга.
-
Latency / jitter — задержка, которую вносит устройство.
Ключевая мысль, которую мы хотим донести читателю: число без методики бессмысленно. «100 Гбит/с» без указания размера объекта, набора включённых функций, числа правил/сигнатур, длительности теста и допустимого процента потерь — это не результат, а “воздух“. Дальше — наша методика, при которой результат становится воспроизводимым.
Почему TRex и почему ASTF
Генератор — это половина результата. Среди прочих генераторов трафика, один из основных для себя мы выбрали TRex — открытый генератор трафика от Cisco на базе DPDK.
Почему именно он:
-
Воспроизводимость и доступность. Open-source: методику и конфиги можно опубликовать, и любой повторит измерения без лицензии на «железный» генератор за десятки тысяч долларов. Для аппаратных Spirent/Keysight это невозможно.
-
Производительность. На DPDK TRex выдаёт десятки–сотни Гбит/с и миллионы CPS с одного сервера — достаточно, чтобы нагрузить наш DUT с запасом (генератор не должен быть узким местом).
-
Два режима под две задачи. STL (stateless) — для «пакетной» нагрузки и классики RFC 2544. ASTF (Advanced Stateful) — для эмуляции реальных L4–L7 сессий.
Почему ASTF, а не stateless. NGFW — устройство stateful: оно отслеживает соединения, держит таблицу состояний, разбирает L7. Гонять по нему поток несвязанных пакетов (STL) — значит мерить не то, чем устройство занимается в бою. ASTF поднимает настоящие TCP-сессии с эмуляцией прикладного протокола (HTTP), даёт осмысленные CPS и CC и заставляет работать те самые движки — IPS, DPI, контент-фильтр, — ради которых NGFW и покупают. Единственное исключение — тест «сырой» пропускной способности на крупных UDP-кадрах (1518 байт): там L7 не нужен, это потолок пакетной обработки.
Про ограничение TRex — и почему здесь оно не мешает. TRex ASTF эмулирует L7 по шаблонам и не выполняет настоящее TLS-рукопожатие. Но в описанных ниже тестах расшифровка трафика на NGFW отключена, поэтому ограничение не влияет на результат: устройство само не разбирает TLS — значит, и от генератора настоящий TLS не требуется. Мы корректно снимаем нагрузку на машину состояний, IPS, DPI и контент-фильтр на том трафике, который NGFW реально обрабатывает без расшифровки.
Сценарии с включённой расшифровкой — отдельная история и отдельный инструмент: там, где нужен полноценный TLS, мы используем аппаратный генератор Keysight BreakingPoint (IXIA) с другим профилем трафика. Эти результаты — тема отдельной статьи.
Стенд
Схема стенда: TRex (порт 0) — DUT: Ideco EX — TRex (порт 1).
Device Under Test (DUT):
|
Параметр |
Значение |
|---|---|
|
Продукт / версия |
Ideco NGFW v21 |
|
Платформа (ПАК) |
Ideco EX (старшая модель линейки) |
|
CPU |
Xeon(R) Gold 6338N |
|
RAM |
128Gb |
|
Сетевые карты |
Intel E810, 2xQSFP28 (100Gbps) |
Генератор TRex:
|
Параметр |
Значение |
|---|---|
|
Версия TRex |
v3.06 |
|
CPU |
Xeon(R) Gold 6338N |
|
RAM |
128Gb |
|
Сетевые карты |
Intel E810, 2xQSFP28 (100Gbps) |
|
ОС |
Fedora 42 server |
|
Режим |
ASTF |
Принцип: генератор не слабее DUT, чтобы упирались мы в межсетевой экран, а не в TRex. Перед серией прогонов делаем калибровку — гоним профиль «в обход» DUT (loopback), убеждаемся, что генератор выдаёт целевой CPS/throughput без потерь на самом TRex.
Методика
Ориентир — RFC 9411
Четыре принятых решения: профиль трафика, критерий потерь (не более 1% по session drops), и длительность удержания точки (300 с).
Чтобы сразу снять вопрос «а почему вы меряете именно так», обозначим опору. Методику мы строим по RFC 9411 — Benchmarking Methodology for Network Security Device Performance (стандарт IETF, обновляет RFC 3511; за ним стоит сообщество NetSecOPEN). Это профильный норматив именно для NGFW, и его главная цель — результаты, сопоставимые между разными вендорами и лабораториями, за счёт реализма, повторяемости и прозрачности.
Из RFC 9411 мы берём:
-
трафик приложений вместо «голых» пакетов — меряем, как устройство обрабатывает реальные сессии (отсюда TRex ASTF, а не stateless);
-
набор метрик — пропускная способность, CPS, одновременные соединения (CC);
-
стандартные размеры объектов в HTTP-тестах (у нас — 16 KB и 64 KB);
-
установившийся режим и повторяемость — отсюда удержание точки и фиксированный критерий;
-
допустимый порог неуспешных транзакций как часть критерия, а не абсолютный ноль — у нас это 1%.
Где мы делаем явный выбор — проговариваем его: открытый генератор TRex (вместо аппаратного), конкретный порог 1%, длительность точки 300 с, расшифровка в этих тестах выключена. Именно совпадение этих параметров и делает два результата сравнимыми; их расхождение — и есть причина, по которой «одно и то же устройство» показывает у разных тестировщиков разные числа.
1. Профили трафика
Методика опирается не на один профиль, а на набор, который характеризует устройство в разных измерениях — от «сырой» пропускной способности до обработки реального смешанного трафика с включёнными движками. Профили:
-
UDP, кадры 1518 байт, двунаправленно — верхняя граница «сырой» пропускной способности: крупные кадры, минимум накладных расходов на сессии. Потолок L2/L3-обработки. В реальной сети это трафик перекачки больших объёмов информации: бэкапы, репликация, файловые хранилища, видео.
-
TCP/HTTP, объект 64 KB и TCP/HTTP, объект 16 KB — пропускная способность на реальных HTTP-транзакциях. Чем меньше объект, тем выше доля установления соединений и тем ниже Гбит/с при той же полосе — поэтому 16 KB заведомо «тяжелее» 64 KB. В разрезе реальной сети это обычный веб и API: браузинг, порталы, обмен с облаками. Ближе к повседневному трафику.
-
EMIX — смесь протоколов в пропорциях, характерных для корпоративного трафика. Самый показательный тест: на нём мы и нагружаем движки NGFW. В TRex это составной ASTF-профиль из нескольких pcap с весами — поэтому состав фиксируем явно.
-
TCP CPS — чистая установка/разрыв TCP-сессий: скорость работы машины состояний (новые сессии в секунду).
-
TCP CC — наращиваем число одновременных TCP-сессий и удерживаем: ёмкость таблицы состояний conntrack (упор в память).
Общие параметры (одинаковы во всех прогонах ради сопоставимости): настройки tcp-stack, число правил firewall, число сигнатур IPS, состав EMIX, профили контроля приложений и контент-фильтра. Во всех тестах расшифровка на NGFW выключена.
Состав профиля EMIX

Сразу оговорюсь, что EMIX профилей у нас арсенал и это один из профилей для тестирования в режиме «без TLS расшифровки».
2. Что считаем «потерей» и почему порог — 1%
В stateful-тесте «потеря» — это не потерянный пакет, а сброшенный поток. Долю потерь считаем по счётчикам TRex ASTF дословно:
loss% = (udps_keepdrops + tcps_drops + tcps_conndrops) / open_flows × 100%
где:
-
tcps_conndrops— TCP-соединения, сброшенные на стадии установки (не дошли до established); -
tcps_drops— уже установленные TCP-соединения, которые были сброшены; -
udps_keepdrops— UDP-потоки, сброшенные по таймауту/keepalive; -
open_flows— всего открытых потоков (знаменатель).
Формула это и есть условие воспроизводимости: точку считаем «пройденной», если loss% ≤ 1.
Почему 1%, а не 0. Строгий RFC 9411 допускает 0,001% дропов по соединениям, более старый стандарт RFC 2544 определяет throughput как максимальную скорость с нулевыми потерями, . На практике это слишком хрупкий критерий для долгого stateful-теста: один микробёрст или единичный таймаут роняет весь тест, и результат начинает «шуметь» от прогона к прогону. Поэтому мы используем подход когда находим максимальную нагрузку, при которой потери не превышают заданного порога. Порог 1% — осмысленный компромисс: он отсекает деградацию, но устойчив к статистическому шуму.
3. Бинарный поиск максимума
Линейный перебор нагрузки от нуля до потолка с шагом — это долго и неточно. Мы ищем максимум бинарным поиском по искомой величине теста — целевому CPS, числу одновременных сессий или множителю нагрузки ASTF; остальные метрики (throughput, CC, latency) фиксируем как производные на найденном максимуме.
Бинарный поиск даёт точный результат за обычно 8-12 прогонов вместо десятков.
4. Фаза удержания — 300 секунд
Каждую точку поиска мы удерживаем под нагрузкой 300 секунд (5 минут). Короткий прогон проходит за 10–30 секунд выглядит красиво, но проблемы вылезают только на выдержке нагрузки:
-
переполнение очередей и таблицы состояний по мере накопления сессий;
-
паузы на сборку мусора / периодические housekeeping-задачи;
-
рост задержки и микропотери, которых не видно на коротком окне;
-
тепловой троттлинг.
Структура одной итерации:
-
Ramp-up (30 с) — плавный выход на целевую нагрузку, чтобы не было «холодного» всплеска.
-
Измерительное окно 300 с — установившаяся нагрузка; статистику для критерия 1% считаем только по этому окну.
-
Ramp-down — даём сессий завершиться корректно.
5. Что фиксируем на каждой точке
|
Метрика |
Источник |
|---|---|
|
Достигнутый CPS |
TRex ASTF |
|
Throughput, Гбит/с (RX/TX) |
TRex / счётчики DUT |
|
Одновременные сессии (CC) |
TRex active_flows |
|
Потери, % (по формуле выше) |
TRex (tcps_drops, tcps_conndrops, udps_keepdrops) |
|
Latency |
TRex latency stream |
|
Утилизация CPU DUT |
Ideco |
|
Память / заполнение таблицы сессий |
Ideco |
Тесты из маркетинговых материалов
Тесты на пропускную способность и сессии гоняем на «голом» firewall — они характеризуют сам межсетевой экран. EMIX дополнительно прогоняем с последовательным включением движков, чтобы показать «цену» инспекции. Во всех тестах TREX расшифровка трафика на NGFW отключена; сценарии с расшифровкой вынесены в отдельную методику.
|
Метрика |
Профиль |
ед. измерения |
Модули DUT |
|---|---|---|---|
|
Throughput |
UDP, 1518 байт |
макс. Гбит/с |
FW |
|
Throughput |
TCP/HTTP, 64 KB |
макс. Гбит/с |
FW |
|
Throughput |
TCP/HTTP, 16 KB |
макс. Гбит/с |
FW |
|
Throughput |
EMIX (смешанный) |
макс. Гбит/с |
FW |
|
CPS |
TCP, без L7 |
макс. новых сессий/с |
FW |
|
CC |
TCP, удержание |
макс. одновременных сессий |
FW |
Результаты
Пропускная способность, межсетевой экран (FW):
|
Тест |
Примечание |
Пропускная способность |
|---|---|---|
|
UDP 1518B, двунаправленно |
крупные кадры, L2/L3-потолок |
200 Гбит/с |
|
TCP / HTTP, объект 64 KB |
реальные HTTP-транзакции |
100 Гбит/с |
|
TCP / HTTP, объект 16 KB |
мельче объект — тяжелее |
62 Гбит/с |
|
EMIX |
смешанный корпоративный трафик |
92 Гбит/с |
Здесь сразу видно главное свойство, о котором мы говорили: число зависит от профиля. На крупных UDP-кадрах — 200 Гбит/с, на HTTP с объектом 16 KB — уже 62. Это не «разные устройства», это разная нагрузка на одном и том же FW.
EMIX по уровням инспекции — «влияние» каждого движка:
|
Модули |
Пропускная способность |
|---|---|
|
Firewall |
92 Гбит/с |
|
Firewall + IPS |
31 Гбит/с |
|
NGFW (FW + IPS + контроль приложений + контент-фильтрация) |
15,5 Гбит/с |
Включение IPS срезает пропускную способность примерно втрое (с 92 до 31), полный набор движков — ещё вдвое (с 31 до 15,5). Это ожидаемо: каждый уровень инспекции разбирает содержимое, и это не бесплатно. Здесь же проявляется и чувствительность к составу трафика: на отдельных наборах протоколов движок инспекции расходует память быстрее и раньше выходит на насыщение — поэтому так важно фиксировать профиль и держать точку 300 секунд, а не снимать пик.
Сессии, межсетевой экран (FW):
|
Метрика |
Значение |
|---|---|
|
Новых сессий в секунду (TCP CPS) |
800 000 |
|
Одновременных соединений (TCP CC) |
21 000 000 |
Выводы
-
Методика важнее одной цифры: фиксированные профиль, критерий 1% потерь, бинарный поиск и удержание 300 с — с опорой на RFC 9411 — делают результат воспроизводимым и сравнимым между релизами и лабораториями.
-
ASTF на TRex даёт честную stateful-нагрузку и доступен любому.
-
Цена инспекции NGFW измерима: в нашем случае на EMIX включение IPS снижает пропускную способность с 92 до 31 Гбит/с, полный набор движков — до 15,5 Гбит/с.
Будем рады обсуждению в комментариях: какие профили и критерии используете вы?
ссылка на оригинал статьи https://habr.com/ru/articles/1061244/