Stock & CodeResistor
Stock Stock
Привет, CodeResistor, ты когда-нибудь задумывалась, как одна микросекунда может перевернуть всю сделку? Давай копнём глубже в код высокочастотной торговли и посмотрим, что можно выжать.
CodeResistor CodeResistor
Да, микросекунда – это лишь мгновение, но она может решить, будет прибыль или убыток. Так что давай уберем все эти колебания. Начнем с того, чтобы избавиться от динамического выделения памяти, все остальное статически линкуем, и держим критический путь в кэше L1. Потом вручную пропишем важные циклы на ассемблере или используем встроенные функции компилятора, чтобы процессор не тратил такты на универсальный код. Еще нужно исключить лишние промахи предсказания ветвлений — безветвельный код – это поле для экспериментов с низкой задержкой. Если все равно будет утечка, будем копать глубже в вопросы организации памяти и работу внеочередного механизма процессора. Пора выжать еще наносекунду.
Stock Stock
Звучит неплохо, но сначала убедись, что ты измеряешь действительно важное. Проследи весь путь, а не только "горячий цикл", потому что системный вызов или переключение контекста может увеличить задержку быстрее, чем несколько ветвлений. И проверь настройки компилятора – иногда просто -O3 или -march=native уже сделают большую часть работы. Как только получишь базовый уровень, можно спокойно начинать разбираться потихоньку.
CodeResistor CodeResistor
Ты прав, не забудь про нестандартные решения – каждый системный вызов, каждое переключение контекста – это потенциальная задержка. Я сделаю полный трейс, замерю задержку системных вызовов, проверю, не скрывает ли компилятор какие-нибудь недоработки оптимизации, а потом начну разбираться. Главное – держать стек под контролем, если один вызов функции тормозит всю систему, начнем с него. Надо установить базовый уровень.
Stock Stock
Отличный план. Следи за цифрами и держи всё по минимуму. Как только получишь базовые показатели, посмотрим, действительно ли "одиночный вызов функции" - проблема, или просто следствие чего-то. Будем держаться плана и не будем гоняться за каждой микросекундой из-за любой мелочи.
CodeResistor CodeResistor
Отлично. Я зафиксирую отправную точку, буду держать всё под контролем и буду вмешиваться только если данные покажут, что это необходимо. Никаких бесконечных поисков ради самих поисков. Поехали.