Пределы и производительность
Сколько памяти нужно программе, какие есть ограничения и как ускорить работу с большими захватами.
Как NetTrace обращается с памятью
Файл захвата не загружается в память. При индексировании на каждый пакет сохраняются только метаданные — где он лежит в файле, время, адреса, поток. Байты читаются с диска, когда они нужны: для видимых строк списка, выбранного пакета, фильтра по содержимому.
| Что хранится | Память |
|---|---|
| Пакет | 64 байта |
| Поток | Около 128 байт, для TCP ещё 136 байт итогов анализа |
| Узел | 56 байт |
| Соединение Ethernet или IP | 48 байт |
Оценка для типичных захватов:
| Захват | Пакетов | Память на индекс |
|---|---|---|
| 100 МБ | около 150 тысяч | 10–20 МБ |
| 1 ГБ | около 1,5 миллиона | 100–200 МБ |
| 10 ГБ | около 15 миллионов | 1–2 ГБ |
Худший случай — когда каждый пакет открывает новое соединение с нового адреса: около 0,5 КБ на пакет.
Интерфейс тоже не держит таблицы целиком: список пакетов, потоки, узлы и соединения запрашивают у движка только видимые строки.
Жёсткие пределы
| Что | Предел | Что происходит при достижении |
|---|---|---|
| Пакетов в захвате | Около 4,29 миллиарда | Чтение останавливается, сообщение «Достигнут предел количества пакетов» |
| Потоков | 8 миллионов | Новые потоки не учитываются; пакеты в списке все |
| Событий временной шкалы | 5 миллионов | Новые события не учитываются |
| Длина одного пакета | 256 КБ | Файл считается повреждённым с этого места |
| Блок PCAPNG | 16 МБ | То же |
| Интерфейсов в PCAPNG | 4096 | То же |
| Длина захвата (snaplen) | 262144 байта | Больше задать нельзя |
| Условий в фильтре | 4096, вложенность скобок 64 | «Слишком сложный фильтр» |
| Точек I/O-графика | 20 000 | Интервал автоматически укрупняется |
| Содержимое потока в панели | 8 МБ или 200 тысяч строк за раз | Кнопка «Следующая часть» |
| Индикаторов одного вида | 200 | Показываются первые |
На число узлов и соединений предела нет.
Если сработал предел потоков или событий, в строке состояния появляется предупреждение. Список пакетов при этом полный — неполной может быть только статистика.
Скорость
Измерено на тестовом захвате: 560 тысяч пакетов, 160 МБ, 40 тысяч TCP-потоков, SSD.
| Операция | Время | Скорость |
|---|---|---|
| Индексирование всего файла | 0,86 с | Около 650 тысяч пакетов в секунду |
Фильтр по быстрому полю: tcp.port == 443 |
0,01 с | Около 50 миллионов пакетов в секунду |
Фильтр с разбором пакета: dns.qry.name contains "host7" |
0,59 с | Около 950 тысяч пакетов в секунду |
| Загрузка 100 строк списка | Меньше 1 мс | Не зависит от размера захвата |
| Содержимое потока, 66 МБ | 1,1 с | Около 60 МБ в секунду |
| Сохранение потока в файл, 66 МБ | 0,7 с | Около 100 МБ в секунду |
На вашем компьютере числа будут другими: они зависят от диска, процессора и состава трафика.
Как ускорить работу
Фильтры
Поля делятся на быстрые и медленные — см. фильтры. Быстрые проверяются по индексу, медленные требуют прочитать и разобрать каждый пакет.
| Медленно | Быстрее |
|---|---|
http.host contains "example" |
tcp.port == 80 && http.host contains "example" |
tcp.payload contains "error" |
tcp.stream == 8 && tcp.payload contains "error" |
dns.qry.name contains "corp" |
dns && dns.qry.name contains "corp" |
Быстрое условие через && отсекает большинство пакетов до разбора.
Диск
Байты читаются с диска постоянно, поэтому:
- держите большие захваты на SSD, а не на сетевом диске;
- не открывайте файл с медленного съёмного носителя — скопируйте его.
Живой захват
- Задайте фильтр захвата: чем меньше пакетов записывается, тем меньше нагрузка.
- Следите за счётчиком «отброшено» в строке состояния.
- Если нужны только заголовки, уменьшите «Макс. байт с кадра».
- На долгих захватах выключите автопрокрутку, когда не смотрите на список.
Сортировка
Сортировка по колонке на десятках миллионов пакетов занимает секунды и память под порядок строк. Сначала отфильтруйте, потом сортируйте.
Что индексирование не блокирует
Пока файл индексируется, уже можно:
- листать список и открывать пакеты;
- применять фильтр — он отработает по уже прочитанной части и дополнится;
- открывать потоки, статистику и шкалу — они показывают то, что уже посчитано.
Недоступно до конца индексирования только сохранение в файл.