StratCraft

Performans Karşılaştırmaları

Pazarlama iddiaları değil, ölçülen sonuçlar. Tüm kıyaslamalar GCC 13.3, 100.000 yineleme, CPU sabitlenmiş Linux üzerinde çalışır.

NexusFIX ile QuickFIX

Temel FIX işlemleri arasında birebir karşılaştırma.

MetrikQuickFIXNexusFIXİyileştirme
ExecutionReport Parse730 ns246 ns3,0 kat daha hızlı
NewOrderSingle Ayrıştırma661 ns229 ns2,9 kat daha hızlı
Alan Erişimi (4 alan)31 ns11 ns2.9x faster
Verim1,19 milyon msg/sn4,17 milyon mesaj/sn3,5 kat daha yüksek
P99 Gecikme784 ns258 ns3,0 kat daha düşük

Optimizasyon Yolculuğu

Dört birleştirme aşamasında 730ns'den 246ns'ye nasıl gittik.

Aşama 1: Sıfır Kopya Ayrıştırma730ns → 520ns

Std::string kopyalarını orijinal arabellekte std::span<const char> görünümleriyle değiştirin. Bir std::span yığında 16 bayttır — yığın yok, kopya yok, yıkıcı yok.

Aşama 2: O(1) Alan Arama520ns → 380ns

std::map<int, std::string>'i önceden indekslenmiş bir diziyle değiştirin. Saha erişimi, FIX etiket numarasıyla indekslenen tek bir hareket talimatı haline gelir.

Aşama 3: SIMD Sınırlayıcı Taraması380ns → 290ns

AVX2 vektörize SOH sınırlayıcı taraması, döngü başına 32 bayt işler. Bayt bayt taramadan ~13 kat daha hızlı.

Aşama 4: Derleme Zamanı Dengeleri290ns → 246ns

consteval alan ofset tabloları ve 22 derleme zamanı arama tablosu, numaralandırma/tür dönüşümü için ~300 çalışma zamanı dalını ortadan kaldırır.

Sıfır Tahsis Kanıtı

Sıcak yolda bir NewOrderSingle mesajını işlemek.

İşlemQuickFIXNexusFIX
Yığın Tahsisi~12 (std::string, std::map düğümleri)0
Alan Depolamastd::map<int, std::string> kopyalarstd::span görünümleri orijinal ara belleğe
Ayrıştırma MantığıÇalışma zamanı haritası eklemeDerleme zamanı uzaklık tablosu
Bellek Ayak İziDinamik, tahmin edilemezStatik, önceden tahsis edilmiş PMR havuzu
Yıkıcı Ek Yükü~12 std::string yıkıcılar0 (sahip olunan bellek yok)

Teknik Karşılaştırma

3 kat performans sağlayan tasarım kararları.

TeknikQuickFIXNexusFIX
BellekMesaj başına yığın tahsisiSıfır kopya std::span görünümleri
Alan AramaO(log n) std::mapO(1) doğrudan dizi indeksleme
AyrıştırmaBayt-bayt taramaAVX2 SIMD vektörleştirilmiş
Alan UzaklıklarıÇalışma zamanı hesaplamaderleme zamanını ayarlama
Enum DönüşümüÇalışma zamanı anahtarı (~300 dal)22 derleme zamanı arama tablosu
Hata İşlemeİstisnalarstd::beklenen (atma yok)

Mimarlık Etkileri

11 endüstri lideri kütüphane incelendi. Ne öğrendik, ne inşa ettik, ne ölçtük.

KütüphaneNe ÖğrendikNe İnşa ettikSonuç
hffixO(n) yineleyici araması, yoğun FIX paketleri için yetersizdirconsteval alan ofsetleri + O(1) doğrudan indeksleme14ns alan erişimi
AbseilSIMD inceleme ve H2 parmak izleriyle İsviçre Tablolarıabsl::oturum deposu içinflat_hash_map%31 daha hızlı aramalar
QuillErtelenmiş biçimlendirmeyle kilitsiz SPSC kuyruğuGünlük arka ucu olarak Quill8ns medyan günlük gecikmesi
NanoLog7ns günlük kaydı için ikili kodlama + arka plan iş parçacığıStatik ikili serileştirmeyle Ertelenmişİşlemci<T>%84 azalma (75→12ns)
liburingDEFER_TASKRUN, çekirdek görevi uyandırmalarını ortadan kaldırırio_uring + kayıtlı arabellekler + çoklu atış%7-27 daha hızlı I/O
OtoyolTalimat setleri arasında taşınabilir SIMD soyutlamasıFIX kalıpları için elle ayarlanmış içsel bilgiler13 kat verim
SeastarHiçbir şey paylaşma reaktörü yüksek eşzamanlı G/ÇÇekirdek sabitleme + kilitsiz ardışık düzen%8 P99 iyileştirme
AptallıkGelişmiş bellek koruması ve kilitsiz temel öğelerYerel SPSC kuyruğu + bit maskeleme doğrulamaSıfır bağımlılık
RigtorpÖnbellek hattı dolgusu yanlış paylaşımı ortadan kaldırırAynı tekniklerle yerel SPSCQueue88M işlem/sn, 11ns
xsimdMatematik işlemleri için genel SIMD sarmalayıcılarıSOH taraması için doğrudan Intel özellikleri2 kat daha hızlı sarmalayıcılar
Boost.PMRMonotonik tampon, mesaj başına arena tahsisine olanak tanırstd::pmr::monotonic_buffer_resourceSıfır yığın tahsisi

NexusFIX'i Denemeye Hazır mısınız?

Karşılaştırmaları kendiniz oluşturup çalıştırmanız için üç komut.

git clone https://github.com/StratCraft/NexusFIX.git cd NexusFIX ./start.sh build