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

Как работает маркет-мейкинг

Цель данной статьи рассказать о том, что такое маркет-мейкинг (market making), какую роль он играет в электронной биржевой торговле, и о его связи с автоматизированной торговлей, HFT, программированием, и компьютерными технологиями.

Читать далее

Принципы написания торговых low-latency приложений на Java

Данная статья является частью серии статей о том, как пишутся low-latency торговые приложения. Вводная статья содержит начальные сведения о подходах к оптимизациям вообще, вторая статья рассказывает об подходах к оптимизации на всех уровнях торговой системы: от железа до настройки JVM. Данная же статья, рассказывает уже подробно об оптимизациях в самом Java-приложении.

Статья ориентирована на программистов, чтобы помочь им в изучении Java, понимании JVM и развитии навыков программирования.

Читать далее

Пулы объектов для достижения высокой производительности в Java

В торговых приложениях создается множество объектов в реальном времени. Скажем, каждый новый ордер от клиента создает объект Order. Исполнение ордера на рынке порождает новый объект Fill или Partial Fill. И если поток ордеров очень высок во время активного торгового дня, это создание новых объектов оказывает:

  • большую нагрузку на JVM по созданию новых экземпляров объектов из классов;
  • большую нагрузку на память, для записи всех этих объектов в heap;
  • большую нагрузку на сборщик мусора, который должен постоянно отслеживать появление этих новых объектов и проверять, не стали ли они мусором.

Все эти операции имеют большие накладные расходы сами по себе, плюс могут привести к непредсказуемым задержкам, поэтому Java-программисты нашли обходное решение этой проблемы: использовать пулы заранее созданных объектов (object pools). Т.е. переиспользовать объекты, которые уже не нужны, вместо создания новых.

Читать далее

habr.com: Числа, которые должен знать каждый программист

Чтобы было понятно, на чём следует концентрироваться при оптимизации, слайд из доклада «Создание программных систем в Google и его уроки»:
Читать далее

Low-latency оптимизации JVM

Данная статья является частью более общей статьи об оптимизациях торговой системы на всех уровнях. В этой статье даются советы по настройке одного из уровней low-latency приложения — уровня JVM.

JVM предназначена для запуска широкого спектра Java-приложений. Для общего случая параметры, используемые JVM по умолчанию, вполне подойдут. Но если мы хотим добиться определенных результатов в производительности, потребуется тонкая настройка JVM с помощью определенных стартовых параметров.

Читать далее

Достижение 4-ого уровня с помощью подогрева

Как видно из предыдущих статей JIT-компилятор на 4-ом уровне способен создавать высокопроизводительный нативный код. В некоторых случаях, благодаря сбору статистки в реальном рабочем окружении, нативный код получается даже лучше, чем код созданный статическим компилятором из исходников C/C++. Именно поэтому Java-программисты заявляют, что Java-приложение по скорости может превзойти приложение, написанное на C/C++.

Как же нам достичь этого уровня компиляции, если для его достижения требуется 15.000 исполнений?

Читать далее

JIT-компилятор и как он нам поможет победить latency

JIT-компилятор — встроенный в JVM компилятор байткода в машинный код. Проведя множество интервью с кандидатами на роль Core Java Developer, я был удивлен тем, что многие кандидаты даже не подозревали о существовании такой технологии в JVM, а те, кто краем уха что-то слышал, не могли объяснить, как она работает. Может быть для написания J2EE или веб-приложений этих знаний и не требуется, но для работы в области low-latency trading эти знания — ключевые.

Описание JIT-компилятора хорошо дано в книгах:

В данной статье я просто изложу основы, без знания которых непонятны будут другие статьи по low-latency оптимизации JVM.

Читать далее

Low-latency оптимизации на всех уровнях торговой системы

В предыдущей статье я говорил об оптимизации вообще, а теперь приведу несколько советов по low-latency оптимизациях в Java-приложениях на всех уровнях торговой системы:

  • аппаратный уровень: процессор, сетевой интерфейс, коммутация
  • операционная система
  • настройка JVM
  • оптимизации на уровне приложения

Читать далее