Алгоритмы быстрой обработки HTTP строкБэкенд, теория программирования

Доклад принят в программу конференции
Александр Крижановский
Tempesta Technologies

Основатель и системный архитектор Tempesta Technologies, эксперт в области высокопроизводительных вычислений в Linux/x86-64.

Тезисы

HTTP/2 ввел компрессию стандартных заголовков, но тело URI, Cookie, значения User-Agent по-прежнему могут составлять десятки килобайт и требуют токенизации, поиска и сравнения подстрок и пр. Задача становится критичной, если HTTP парсер должен обрабатывать интенсивный злонамеренный трафик, как например HTTP flood. Стандартные библиотеки предоставляют обширный инструментарий обработки строк, но HTTP строки имеют свою специфику и если разрабатывать HTTP парсер с учетом этой специфики, то можно получить в несколько раз более высокую производительность по сравнению с современными open source решениями и даже превзойти быстрейшие из них.

В докладе будет рассмотрено:

* как HTTP flood может сделать ваш HTTP парсер бутылочным горлышком;
* проблемы x86-64 с branch mispredictions, кэшированием и невыровненной памятью на типичных задачах HTTP парсера;
* оптимизации C/С++ компилятора для multi-branch выражений и автовекторизации;
* сравнение switch-driven конечного автомата (FSM) с прямыми переходами (например в Ragel);
* особенность структуры HTTP строк и почему стандартные библиотеки плохо подходят для их обработки;
* strspn()- и strcasecmp()-like алгоритмы для HTTP строк с использованием SSE и AVX расширений x86-64;
* эффективная фильтрация инъекционных атак (SQL, XSS и пр.) с использованием AVX;
* цена переключения контекста FPU и как Linux ядро работает с SIMD;

Все эти топики будут иллюстрированны микробенчмарками.

C/C++
,
Оптимизация производительности

Другие доклады секции Бэкенд, теория программирования

Rambler's Top100