Архив за месяц: Апрель 2021

Исполнение ордера

В представлении обывателя, ордер, который брокер получает от клиента, немедленно отправляется брокером на биржу для исполнения. Брокеру остается лишь подождать некоторое время, пока ордер не будет исполнен на бирже, и потом передать информацию об исполнении клиенту. Однако отправка ордера на биржу — это не единственный способ исполнить ордер клиента. У брокера есть множество вариантов, и может так оказаться, что ордера, полученные от клиентов вообще не дойдут до биржи. Данная статья рассказывает о нескольких возможных вариантах.

Читать далее

Привязываем процесс к процессору с помощью taskset

Данный простой пример запускает два Java-процесса на Linux-машине. Один процесс посылает сообщения, а второй получает эти сообщения через UDP-протокол через сетевой loopback-интерфейс. Пример призван показать, что привязка процесса к ядру процессора (affinity) позволяет увеличить производительность процесса, уменьшить разброс (jitter) значений latency. В конце статьи я объясняю, почему это происходит.

Читать далее

Замеры производительности, сбор статистики и персентили

В low-latency торговых системах важна не средняя оценка jitter/latency, а оценка в персентилях. Значения задержек по персентилям является важным показателем скорости работы вашей торговой системы. Почему? Для начала, что такое персентиль? Это понятие из статистики, которое объяснено в Википедии вполне точно.

Если, скажем, наша система из 1000 событий 999 событий обрабатывает за 1 секунду каждое, а какое-то одно за 100 секунд, наше среднее арифметическое значение latency составит 1,099 секунды ([999х1 + 1х100]/1000). Но в реальной жизни это значение не имеет никакого смысла, как и средняя температура по больнице или средняя зарплата по стране.

Читать далее

Что такое нестабильность latency (jitter), и как с нею бороться

При написании low-latency приложения мы боремся не только за low-latency, но и за стабильность этой low-latency.

Читать далее