Архив метки: performance

Руслан Черемин: Когда имеет смысл передавать IO в отдельный поток?

Допустим, у нас есть простая система, которая принимает запросы из сети, как-то их обрабатывает («бизнес-логика»), и отправляет результат назад, в сеть. Мы заинтересованы в быстром отклике (=latency), а отправка – это IO, так что возникает идея ее снести в отдельный поток.

Но тогда придется передавать данные из основного потока в поток отправки – а межпоточная коммуникация это какие-то накладные расходы (копирование, инструкции синхронизации, т.п.)

Стоит ли вообще игра свеч, и если стоит – то когда?

Тонкости устройства биржевого шлюза

Мартин Томпсон в своей презентации о совеременных биржевых технологиях поднял интересную тему «честности» доступа к бирже.

Читать далее

Что надо знать программисту об устройстве современного процессора

Данная статья — всего лишь краткое введение в основные концепции устройства современного процессора. Цель статьи — дать основы, чтобы при объяснении каких-то нюансов в других статья я не повторялся. Все отсылки из тех статей к техническим подробностям и деталям будут вести сюда.

Читать далее

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

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

Читать далее

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

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

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

Читать далее