Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Борьба за микросекунды: опыт

B901ed2c8433cd33ebbc1ad2085eea51?s=47 aragozin
August 08, 2017

Борьба за микросекунды: опыт

B901ed2c8433cd33ebbc1ad2085eea51?s=128

aragozin

August 08, 2017
Tweet

More Decks by aragozin

Other Decks in Technology

Transcript

  1. Deutsche Bank Deutsche Bank Technology Centre Борьба за микросекунды: опыт

    Сергей Сорокин
  2. Сергей Сорокин Борьба за микросекунды, август 2017 Deutsche Bank Deutsche

    Bank Technology Centre Пример взаимодействия с Order Management System (OMS) 1 15/08/2017 Deutsche Bank Клиент Bloomberg Коннектор Дилер Order Management System
  3. Сергей Сорокин Борьба за микросекунды, август 2017 Deutsche Bank Deutsche

    Bank Technology Centre О приложении 2 15/08/2017 Order Management System (OMS): — хранение состояния заявок; — маршрутизация; — заполнение данными клиента и инструмента; — проверки прав; — проверки рисков. Написано на Java. Протокол сообщений — protobuf. В памяти находятся данные по клиентам и инструментам, Xmx=Xms=[8; 30] Гб в зависимости от бизнеса.
  4. Сергей Сорокин Борьба за микросекунды, август 2017 Deutsche Bank Deutsche

    Bank Technology Centre Процессинг заявки на квоту Результаты до оптимизации 3 15/08/2017 18:42:12 2010 DB Blue template Процессинг квоты Перцентиль Полное время Бизнес логика 50% 4130 2583 95% 5920 3711 99% 7208 5532 Перцентиль Полное время Бизнес логика 50% 3372 1746 95% 3924 2552 99% 4831 3218 Единицы измерения – микросекунды. Полное время – от момента получения последнего байта до отправки первого байта. Профиль нагрузки – около 1000 сообщений в секунду.
  5. Сергей Сорокин Борьба за микросекунды, август 2017 Deutsche Bank Deutsche

    Bank Technology Centre Что оптимизировали и как тестировали 4 15/08/2017 — Оптимизируем медиану времени обработки одного сообщения внутри OMS. — Данные получены с помощью отдельно написанной тестовой программы. — В продакшене данные по времени обработки публикуются в отдельную систему. — Sampling профайлинг помог найти узкие места и избавиться примерно от одной миллисекунды по медиане. — Все дальнейшие действия стоит делать уже после sampling профайлинга.
  6. Сергей Сорокин Борьба за микросекунды, август 2017 Deutsche Bank Deutsche

    Bank Technology Centre Конфигурирование ненадёжности 5 15/08/2017 2010 DB Blue template Журнал Полезная работа Секвенсер Чтение данных из сокета Запись данных в сокет Распределенное хранилище данных Публикатор Подтверждение о записи в хранилище Ждём подтверждения? Медиана лучше 250 микросекунд, если не ждать подтверждения
  7. Сергей Сорокин Борьба за микросекунды, август 2017 Deutsche Bank Deutsche

    Bank Technology Centre Busy spin wait: while ((availableSequence = dependentSequence.get()) < sequence) { } Blocking wait: while ((availableSequence = cursorSequence.get()) < sequence) { processorNotifyCondition.await(); } Simplified from https://github.com/LMAX-Exchange/disruptor Как ждём событие 6 15/08/2017 2010 DB Blue template
  8. Сергей Сорокин Борьба за микросекунды, август 2017 Deutsche Bank Deutsche

    Bank Technology Centre — Busy spin wait улучшил медиану на 90 микросекунд. — Важно, чтобы машина была невиртуализированной и hyper trading был отключен. Как ждём событие 7 15/08/2017 2010 DB Blue template
  9. Сергей Сорокин Борьба за микросекунды, август 2017 Deutsche Bank Deutsche

    Bank Technology Centre Проблема: при переключении в WARN режим из INFO тайминги улучшаются на 300 микросекунд. Что использовалось: log4j1 and AsyncAppender. Что можно сделать: — Написать свой аппендер вместо log4j.AsyncAppender. — Перейти на log4j2. Выигрыш от обновления инфраструктуры логирования составил около 250 микросекунд в медиане. Логирование 8 15/08/2017 2010 DB Blue template
  10. Сергей Сорокин Борьба за микросекунды, август 2017 Deutsche Bank Deutsche

    Bank Technology Centre Кардинальное решение проблемы логирования: логирование на пассивном инстансе 9 15/08/2017 2010 DB Blue template Активный инстанс ОМС Клиент Дилер Пассивный инстанс ОМС Логи Снэпшот состояния
  11. Сергей Сорокин Борьба за микросекунды, август 2017 Deutsche Bank Deutsche

    Bank Technology Centre Проблема: каждая запись лога вызывает чтение/запись в volatile переменные для проверки уровня логирования и обновления дизраптора. Что можно сделать: — Написать более кастомный и потоконебозапасный логер для бизнес логики. — Добавлять логи событий после обработки бизнес логики. Выигрыш составил 50 микросекунд по медиане. Логирование 10 15/08/2017 2010 DB Blue template
  12. Сергей Сорокин Борьба за микросекунды, август 2017 Deutsche Bank Deutsche

    Bank Technology Centre Время отклика с разной нагрузкой Проблема низкой нагрузки 11 15/08/2017 18:42:13 2010 DB Blue template Количество сообщений в секунду Медианное время отклика (мкс) 1000 739 0,5 1897Total 300.0 Text Text or number Проблема: инстанс с маленькой нагрузкой имеет время отклика хуже, чем инстанс с более высокой нагрузкой.
  13. Сергей Сорокин Борьба за микросекунды, август 2017 Deutsche Bank Deutsche

    Bank Technology Centre Проблема: некоторые ядра работают с частотой 1.2 ГГц вместо 2.2 ГГц. Частота каждого ядра доступна на /proc/cpuinfo. Решение: установить /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor в performance. Проблема: swap файл используется, даже если доступна свободная оперативная память. Решение: установить /proc/sys/vm/swappiness в 0. Выигрыш составил 30 микросекунд по медиане. Базовая конфигурация машины: frequency governor и swappiness 12 15/08/2017 2010 DB Blue template
  14. Сергей Сорокин Борьба за микросекунды, август 2017 Deutsche Bank Deutsche

    Bank Technology Centre CPU(s): 64 Thread(s) per core: 2 Core(s) per socket: 8 Socket(s): 4 CPU MHz: 2200.000 L3 cache size: 16384 KB Total RAM: 256 Gb OS: SUSE Linux Enterprise Server 11 Спецификация машины 13 15/08/2017 2010 DB Blue template
  15. Сергей Сорокин Борьба за микросекунды, август 2017 Deutsche Bank Deutsche

    Bank Technology Centre numactl --hardware available: 4 nodes (0-3) node 0 cpus: 0 1 2 3 4 5 6 7 32 33 34 35 36 37 38 39 node 0 size: 65501 MB node distances: node 0 1 2 3 0: 10 21 21 21 1: 21 10 21 21 2: 21 21 10 21 3: 21 21 21 10 NUMA спецификация 14 15/08/2017 2010 DB Blue template
  16. Сергей Сорокин Борьба за микросекунды, август 2017 Deutsche Bank Deutsche

    Bank Technology Centre Привязка процесса к NUMA ноде 15 15/08/2017 2010 DB Blue template Лучше делать байндинг во время старта процесса с помощью numactl: numactl --cpunodebind=3 --preferred=3 java …
  17. Сергей Сорокин Борьба за микросекунды, август 2017 Deutsche Bank Deutsche

    Bank Technology Centre Отдельные ядра могут быть изолированы, чтобы планировщик линукса не использовал их по умолчанию. Опция может быть выставлена в /proc/cmdline: isolcpus=0-3,16-19 Изоляция ядер 16 15/08/2017 2010 DB Blue template
  18. Сергей Сорокин Борьба за микросекунды, август 2017 Deutsche Bank Deutsche

    Bank Technology Centre Проблема: в зависимости от версии ядра автоматическая балансировка внутри изолированого диапозона может не работать с isolcpus. Решение: Если NUMA нода содержит 8 ядер, то можно применить следующую схему: — Изолировать 5 ядер. — Привязать 5 самых полезных потоков к изолированным ядрам с помощью taskset и jstack. — Привязать все остальные потоки к оставшимся 3 ядрам. Изоляция ядер 17 15/08/2017 2010 DB Blue template
  19. Сергей Сорокин Борьба за микросекунды, август 2017 Deutsche Bank Deutsche

    Bank Technology Centre Решена путём привязки и изолирования приложения на NUMA ноде. Пенальти за низкую нагрузку составляет 50 микросекунд в медиане вместо 1 миллисекунды. Проблема низкой нагрузки 18 15/08/2017 2010 DB Blue template
  20. Сергей Сорокин Борьба за микросекунды, август 2017 Deutsche Bank Deutsche

    Bank Technology Centre — JDK: 1.8.0_131-b31 — Опции компиляции могут помочь сократить время разогрева. Нам больше всего подошла опция -XX:-TieredCompilation -XX:CompileThreshold=100. — G1 сборщик увеличивал и медианное время и время GC сборок. Самыми подходящими сборщиками остались ConcurrentMarkSweep+Par New. JVM конфигурация: компиляция, сборка мусора 19 15/08/2017 2010 DB Blue template
  21. Сергей Сорокин Борьба за микросекунды, август 2017 Deutsche Bank Deutsche

    Bank Technology Centre — Профилировать приложение с помощью perf — Посмотреть в инструментацию планировщика задач: cat /proc/${pid}/task/${tid}/sched Например, можно посмотреть статистику выполнения потока: se.sum_exec_runtime – время выполнения se.statistics.wait_sum – время ожидания планировщика задач se.statistics.sum_sleep_runtime – время ожидания в блокировке Что можно было сделать ещё? 20 15/08/2017 2010 DB Blue template
  22. Сергей Сорокин Борьба за микросекунды, август 2017 Deutsche Bank Deutsche

    Bank Technology Centre Процессинг заявки на квоту Результаты после оптимизации 21 15/08/2017 18:42:13 2010 DB Blue template Процессинг квоты Перцентиль Полное время Бизнес логика До оптимизации: 50% 4130 2583 95% 5920 3711 99% 7208 5532 После оптимизации: 50% 611 381 95% 707 451 99% 765 494otal00.0 Перцентиль Полное время Бизнес логика До оптимизации: 50% 3372 1746 95% 3924 2552 99% 4831 3218 После оптимизации: 50% 452 248 95% 476 266 99% 521 290
  23. Сергей Сорокин Борьба за микросекунды, август 2017 Deutsche Bank Deutsche

    Bank Technology Centre — Конфигурирование ненадёжности — Стратегия ожидания события в дизрапторе — Оптимизация логирования — Конфигурация linux: frequency governor и vw.swappiness — Привязка процесса к NUMA ноде — Изоляция ядер и привязка потоков к ядрам — JVM конфигурация: компиляция и сборка мусора Что было сделано в инфраструктуре: 22 15/08/2017 2010 DB Blue template
  24. Сергей Сорокин Борьба за микросекунды, август 2017 Deutsche Bank Deutsche

    Bank Technology Centre Сергей Сорокин sergey.sorokin@db.com Вопросы? 23 15/08/2017 2010 DB Blue template
  25. Сергей Сорокин Борьба за микросекунды, август 2017 Deutsche Bank Deutsche

    Bank Technology Centre Данный материал не является предложением или предоставлением какой-либо услуги. Данный материал предназначен исключительно для информационных и иллюстративных целей и не предназначен для распространения в рекламных целях. Любой анализ третьих сторон не предполагает какого-либо одобрения или рекомендации. Мнения, выраженные в данном материале, являются актуальными на текущий момент, появляются только в этом материале и могут быть изменены без предварительного уведомления. Эта информация предоставляется с пониманием того, что в отношении материала, предоставленного здесь, вы будете принимать самостоятельное решение в отношении любых действий в связи с настоящим материалом, и это решение является основанным на вашем собственном суждении, и что вы способны понять и оценить последствия этих действий. ООО “Технологический Центр Дойче Банка" не несет никакой ответственности за любые убытки любого рода, относящихся к этому материалу. 24 15/08/2017 2010 DB Blue template