CTO röportajı: Nanosaniyeler içinde bütçeleme


Andrew Phillips, 17 yıldır broker LMAX’te çalışıyor ve şu anda şirketin baş teknoloji sorumlusu (CTO). Bütçesi milisaniyelerle ölçülüyor.

Uçtan uca gecikme LMAX’ın yüksek frekanslı işlemler için garanti ettiği süre 50 ms olsa da, herhangi bir uygulamanın çalışmasına izin verilen maksimum süre sekiz nanosaniyedir. Bütçe nanosaniyelerle ölçüldüğünde, en küçük potansiyel gecikmenin bile olumsuz bir etkisi vardır.

Phillips, “Müşterilerimiz büyük ticaret evleri ve çok hızlı ve kesin bir şekilde işleyen bir şey istiyorlar” diyor.

“Elektrik sinyalini ışığa dönüştürmek, bir fiber üzerinden iletmek ve sonra tekrar elektrik sinyaline dönüştürmek için küçük ama ölçülebilir sayıda nanosaniye gerektiğinden, optik fiber kullanmak yerine doğrudan bağlantıyı kullanarak çeşitli Twinax kablolarını test edeceğiz.”

Yazılım performansına farklı bir yaklaşım

Şirket 2010 yılında platformunu oluşturmaya başladığında, Phillips şelale metodolojisi kullanmanın ve yazılımı C++ programlama dili kullanarak geliştirmenin yaygın bir uygulama olduğunu söylüyor. Ancak, LMAX’in borsası çevik bir metodoloji kullanılarak oluşturulmuş ve Java’da programlanmıştır.

“Çevik teknikleri ve son derece zengin bir test ekosistemine sahip Java’yı kullanmak oldukça garip karşılanıyordu” diyor.

Uygulama kodunun önce bir makine kodu programına derlendiği ve ardından doğrudan mikroişlemcide (işlemci) çalıştırıldığı C++’ın aksine, Java çalışma zamanı derlemesini kullanan bir programlama dilidir. Bu, Java kodunun program çalışırken “anında” derlendiği anlamına gelir.

Java ayrıca, Phillips’in açıkladığı gibi, bir programın performansını etkileyebilecek “çöp toplama” adı verilen yerleşik bir bellek yönetimi de sunar: “Potansiyel müşterilerimizden gecikme artışları ve çöp toplama hakkında oldukça fazla garip soru alıyoruz.

“2013 yılında standart JDK ile başladık. Fark ettiğimiz şey, Java’nın bir mirası olduğuydu; set üstü kutular için tasarlanmıştı ve ona yaklaşık 4 GB bellek verdiğinizde en mutlu oluyordu.”

Phillips’e göre, 4 GB’tan fazla sistem belleği, çöp toplama sürelerinin gecikme açısından dengesiz hale gelmesi anlamına geliyordu. “Java’da yazmanın ifade gücünden veya hızından ve başarımızın temelini oluşturan test ekosisteminden vazgeçmek istemedik.”

Şirket, standart Java ortamının bellek sınırlamalarını aşmak için Azul sisteminden Java platformunu kullanıyor. Phillips, “O zamanlar, 64 GB belleğe sahip bir sunucum varsa, çöp toplamayı önlemek çok önemliydi” diye ekliyor.

Azul’un yalnızca son çare olarak çöp topladığını söylüyor. “Bu bizim için harika çünkü o zamanlar değişim gecikmemizi bir milisaniyeden, şu an olduğumuz 50 mikrosaniyeye düşürüyorduk.”

Ve bu küçük, 50 mikrosaniyelik pencerede çok şey olur. Phillips, “50 mikrosaniye, ağımızın ucunda bir siparişin iletilmesinden, işlenmesine, eşleştirilmesine ve ardından onayın geri gönderilmesine kadar geçen zamandır” diye ekliyor.

Andrew Phillips'in baş fotoğrafı

“Profesyonel bir derleyici geliştiricisi olmaktan öte, son derece iyi programcıların bile optimizasyon açısından bir derleyici kadar başarılı olamayacağını düşünüyorum”

Andrew Phillips, LMAX

Bu 50 mikrosaniyelik pencereyle, Java kodunun çalışması için sadece sekiz nanosaniyesi vardır çünkü gecikmenin çoğu, işlemin ağ altyapısı üzerinden sunucuya geçmesiyle gerçekleşir. Phillips, bir programlama dili olarak Java’nın, yüksek performans için elle kod yazan birine kıyasla kodu optimize etmede daha iyi olduğuna inanmaktadır.

“C, C++ ve Fortran geçmişim var ve işleri daha hızlı halletmek için genellikle assembly diline kaçıyorsunuz. [Java] “Biraz mantık dışı” diyor.

Phillips’e göre modern mikroişlemciler o kadar inanılmaz derecede karmaşıktır ki, bir geliştirici C veya C++’da bir şey yazmayı seçerse, kod yalnızca geliştiricinin C veya C++ derleyici aracında yapılandırdığı “hedef” işlemci mimarisi için optimize edilir.

“Java çalıştırmanın avantajlarından biri, üzerinde çalıştığınız işlemci için optimize edilmiş olmasıdır,” diyor. “Bu oldukça önemli olabilir. Profesyonel bir derleyici geliştiricisi olmaktan öte, son derece iyi programcıların bile optimizasyon açısından bir derleyici kadar iyi iş çıkarabileceğini düşünmüyorum.”

Tipik olarak, bir C++ programcısı uygulamayı derlemek için geliştirme makinesindeki C++ derleyicisini kullanır ve hedef mimari olarak sunucu işlemcisini kullanır. Bu daha sonra etkili bir şekilde düzeltilir ve uygulama yalnızca o belirli sunucu işlemcisi için optimize edilir.

Ancak Phillips’in belirttiği gibi, geliştirme ve test ortamları üretim sunucularının arkasında birkaç nesil işlemci mimarisi olabilir. Kodun üretime girmeden önce taşındığı sahneleme ortamlarının da eski nesil sunucu işlemcilerini çalıştırması muhtemeldir.

Java, kodu çalışma zamanında optimize edebilir ve böylece kodun çalıştığı hedef donanımda kendisine sunulan tüm kod hızlandırma özelliklerinden faydalanabilir.

Phillips, “Biraz inanmaz biri olarak, Java’nın bunu yapabileceğine oldukça şüpheciydim,” diyor. “Yetenekli bir Java programcısı ve benim aramda C ve assembly dilinde yazarak bir kodlama yarışmasının ardından ikna oldum. Java programının hızını geçemedim.”

Karşılaştığı en büyük zorluk sorulduğunda Phillps şöyle diyor: “Java’da beni yavaşlatan en büyük şey, çok düşük kesin gecikmelerle çok fazla belleğe erişebilmek. Bu, bizim temel mühendislik zorluklarımızdan biri. Şu anda yaşadığım en büyük sorun muhtemelen bellek gecikmesi.”

Düşük gecikmeli teknoloji atılımları

Phillips, ileride CXL teknolojisinin vaat ettiği donanım gecikmesindeki fırsatlardan etkilendiğini söylüyor. Compute Express Link (CXL), farklı donanım parçaları arasında doğrudan bellek bağlantısına olanak tanır.

“CXL, yaptığımız işi tamamen değiştirme konusunda muazzam bir potansiyele sahip çünkü bellek veri yolu, çevresel veri yolu ve ağ katmanı arasındaki farklar giderek belirsizleşiyor” diyor.

Ancak, CXL birkaç ay içinde bilgi işlem donanım mimarisini değiştirecek bir teknoloji olarak lanse edilmesine rağmen, henüz ivme kazanmadı. Phillips, CXL ile füzyon gücü arasında bir benzetme yaparak şunları ekliyor: “Her zaman 10 yıldır. Uzaktan prosedür çağrılarını bir CXL yapısı üzerinden yapma fikri çok çekici.”

Phillips için CXL, geleneksel ağ protokollerinin ek yükünü aşmanın bir yolunu sunuyor. “Her şey, UDP IP veya TCP IP üzerinde çalışır; bunlar [networking] 1960’larda ve 70’lerin başında çevirmeli modemin tasarlandığı protokoller [connectivity] “Son teknolojiydi.”

Phillips, bu protokollerin şu anda 25 gigabit ethernet ile bulundukları noktaya evrilmesini sağlayan “muhteşem mühendislik çabasını” kabul ederken, “IP kapsüllemenin getirdiği ek yük olmasaydı, bu güzel olurdu ve her şey çok daha hızlı olurdu” diyor.

Mümkün olanın sanatını keşfetmeye yönelik bu sürekli çalışma, LMAX’in fizik yasalarının izin verdiği ölçüde düşük gecikmeyle işlem işlemlerini gerçekleştirmesine yardımcı oluyor, şirkete bir tampon sağlıyor ve beklenmedik derecede yüksek bir verimi yönetmesini sağlıyor.

Örneğin, geçen yıl kripto para piyasasında kripto borsalarının düşüşe geçmesine neden olan büyük miktardaki oynaklığı hatırlatan Phillips şöyle diyor: “Biz düşmedik. Aslında, insanlar borsamızdaki riskleri birbirlerine devrederken hacimde büyük bir artış gördük.”

İşlem hacmi LMAX’in kaldırabileceği maksimum hacme yakın olmasa da şirketin tüm kripto para piyasası için işlem yapabildiğini ve Phillips’e göre bunun için yeterli alan olduğunu söylüyor.



Source link