Застосунки із реакцію не більше декільков десятків мікросекунд, наприклад HFT
1-2 min min(time) != max(throughput) => low latency != high load
- Застосування - HFT та IoT - реакція ~10-100us
- Цінність повідомлення суттєво знижується із затримкою
- Послідовність доставки опціональна
- Є дозвіл на пропуск повідомлень
Якщо прибрати гарантії доставки та/чи послідовної доставки швидкість доставки може збільшитись у рази.
- Використовувати протокол з мінімальними гарантіями
-
Забезпечення гарантій (tcp, транзакції ..) може займати ~100us-1ms
-
Мінімально зручний протокол без гарантій - UDP ** Не використовуємо multicast через специфіку multicast в облаці
- Використовувати мінімум рівней
- Стандартна бібліотека задовільняє
- Обійти системний планувальник
- Чому (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
- 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
-
Хак із cpu_dma_latency
-
Хак із cpu_pin
- Цікаво було б поекспериментувати із eBPF, io_uring, linux mod, unikernel, open onload
Попередні зауваження
- Хто я, чим займаємось - це повинно бути логічним підгрунтям для доповіді
- В яких умовах ми працюємо - чьому облако, чьому UDP
- Зменьшити об'єм
- Пояснити деякі терміни (park/unpark), покращіти початок - чьому в HFT такі специфічні вимоги, може ілюстративно?
- Порізати код, показувати те що має цінність для доповіді
- Презентація по результату випробовувань - по випрбовуванням меньше зайвого тексту, параметрів.. показувати тільки те що має цінність для доповіді