Жага швидкості: Оптимізація продуктивності торгового терміналу



Раніше у нашому блозі ми розповідали про те, навіщо трейдери на фондовому ринку використовують торгові термінали, і представили історію розробки власного терміналу SmartX.

На сучасному фондовому ринку дуже важлива швидкість — для того, щоб випередити конкурентів і зробити операцію за найкращою ціною, трейдери розробляю власні торговельні системи, ставлять сервери своїх торгових роботів на коллокацию в біржові та брокерські дата-центри, використовують технології прямого доступу.

Для тих з них, хто здійснює операції вручну за допомогою терміналу його швидкість та надійність роботи також дуже важливі. Саме тому розробники торгового софта постійно займаються оптимізацією його продуктивності. Сьогодні ми розповімо про те, як підвищували швидкість терміналу SmartX.

Навіщо прискорювати термінал

Необхідність прискорення роботи терміналу SmartX назріла з двох причин — часто трейдери запускають торговий софт на переносних пристроях (ноутбуках, планшетах під Windows), не на самих потужних «офісних комп'ютерах» або просто старих машинах.

При цьому активність на ринку рік від року тільки зростає, і в умовах, наприклад, сильних рухів або так званих «panic-sale» у дні виходу важливих економічних новин, кількість ринкових даних (market data), що відправляється сервером терміналу, може в короткі терміни зростати в десятки разів. Якщо програма запущена на слабкому пристрої, то може просто зависнути в самий відповідальний момент, що може вилитися у втрату грошей користувачем.

Крім того, на ринку існує цілий клас активних трейдерів (наприклад, «скальпери», арбітражери і high frequency-трейдери), які навіть у звичайний торговий день здійснюють велику кількість заявок та угод. Такі торговці рідко використовують GUI-термінали для безпосередньої торгівлі, але часто застосовують подібний софт для контролю своїх позицій, проте велика кількість генеруються ними даних навіть потужний комп'ютер може «не переварити».

Торговий термінал ні в якому разі не повинен ставати «вузьким» місцем в ланцюжку «трейдер-біржа», тому роботи щодо його поліпшення і оптимізації продуктивності потрібно проводити постійно.

Як влаштований термінал

Перш ніж зануритися в опис процесу оптимізації терміналу, слід розібратися в тому, які компоненти включає таке програмне забезпечення. (Щоб не затримувати тих, кому цікавий сам процес оптимізації, ми прибрали ці подробиці під спойлер).

Як все влаштованоТорговий термінал SmartX складається з протокольної та термінальної частин.

Перша з них відповідає за «спілкування» з серверами брокерської торгової системи (Matrix — про неї у нас був окремий матеріал — вона «мержит» всі вхідні потоки даних в один потік повідомлень. Відповідно, протокольна частина є многопоточной. Написана на C++.

Термінальна частина з заданим періодом опитує отриману чергу повідомлень та робить необхідні розрахунки для відображення інформації користувачеві. Цей софт є однопоточним і написаний на C#. (У нашому блозі також опубліковано цікаве інтерв'ю з розробників SmartX про те, чому C# C++ так популярні на фондовому ринку.)

Основні концепції оптимізації

Тепер розглянемо докладніше використовувалися методики оптимізації продуктивності.

Перша з них — це відкладена відтворення. Значна частина «активності» торгового терміналу припадає на обробку різноманітних таблиць і графіків. Постійне оновлення усіх графіків і таблиць вимагає значних ресурсів, але якщо перемальовувати їх тільки в тому випадку, якщо отримані нові дані, а також починати малювання тільки після звільнення основного потоку від обробки черги повідомлень, це дозволяє значно підвищити продуктивність.

Крім цього, було запроваджено механізм фільтрації навантажених потоків даних (як у термінальній, так і в протокольній частинах терміналу). До таких потоків належать котирування, снапшоти біржових «склянок» і т. п.

Це зроблено для того, щоб при зростанні навантаження, наприклад, при підвищенні активності на ринку після виходу економічних новин, термінал «відкидав» дані, які в моменті вже стали історичними, і показував користувачеві тільки саму свіжу інформацію.

До впровадження такої технології в моменти пікових навантажень термінал міг починати запізнюватися і відображати «історичні» дані, а GUI в такі моменти взагалі міг подвиснуть, не впоравшись з обробкою великих масивів даних.

Наступним етапом оптимізації стало зниження memory traffic. Вузьким місцем в цьому механізмі, як відомо, є GarbageCollection, тому розробниками терміналу був реалізований власний memory management для тих об'єктів і колекцій, які часто створюються або поновлюються. З його допомогою вдалося знизити кількість збірок сміття при роботі терміналу, а отже, поліпшити його продуктивність

В результаті GUI не підвисає під час складання «сміття», також це дозволяє терміналу працювати необмежену кількість часу без перезавантаження — використовуване кількість пам'яті при цьому не зростає.

Стало краще: тест

Для перевірки того, наскільки краще став працювати торговий термінал, на тестовому контурі торгової системи брокерської був запущений стрес-тест, що складається у запуску генератора навантажувального потоку даних — 1000 тиків, 1000 склянок і 1000 змін котирувань («квот») в секунду.



Частина тесту: відкриття в терміналі великої кількості склянок по інструменту (більше 40)

На комп'ютері Celeron G460 1.8 GHz 2Gb порівнювалися наступні версії терміналів:

  • 5.2.107 – версія без оптимізації
  • 5.3.170 – поточна актуальна версія
  • 5.3.184 – реліз-кандидат продакшн-версії 5.4.0
За підсумками тесту були отримані наступні результати:

  • Версія 5.2.107 – завантаження процесора 60-75%, GUI не відповідає (на скріншотах сірий загальний фон програми), термінал не реагує на дії користувача;

  • Версія 5.3.170 — завантаження процесора 60-75%, GUI не зависає, термінал з затримкою, але реагує на дії користувача;
  • Реліз-кандидат 5.3.184 – завантаження процесора не вище 15%, термінал відразу реагує на всі дії користувача.
Як видно, продуктивність терміналу значно зросла, а навантаження на процесор відчутно знизилася. Проведена оптимізація актуальна для всіх користувачів терміналу, але її особливо оцінять трейдери, запускають термінал на малопотужних комп'ютерах, а також ті, хто використовує у програмі велика кількість фінансових інструментів, «склянок», графіків та індикаторів.

На сьогодні все, спасибі за увагу! На забувайте підписуватися на наш блог.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.