NexusFIX mimarisi, mesaj sözlükleri, venue profilleri ve benchmark paketine konuşma temelli arayüz. 182 uzman yanıtlı soru indekslenmiş ve canlı kod tabanına dayanır. Hazır yanıt yeterli olmadığında canlı thread var.
Merhaba, ben NexusFIX uzmanıyım. Kamuya açık kaynak, benchmark CSV'leri ve bu sayfada indekslenmiş 182 seçili yanıta dayanırım.
Sağdan bir thread seçin veya aşağıda her şeyi sorun. Yanıt kaynakta yoksa, bunu söylerim.
NexusFIX sıfır heap tahsisini nasıl başarıyor?
Sıcak yolda üç ikame, hepsi:
1. Orijinal arabelleğe yönelik std::span<const char> görünümleri, std::string kopyalarının yerini alır. Span yığında 16 bayttır. Heap yok, kopya yok, yıkıcı yok.
2. Alan araması için std::map yerine önceden indekslenmiş bir dizi gelir. Alan erişimi, FIX etiket numarasıyla indekslenmiş tek bir mov olur.
3. std::pmr::monotonic_buffer_resource, gerçekten yuvaya ihtiyacı olan her şey için arena tahsisi sağlar. Arena önceden boyutlandırılmıştır ve oturum başına yeniden kullanılır.
Sonuç: sıcak yolda 0 malloc çağrısı; her alloc/free'yi enstrümante eden ve herhangi biri tetiklendiğinde testi başarısız kılan özel bir ayırıcıyla doğrulanmıştır.
Neredeyse her sohbette çıkan sekiz soru. Genişletmek için tıklayın. Ya da yukarıdaki canlı thread'e geri taşıyın.
QuickFIX 2000'lerin başında C++98/03 deyimleri etrafında tasarlanmıştır: sanal dağıtım, mesaj başına heap tahsisi, string tabanlı alan depolama. Bu desenler, alt mikro saniye gecikme ile temelden uyumsuzdur.
QuickFIX tasarlandığında var olmayan C++23 yeteneklerini kullanarak ilk ilkelerden başladık. Std::span, std::expected, std::pmr, kavramlar ve consteval. Ve şunu sorduk: yirmi yıllık ayırıcı kararlarını taşımasaydın FIX motoru nasıl görünürdü?
Deterministik, alt mikro saniye FIX mesaj işlemesine ihtiyaç duyan kantitatif ticaret firmaları ve altyapı ekipleri.
Özellikle: ortak yerleşik stratejiler işleten firmalar, özel ticaret ağ geçitleri inşa eden ekipler ve gerçek, kamuya açık bir kod tabanında modern performans tekniklerini inceleyen C++ mühendisleri.
Orijinal arabelleğe yönelik std::span
Sonuç: sıcak yolda sıfır malloc çağrısı; her CI yapısında çalışan özel ayırıcı enstrümantasyon koşum takımıyla doğrulanmıştır.
Hata işleme için std::expected (sıcak yolda istisna yok), sıfır kopya veri görünümleri için std::span, derleme zamanı arabirim doğrulaması için kavramlar, derleme zamanı hesaplama için consteval ve [[likely]]/[[unlikely]] dal ipuçları.
Bunların her biri QuickFIX döneminde özel bir uygulama gerektirirdi.
AVX2 komutları aynı anda 32 bayt yükler ve SOH (\x01) ayırıcılarını paralel bulmak için vektörleştirilmiş karşılaştırma kullanır. Bu, bayt bayt taramadan yaklaşık 13× daha hızlıdır.
Teknik simdjson'dan ilham alınmış ancak FIX protokolü semantiğine uyarlanmıştır. Yani, tag=value=SOH yapısı, tek bir vektörleştirilmiş geçişte her alan sınırını bulabileceğimiz ve ardından ofset tablosunu oluşturabileceğimiz anlamına gelir.
FIX 4.4 tam destekli ve üretimde en yaygın olanı. FIX 5.0 + FIXT 1.1 de tam destekli ve 4.4'e göre yalnızca %2 ek yük getirir.
Yapısal indeks sürümden bağımsızdır. Alan taraması FIX sürümleri arasında özdeş çalışır. Özel lehçe kaplamaları, oturum bağlama anında borsa-spesifik etiketleri işler.
NexusFIX aktif geliştirmededir ve henüz üretim ticaret ortamlarına dağıtılmamıştır. Karşılaştırmalar, CPU sabitleme ve önbellek ısıtma ile kontrollü ortamlardan alınmıştır.
Üretim sertleştirmesi. Yük testleri, hata modu kapsamı, belirli borsa ağ geçitlerine karşı sertifikasyon. Ayrı bir mühendislik çabasıdır. Üretim için düşünüyorsanız önce bizimle konuşun.
Fix8 (C++11) nesne havuzları ve sıfır kopya teknikleri kullanır ve daha sofistike açık FIX motorlarından biridir.
NexusFIX, özel uygulamalar yerine C++23 standart kitaplık özelliklerinden (PMR, std::span, std::expected) yararlanarak farklılık gösterir. Denetlenecek daha az hareketli parça. Ve Fix8'in sahip olmadığı SIMD hızlandırmalı ayrıştırmayı ekler.
Yukarıdaki canlı thread'de sorun. Veya GitHub'da bir issue açın. Kaynaklı ve faydalı yanıt alan her soru, sonraki sürümde indekslenmiş sete dahil olur.