«В Computer Science есть только две сложные вещи: инвалидация кэша и придумывание названий», — Фил Карлтон
Разрыв в производительности
Наш парсер логов обрабатывал 800 тысяч строк в секунду. Нам требовалось 3 миллиона строк в секунду. От нужного нам показателя мы отставали в 3,75 раза.
Задача инструмента заключалась в парсинге строк логов в реальном времени, извлечении временных меток, уровней логов и сообщений из миллионов строк в секунду. Обработка миллиона строк логов в текущей реализации требовала 1,25 секунды — слишком долго для анализа в реальном времени.
Профилировщик показывал 85 миллионов промахов кэша. Для обработки строк это казалось слишком большим показателем.
В реализации использовались стандартные строковые функции C — простые, читаемые, но, очевидно, слишком медленные.
Я переписал этот код, добавив обработку строк с учётом кэша. Результаты были такими:
В 4,5 раза быстрее и в 7 раз меньше промахов кэша.
В этой главе мы поговорим о том, как эффективно использовать кэш при обработке строк.