Тадқиқоти академӣ, забони фаҳмо

Verianla | Тадқиқоти академӣ ва илм ба забони тоҷикӣ

27 сентябр 2026, якшанбе
VERİANLAНашри мустақили илмӣ
Кушодан ё бастани меню
...
Саҳифаи асосӣ / Илмҳои амалӣ / Илми компютер / Интихобҳои Тарроҳӣ дар Системаҳои C++-и Камтаъхир: Таҳлили Эмпирикии Оптимизатсияҳои Linux, Хотира, Компилятор ва Шабака барои Савдои Басомади Баланд
Илми компютер

Интихобҳои Тарроҳӣ дар Системаҳои C++-и Камтаъхир: Таҳлили Эмпирикии Оптимизатсияҳои Linux, Хотира, Компилятор ва Шабака барои Савдои Басомади Баланд

Таъхири tick-to-trade, яъне фосила аз расидани бастаи маълумоти бозор ба система то фиристодани фармони мувофиқ ба берун, натиҷаи муштараки қабатҳои зиёде аст: scheduler-и системаи амалиётӣ, interrupts, kernel housekeeping, page faults, рафтори TLB, cache locality, ҷараёни идоракунии C++, ҷудокунии хотира, thread synchronization ва стеки протоколи шабака.

18/09/2026  Veri Anla 101 боздид
Интихобҳои Тарроҳӣ дар Системаҳои C++-и Камтаъхир: Таҳлили Эмпирикии Оптимизатсияҳои Linux, Хотира, Компилятор ва Шабака барои Савдои Басомади Баланд

Дар системаҳои савдои басомади баланд, иҷроиш танҳо аз суръати як алгоритм вобаста нест. Таъхири tick-to-trade, яъне вақт аз расидани бастаи маълумоти бозор то фиристодани фармони мувофиқ, натиҷаи муштараки scheduler-и системаи амалиётӣ, interrupts, kernel housekeeping, page faults, рафтори TLB, cache locality, ҷараёни идоракунии C++, ҷудокунии хотира, thread synchronization ва стеки протоколи шабака мебошад.

Кори Khalid Mohammad ин қабатҳоро бо микроbenchmark-ҳои ҷудогона месанҷад ва нишон медиҳад, ки кадом интихобҳои тарроҳӣ ба таъхири маъмулӣ ва кадомҳо ба tail latency — ҷаҳишҳои камёб, вале хеле бузурги таъхир — таъсир мекунанд.

Хулосаи муҳим ин аст, ки як “беҳтарин оптимизатсия” вуҷуд надорад. Real-time scheduler median wakeup latency-ро кам мекунад, вале tail-ҳои чуқурро танҳо нест намекунад. Баръакс, CPU isolation дар сатҳи kernel, ҷудокунии RCU/workqueue ва interrupt steering p99.9 ва p99.99-ро қавитар фишурда мекунанд.

Дар хотира, пешакӣ populate кардани саҳифаҳо first-touch cost-и тақрибан 2 µs-ро дар таҷриба то сатҳи тақрибан 20 ns расонд. Explicit 2 MB HugeTLB нисбати 4 KB pageҳо TLB miss rate-ро аз %1,33 ба %0,09 ва cycles/access-ро аз тақрибан 290 ба 43,12 фаровард.

Дар C++ натиҷаҳо нозуктаранд: stateless lambda ба inline function наздик аст, аммо std::function тақрибан 5,68× гаронтар. dynamic_cast-и RTTI нисбати explicit tagging тақрибан 3,6× cycle бештар истифода кардааст. Object pool нисбати new/delete умумӣ тақрибан 3,7× тезтар аст ва tail latency-и heap allocation баландтар мемонад.

Data-oriented design нишон медиҳад, ки ҷойгиршавии маълумот метавонад аз қудрати ҳисоббарории CPU муҳимтар бошад. Sequential access ≈5,35 cycles/access аст, random pointer chasing бошад ≈378 cycles/access. False sharing вақти иҷроишро тақрибан 7,5× зиёд кардааст.

Дар шабака, Linux UDP path бо AF_XDP дар як мошин бо network namespace ва veth муқоиса шудааст. Kernel path миёна ≈200 µs буд, AF_XDP бошад ≈8 µs; p50 аз ≈218 µs ба 6 µs поён рафт. Бо вуҷуди ин p99-и AF_XDP ≈80 µs монд; bypass-и kernel tail latency-ро пурра нест намекунад.

Паёми муҳандисии манбаъ чунин аст: таъхири паст аз як функсияи тез не, балки аз хориҷ кардани манбаъҳои номуайяни slow path аз роҳи критикӣ ба вуҷуд меояд.

Меъёри асосӣ дар системаҳои камтаъхир чист?

Дар нармафзори умумӣ throughput ё шумори умумии амалиёт кофӣ буда метавонад. Дар HFT ҳатто як ҷаҳиши камёби таъхир аҳамияти иқтисодӣ дорад. Барои ҳамин бояд тамоми занҷири p50 → p99 → p99.9 → p99.99 → maximum дида шавад.

Оё scheduler танҳо кофӣ аст?

Не. Дар cyclictest, SCHED_FIFO барои wakeup latency-и маъмулӣ аз CFS тезтар аст, аммо tail-и чуқур аз interference-и kernel низ вобаста мебошад.

PercentileCFSCFS TunedSCHED_FIFO
p5055 µs55 µs5 µs
p9967 µs811 µs15 µs
p99.91383 µs929 µs1287 µs
p99.993386 µs1916 µs2673 µs

CPU isolation ва interrupt steering

Ҳатто thread-и pinшуда метавонад аз timer tick, RCU callback, kernel workqueue ё hardware interrupt қатъ шавад. Комбинатсияи isolcpus, nohz_full, rcu_nocbs, cpuset/cgroup ва workqueue relocation ядрои latency-critical-ро аз housekeeping ҷудо мекунад.

PercentileCFSCFS + IsolationRTRT + Isolation
p5055 µs55 µs5 µs5 µs
p9967 µs61 µs15 µs10 µs
p99.91383 µs77 µs1287 µs33 µs
p99.993386 µs201 µs2673 µs174 µs
МеъёрБе isolationIsolationIsolation + IRQ Steering
p99.91287 µs33 µs40 µs
p99.992673 µs174 µs109 µs
Maximum4673 µs564 µs399 µs

Median қариб тағйир намеёбад, аммо p99.9 ва p99.99 сахт беҳтар мешаванд. Як percentile тамоми тасвирро намедиҳад.

Page fault, huge pages ва VM tuning

Дар 512 MB anonymous mapping тақрибан 131.000 minor page fault мушоҳида шуда, first-touch cost тақрибан 2 µs барои ҳар саҳифа буд. MAP_POPULATE онро то 20 ns дар steady-state коҳиш дод.

Сохтори саҳифаCycles / AccessdTLB Miss Rate
4 KB≈290≈%1,33
Transparent Huge Pages≈241≈%0,47
Explicit HugeTLB 2 MB43,12%0,09

Explicit HugeTLB cycles/access-ро 6–7× кам мекунад. THP метавонад дар пасзамина collapse, split ва memory compaction иҷро карда, дар fragmented memory tail spike-и миллисониявӣ эҷод кунад.

PercentileПешфарзПас аз VM tuning
p5092 µs30 µs
p99204 µs556 µs
p99.94415 µs4898 µs
p99.997630 µs7076 µs
Maximum9230 µs8013 µs

Median беҳтар мешавад, вале p99 ва p99.9 бадтар. Аз ин рӯ hot path бояд аз runtime allocation дур бошад.

Mitigations, C-state ва C++

МеъёрMitigations ONMitigations OFF
Raw syscall2850 cycles306 cycles
libc syscall2815 cycles278 cycles
Context switch24.301 cycles14.829 cycles
sched pipe7,76 µs/op4,76 µs/op

Хомӯш кардани mitigations арзиши syscall ва context switch-ро кам мекунад, аммо хатари амниятиро зиёд мекунад; ин тавсияи умумӣ нест.

Ҳолатp99p99.9p99.99
C-state ON / Idle54 µs57 µs175 µs
C-state OFF / Idle54 µs55 µs58 µs
C-state ON / Stress77 µs144 µs182 µs
C-state OFF / Stress70 µs149 µs197 µs
Dispatch1 навъ4 навъ8 навъ
Static1,32 ms8,75 ms10,02 ms
Virtual1,94 ms9,19 ms10,38 ms

Virtual dispatch дар як навъ тақрибан 1,47× гаронтар аст. Аммо дар ABI-stable interfaces, plugin systems ва cold path dynamic polymorphism ҳанӯз метавонад дуруст бошад.

MoveWall Time
noexcept move101,6 s
non-noexcept move263,4 s
CallableRelative Cost
Inline function1,00×
Stateless lambda1,03×
std::function5,68×

noexcept дар std::vector reallocation 2,6× фарқ додааст. std::function аз lambda гаронтар аст, зеро type erasure ва indirect dispatch дорад. dynamic_cast низ нисбати explicit tagging харҷи бештар дорад.

PGO, allocation, cache ва concurrency

МеъёрBaselinePGO
Execution Time1,791 s1,766 s
Cycles6,20 B6,11 B
Instructions12,77 B11,07 B
LLC Load Misses419 K398 K
АмалиётMedianp99.9Maximum
new82 cycles8586 cycles172.401 cycles
Pool allocate32 cycles246 cycles81.756 cycles
delete60 cycles433 cycles73.471 cycles
Pool deallocate34 cycles262 cycles52.153 cycles

Object pool асосан дар tail фоида медиҳад. Sequential array ≈5,35 cycles/access, random pointer chasing ≈378 cycles/access; фарқ қариб 70×.

Навъи дастрасӣCycles / Access
Sequential array≈5,35
Random pointer chasing≈378

Ҷудо кардани hot/cold data вақтро аз 1,08746 s ба 0,91845 s овард; cache misses аз 7,8×107 ба 3,5×107 поён рафт. False sharing бошад 4,16 s, cache-line padded 0,55 s буд.

ТарҳCyclesВақт
False sharing2,73×10104,16 s
Cache-line padded3,61×1090,55 s

AoS тақрибан 258 ms, SoA 145 ms буд. SIMD scalar 406 ms ва AVX 370 ms аст; беҳбудӣ тақрибан %7.

Амалиётp50p99.9p99.99
Lock Push8017.78532.115 cycles
Lock-Free Push47294378 cycles
Lock Pop8112.95846.048 cycles
Lock-Free Pop25226278 cycles

Lock-free дар SPSC ring buffer tail-ро беҳтар мекунад, вале дар contention-и баланд CAS retry метавонад аз mutex бадтар шавад.

AF_XDP

Linux receive path: NIC → Driver → sk_buff → IP/UDP Stack → Socket → System Call → User Space. AF_XDP path: NIC → XDP → AF_XDP → UMEM → User Space.

Роҳи шабакаMeanp50p99
Kernel Stack≈200 µs≈218 µs≈300 µs
AF_XDP≈8 µs≈6 µs≈80 µs

Ин benchmark production HFT network нест; он namespace/veth дар як мошинро месанҷад.

Усул ва қайди манбаъ

ҶузъМуҳити истифодашуда
CPUIntel Core i5-6500 @ 3,20 GHz
Ядро4 core / 1 thread per core
RAM3,7 GiB
NUMAЯк node
Linux kernel6.8.0-90-generic
CompilerGCC 13.3.0
Default build-O2
CPU governorperformance

Сарлавҳаи аслӣ: Design Choices in Low-Latency C++ Systems: Empirical Insights with Applications to High-Frequency Trading

Муаллиф: Khalid Mohammad. Муассиса: Department of Computer Science, Indian Institute of Technology Kharagpur. Сана: 3 апрели 2026; SSRN: 17 апрели 2026; SSRN ID: 6513601; DOI: 10.2139/ssrn.6513601.

Навъи нашр: Preprint. Натиҷаҳо ба як Intel i5-6500 ва версияҳои муайяни Linux/GCC маҳдуданд; AF_XDP дар namespace/veth санҷида шудааст; тадқиқот trading alpha ё даромади стратегияро намесанҷад.


Мубодила:

Шарҳҳо пас аз баррасӣ нашр мешаванд.Шарҳи шумо ба раванди тасдиқ фиристода шуда, пас аз пазируфта шудан намоён мегардад.

Шарҳ гузоред

Нишонии почтаи электронии шумо нашр намешавад. Майдонҳои ҳатмӣ бо * нишон дода шудаанд

Иҷозат додан ба кукиҳо таҷрибаи шуморо дар ин сомона беҳтар мекунад. Сиёсати кукиҳо