
Александр Емеленко
Spectral::Technologies
Каждый, кто разрабатывает какой-либо нагруженный сервис на сервере, хочет получать информацию о его работе и каких-либо событиях (например, сколько времени заняла та или иная обработка или как именно происходила обработка запроса). Однако никто не хочет замедлять основную работу системы для такой трассировки или профилирования событий.
Поэтому мы разберем, как принцип работы с высоконагруженными системами, где счет идет на наносекунды (HFT), может использоваться для работы в больших продуктовых проектах. Начнем с самого верха: обычного std::cout и получения текущего времени. Затем будем опускаться все ниже и ниже и дойдем до использования shared memory с rdtsc, минимизации обмена кеш-линий между ядрами системы, а также особенностей работы с этими сценариями на процессорах с strong memory model (Intel) и weak memory model (ARM).
Посмотрим, можно ли использовать полученное решение для работы с несколькими читателями, а не только с потоком-логгером. Также обсудим особенности инвалидации кешей на Intel и как именно в этом случае нам может помочь ARM.
Сделаем вывод, как можно использовать это решение для ускорения работы продуктовых серверов или для увеличения получаемой информации о работе системы без увеличения затрат.

Spectral::Technologies