Мы в компании VasExperts занимаемся задачами анализа сетевого трафика (DPI). Задача довольно нетривиальна, учитывая как объемы трафика у среднего провайдера (40 — 80Gb/s и выше), так и сложность распознания и обработки трафика — фильтрации, обеспечения требуемого QoS, терминации, управления локальными соединениями и пр. Очевидно, что обработка таких объемов должна быть параллельной, — следует загрузить все ядра по максимуму. Но неизбежно возникают разделяемые (shared) данные, доступ к которым из разных потоков при использовании традиционных инструментов — мьютексов и т.п. — фатальным образом влияет на производительность. Да что там shared data, — даже использование системного аллокатора — уже проблема. В докладе я расскажу о внутренней архитектуре нашего продукта — анализатора сетевого трафика: совсем немного о сетевых вещах и более подробно — о модели взаимодействия потоков и распределении их ролей, об аллокации памяти в такой модели, о спасительных интрузивных контейнерах, об ограничениях схем типа Hazard Pointer или user-space RCU поддержки конкурентных структур данных, и о том, почему мы не любим многопроцессорные сервера.