Giter Club home page Giter Club logo

ll-udp-pubsub's Introduction

UDP канал з мінімальними затримками

Застосунки із реакцію не більше декільков десятків мікросекунд, наприклад HFT

1. Вимоги та особливості low latency

1-2 min min(time) != max(throughput) => low latency != high load

  • Застосування - HFT та IoT - реакція ~10-100us
  • Цінність повідомлення суттєво знижується із затримкою
  • Послідовність доставки опціональна
  • Є дозвіл на пропуск повідомлень

Якщо прибрати гарантії доставки та/чи послідовної доставки швидкість доставки може збільшитись у рази.

Як будується система:

  1. Використовувати протокол з мінімальними гарантіями
  • Забезпечення гарантій (tcp, транзакції ..) може займати ~100us-1ms

  • Мінімально зручний протокол без гарантій - UDP ** Не використовуємо multicast через специфіку multicast в облаці

  1. Використовувати мінімум рівней
  • Стандартна бібліотека задовільняє
  1. Обійти системний планувальник
  • Чому (wait, park/unpark) (~20-40us) розповісти про park/unpark!

додати діаграму: UDP packet -> OS kernel driver -> unpark thread | 20-40us | -> stdlib -> out code

Тут можно показати шматок коду - busy loop: https://github.com/dunnock/ll-udp-pubsub/blob/main/src/subscriber.rs#L87-L110

Діаграму порівняння часу із blocking та без blocking

  1. Trade-off із мінімальним часом затримки
  • Загальні бібліотеки орієнтуються на пропускну способність, не на затримки

навести приклад коду з crossbeam: https://github.com/crossbeam-rs/crossbeam/blob/23b10f2b737b6b6b66f5ca224cab2568350940b0/crossbeam-channel/src/flavors/array.rs#L410 https://github.com/crossbeam-rs/crossbeam/blob/23b10f2b737b6b6b66f5ca224cab2568350940b0/crossbeam-utils/src/backoff.rs#L210

  1. Хак із cpu_dma_latency

  2. Хак із cpu_pin

Вибір технологій

  • Цікаво було б поекспериментувати із eBPF, io_uring, linux mod, unikernel, open onload

3. Код

3.1. Send via UDP (./examples/send.rs)

3.2. Receive via UDP (./examples/receive.rs)

3.3. Блокуючий та неблокуючий режим

3.4. Вимірювання

3.5. Publisher and Subscriber (./examples/publisher.rs) (./examples/subscriber.rs)

Попередні зауваження

  1. Хто я, чим займаємось - це повинно бути логічним підгрунтям для доповіді
  2. В яких умовах ми працюємо - чьому облако, чьому UDP
  3. Зменьшити об'єм
  4. Пояснити деякі терміни (park/unpark), покращіти початок - чьому в HFT такі специфічні вимоги, може ілюстративно?
  5. Порізати код, показувати те що має цінність для доповіді
  6. Презентація по результату випробовувань - по випрбовуванням меньше зайвого тексту, параметрів.. показувати тільки те що має цінність для доповіді

ll-udp-pubsub's People

Contributors

chaplias avatar dunnock avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.