VALORANT'ın Çıkışından Bu Yana Sunucuları En Yüksek Performansa Nasıl Getirdik
128-tick sunucularda hizmet verebilmek VALORANT çıkmadan önce bile önceliklerimizden biriydi. Hedefimiz hep 128-tick sunucular sağlayarak herkes için üst düzey rekabetçi bir deneyim sunmak oldu. Oyunun çıkışından önce bu hedefe nasıl ulaştığımızı VALORANT'ın 128-Tick Sunucuları isimli yazımızda okuyabilirsiniz (İngilizce).
Sunucu performansını korumak sürekli verilmesi gereken bir mücadele. Zaman içinde oyuna yeni özellikler eklendikçe bizim de 128-tick sunucularımızın yüksek performansını sürdürebilmek adına temkinli hareket etmemiz gerekiyor. Ufak performans düşüşleri zamanla birikip büyüyebiliyor, zaman zaman yaşanan büyük performans düşüşleriyse anında müdahale gerektiriyor.
2022'nin ağustos ayında oyunun çıkışından beri yaşadığımız en büyük performans düşüşüyle karşılaştık. Bu sorun özel karşılaşmalar ve espor karşılaşmaları gibi 10 oyuncudan fazla oyuncuyla oynanan VALORANT karşılaşmalarını etkiliyordu. Bu sorunu çözmek de mühendisler, yapımcılar ve İstanbul'da gerçekleşecek yılın en büyük etkinliğiyle ilgilenen espor ekibimizden oluşan ufak bir ordu ve liderlik gerektiriyordu.
Bu performans düşüşü üzerindeki çalışmalarımız sunucu kare işleme hızını geliştirebilmek adına bize birkaç fırsat sundu ve bu sayede büyük bir performans artışı sağlayabildik. 5.07 Yaması'ndan beri oyuncular VALORANT tarihinin en tutarlı 128-tick sunucu performansını deneyimliyor.
Adım Aaron Cheney, VALORANT Performans Ekibi'nde mühendisim. Bu yazıda bulabileceklerinizin özeti şu şekilde:
- Performans Ekibi'nin performans düşüşlerini nasıl tespit ettiği
- Champions 2022'nin hemen öncesinde yaşanan büyük performans düşüşü hakkında bilgiler
- Bu düşüşlere nasıl müdahale ettiğimiz, ani gelişen sorunlar karşısında ekiplerimizin nasıl aksiyon aldığı ve bunlardan neler öğrendiğimiz.
Öncelikle performans düşüşlerini nasıl tespit ettiğimizi ve bu düşüşlerin ciddiyetini kavramanızı sağlayacak birkaç bilgi vereyim.
Performans Düşüşlerini Nasıl Tespit Ediyoruz?
Performans düşüşleri oyun geliştirmenin bir gerçeğidir. Oyunlar her biri genel performansı etkileyen hareketli birçok parçadan oluşan karmaşık sistemlerdir. Bu karmaşıklık zamanla yeni özellikler ve sistemler eklendikçe artar. Bu yüzden performans düşüşlerini isabetli bir şekilde tespit etmek ve bunların nedenlerini bulmak büyük önem taşıyor.
VALORANT'ın kendini bu işe adamış bir performans ekibi var. Bu ekip hem istemci hem sunucu tarafında birçok donanım üzerinde performansı izlemek, sürdürmek ve iyileştirmekten sorumlu. Performans düşüşlerini oyuncular onlara maruz kalmadan önce tespit edip düzeltmek amacıyla birçok farklı araç ve işlem kullanıyoruz.
Sunucu Performansı Hedefleri
128-tick sunucu demek her sunucu karesinin en çok 7,8125 milisaniye (ms) içerisinde tamamlanması gerektiği anlamına geliyor. Ancak bunu yapmamız her karşılaşmanın bütün bir işlemci çekirdeğini kullanması anlamına da gelirdi. Bu yüzden 128-tick koşullarımızı sağlayabilmek amacıyla VALORANT sunucuları ~7,8 ms içerisine 3 kare sığdırmaya ayarlı. Bu da her sunucu karesinin ortalamada 2,6 ms'den kısa olmasını gerektiriyor. Sunucu kare işleme hızı için asıl performans hedefimiz ise 2,34 ms. Bu performans hedefi iki büyük amaca hizmet ediyor:
- Fazladan alan sağlıyor. Performans hedeflerinde kendimize fazladan alan tanımamız daha uzun kareleri 128-tick'in altına düşmeden verebilmemizi sağlıyor. Böylece sunucularımız farklı durumlara daha dirençli oluyor ve işletim sistemine, eşleştirme sistemine ve sunucuda çalışmakta olan diğer yazılımlara da çalışma alanı bırakıyor.
- VALORANT'ın finansal açıdan sürdürülebilmesini sağlıyor. Sunucu altyapıları epey pahalı. Her VALORANT karşılaşması tek bir donanım üzerinde çalışsaydı harika olurdu ama bu sürdürülebilir bir iş modeli değil.
Mevcut Durumu Ölçmek ve Geleceği Öngörmek
Performans Ekibi performans düşüşlerinin tespitinde iki ana veri kaynağından faydalanıyor:
- Yama Öncesi Veriler – Bu veriler geliştirici oynanış testleri, otomatik testler ve Açık Beta gibi çeşitli kaynaklardan toplanıyor.
- Oyun İçi Veriler – Dünyanın her yanındaki oyunculardan toplanan canlı veriler.
Yama öncesi veriler henüz oyuna eklenmemiş içerikleri ve özellikleri analiz ederek geleceği öngörmemizi sağlıyor. Bu veriler hacim olarak oyun içinden toplanan canlı verilerden çok daha küçük ve genelde bu kadar az örneklemle kesin bir çıkarıma varmak pek mümkün olmuyor. Test edilemeyen bazı şeyler de olabiliyor çünkü ne kadar uğraşırsak uğraşalım her şeyi etraflıca test etmemiz mümkün olmuyor.
Öte yandan oyun içi veriler ise mevcut oyuncu deneyimini doğrudan oyuncuların gözünden görüp anlayabilmemizi sağlıyor. Milyarlarca kayıttan oluşan bu veriler doğal olarak yama öncesi verilerden çok daha fazla sayıdalar ve bu yüzden işlenmeleri zor olabiliyor. Anlamlı çıkarımlara varabilmek amacıyla bu verileri derleyip topluyoruz.
Genel olarak yama öncesi veriler henüz çıkmamış içeriklere hazırlıklı olmamızı sağlarken oyun içi veriler mevcut koşulları görmemizi sağlıyor. Bu ikisi birleştiğinde çıkabilecek sorunların çoğunu tespit edebiliyoruz.
Normal Bir VALORANT Karşılaşması
VALORANT oyuncularının büyük çoğunluğu oyunu Derecesiz veya Rekabete Dayalı sıralara girerek deneyimliyor. Her iki sırada da tam olarak 10 oyuncu mücadele ediyor, yalnızca alınan risk farklı. VALORANT'ı deneyimlemenin Kopya, Spike'a Hücum ve Ölüm Kalım Savaşı gibi farklı yolları olsa da normal oyun modunda en iyi deneyimi sağlamak en çok kaynak harcadığımız nokta.
Çoğu VALORANT karşılaşması tam 10 oyuncuyla oynansa da bazı özel ve önemli durumlarda 10 oyuncudan fazlası da gerekebiliyor.
Standardın Dışındaki VALORANT Karşılaşmaları
Bir espor yayınında normal oyun modunda oynanan bir karşılaşmaya 22 istemci bağlanabiliyor. Bunlar izleme deneyimini destekleyen özel karşılaşmalar. Bu karşılaşmalarda bağlanan istemcilerin dağılımı genelde şu şekilde oluyor:
- 10 istemci oynayan oyuncuların (her takımdan 5)
- 2 istemci koçların (her takımdan 1)
- 10 istemciyse yayın ekibimizin kontrol ettiği gözlemcilerin. Karşılaşmaya fazladan bağlanmış olan bu istemciler hem evden hem de sahneden karşılaşmaları takip eden taraftarların izleme deneyimine adanmış durumda.
22 istemcinin bağlandığı bu karşılaşmalar normal bir VALORANT karşılaşmasından çok daha farklı. Bağlantı kurmuş olan her istemcinin sunucu tarafından gerekli bilgiyi edindiği ve ekrana yansıtabildiğinden emin olmak gerekiyor. Normal koşullarda bu durum oyun içinde çeşitli sorunlara yol açardı ancak espor karşılaşmalarında özel olarak hazırlanmış yerel donanımlar kurarak sporcular için oynanış bütünlüğü sağlıyoruz.
Standardın Dışındaki VALORANT Karşılaşmaları İçin Performans Hedeflerimiz
Sunucu performansı hedeflerimizden az önce bahsetmiştik. Sunucu karesi başına 2,34 ms'lik hedefimiz 10 oyuncuyla oynanan normal VALORANT oyunları için geçerli. Ancak 10 oyuncudan fazlasının bağlantı kurduğu durumlarda performansın ek istemcilerin sayısıyla orantılı olarak değişmesini bekleriz.
Örneğin 22 istemcinin bağlandığı bir karşılaşmada ortalama kare işleme hızı yaklaşık 2,2'lik bir çarpanla 2,34 ms'den 5,2 ms'ye çıkardı. Bu değer 128-tick sunucuların koşullarının sağlanabilmesi için gerekli olan 7,8 ms'lik kare işleme hızının hâlâ epey altında.
Standardın dışındaki VALORANT karşılaşmaları ve VALORANT'ın genel sunucu performansı hakkında sahip olduğumuz deneyim ve bilgilere göre bu yaklaşım standart karşılaşmalara dair performans verilerinden faydalanarak standardın dışındaki karşılaşmalar için doğru tahminler yürütebilmemizi sağlıyor.
Peki ya bir değişiklik olsaydı? Ya sunucu performansı bağlantı kuran ek istemcilerin sayısıyla orantılı olarak değişmeseydi?
Performans Düşüşü
2022'nin ağustos ayına dönelim. İlk sorunla 22 istemcili bir oynanış testinde karşılaştık. Testi gerçekleştiren oyuncular sunucu performansında dalgalanmalar ve oynanışta genel tutarsızlıklar hissetmeye başladılar. Karşılaşma kayıtlarını incelediğimizde bir terslik olduğunu fark ettik. Bu hatayı yakalayabilmemiz büyük bir şans oldu çünkü 22 istemcili oynanış testleri henüz standart testlerimiz arasında bulunmuyordu. Champions 2022'nin takım eşleştirmeleri ve hazırlıkları esnasında kral bir VALORANT geliştiricimiz testten sorumlu arkadaşlarımızdan 22 istemcili bir oynanış testi talep etti.
Ortada panik butonuna basmamızı gerektiren bir durum henüz yoktu ama sorunu doğrulamak, triyaj uygulamak ve çözmeye odaklanmak üzere hemen işe koyulduk.
Sorunu Doğrulamak
Tek bir veri genel bir eğilime işaret etmez. Sorunun ciddiyetini ve boyutunu anlamak adına 10'dan 22'ye kadar istemci sayısına göre karşılaşmaları ayırarak oyun içinden ölçümlerde bulunup veri toplamaya başladık. Bulgularımız şok ediciydi.
Sorunun tam olarak nedenini bilmesek de grafikler bağlı istemci sayısıyla sunucu performansı arasındaki korkutucu ilişkiyi gözler önüne seriyordu. Sorunun büyüklüğü oyuncu sayısıyla doğru orantılı artış göstermiyordu.
Bu verilerle elimizde büyük bir sorun olduğunu görmüş olduk ve 5.04 Yaması'nda oynanacak Champions 2022'nin de eli kulağındaydı. Panik butonuna bastık ve vakit kaybetmeden triyaj aşamasına geçtik.
(Bu tablo yamalara göre sunucu kare işleme hızını gösteriyor. Her çizgi standart sayı olan 10 ile azami sayı olan 22 arasında değişen istemci sayısını temsil ediyor. Beklentimize paralel şekilde bağlanan her yeni istemciyle birlikte performans düşüyordu. Ancak 5.03 Yaması'ndaki yükseliş performansın bundan bağımsız düştüğünü gösteriyordu.)
Performans Düşüşü Triyajı
Triyaj genelde sorunun tam olarak nedenini henüz bilmeden etkilerini azaltmaya yönelik gerçekleştirilen işleme denir. Tıpta bu teknik hastanın durumunu tespit edip "kanamayı durdurmayı" ifade eder. Biz de Riot'ta bu kelimeyi ani gelişen sorunlara çabucak müdahale etmek anlamında kullanıyoruz.
Bu soruna triyaj uygulayabilmek için aynı anda iki farklı işlem gerçekleştirdik.
Acil Durum Planları
Öncelikle VALORANT ekiplerimiz İstanbul'daki partnerlerimizle ortak çalışarak acil durum planları oluşturdular. Böylece Champions 2022 başlamadan önce sorunu çözemezsek neler yapabileceğimizi kararlaştırmış olduk.
Sorunun bağlantı kuran istemcilerin sayısıyla paralel olduğunu bildiğimiz için espor yayınını izleme deneyimini etkilemeyecek şekilde gözlemci sayısını azaltmayı göz önünde bulunduruyorduk. 22 istemci mümkün değildi. Kâğıt üzerinde düşününce bu koşullarda kaç istemciye kadar destekleyebilirdik peki? Espor tarafındaki partnerlerimizle birlikte 15 istemci bağlayarak hem 128-tick sunucularda stabil performans sağlayabileceğimizi hem de yayın deneyimi için 5 gözlemciye yer açabileceğimizi belirledik. Tüm bunlar standart sunucu kare işleme hızında kendimize sağladığımız fazladan alan sayesinde oldu.
Sorunun Kaynağını Bulmak
Bir yandan VALORANT geliştiricilerimiz sorunu anlayabilmek adına inceleme yapmaya ve performans düşüşünün nedenini aramaya devam ediyordu. Böyle büyük bir sorun genelde birden fazla sistemden kaynaklı değildir.
Şansımız yaver giderse sorunun kaynağını çabucak bulur ve Champions 2022 başlamadan çözüme ulaşmış oluruz diye düşünüyorduk. Maalesef pek öyle olmadı.
Performans Düşüşünü Düzeltmek
Performans düşüşünü ilk olarak 25 Ağustos 2022'de fark etmiştik ve sorun bir hafta sonra çözülmüştü. O yedi gün içerisinde birçok VALORANT mühendisi sorun üzerinde çalışarak pek çok olası çözüm üzerinde durdu.
İncelemelerin ilk gününde oyun kodunun performans düşüşüne neden olan kısmını tanımladık. Replication (Kopya - Oyun modu olan değil) Replication, Unreal'ın Aktör ve Bileşenlerdeki varlıkları senkronize ederek sunucular ve istemciler arasında tutarlılık sağlamak için kullandığı bir yöntem. Unreal'ın Replication sistemi hakkında detaylı bilgi burada (İngilizce).
İlk önceliğimiz 5.02 ve 5.03 Yamaları arasındaki değişiklikleri analiz ederek Replication'da nelerin değişmiş olabileceğini bulmaktı. Ancak buradaki değişiklikleri tespit etmek epey zor oldu çünkü Unreal Engine 4.26'ya yeni geçmiştik ve oyun motorunun temel kısımlarında çeşitli değişiklikler yapılmıştı. (VALORANT'ın Unreal Engine güncellemelerinin nasıl gerçekleştiğini okumak için VALORANT Teknoloji Lideri Marcus Reid'in tweet'lerine göz atabilirsiniz [İngilizce].)
Replication üzerindeki incelemeleri gerçekleştirmek pek kolay olmadı. Replication VALORANT geliştiricilerinin özellikle dikkat etmesi gereken bir sistem değildi çünkü halihazırda yıllardır kullandığımız etkili yöntemler vardı. Ayrıca bu sistemi Riot mühendisleri de geliştirmemişti. Temel oyun motoru üzerinde ihtiyaçlarımız doğrultusunda değişiklikler yapmıştık ancak sisteme dair büyük bir uzmanlığımız yoktu.
Daha sonra oyunun farklı kısımlarını sistematik olarak ayrıştırarak 5.02 ile 5.03 arasındaki farkları tespit edip kaynak sorunun kaynağını bulmaya çalıştık. Hem Unreal'ın araçlarını hem de Riot'un kendi araçlarını kullanarak bu iki yama arasındaki performans farklarını karşılaştırdık. Nihayetinde karakterlerin, silahların ve yeteneklerin 5.02'ye kıyasla 5.03'te çok daha fazla kopyalandığı sonucuna vardık.
Bu durumda bakılacak iki şey vardı:
- ASIL sorunu bulup düzeltmek: Gerçekleştirmek istediğimiz ideal senaryo.
- Performansı iyileştirecek başka fırsatlar aramak: Kaybettiğimiz kare işleme hızını yeniden edinmemizi sağlayacak başka iyileştirmeler bulabilirsek asıl sorunu tespit edip düzeltemesek bile bu iyileştirmeleri değerlendirerek performansı kontrol altına alabilirdik.
Birçok mühendisimiz olası düzeltme ve iyileştirmeleri test etmek için incelemelerde bulundu. Bu sırada mühendislerimiz Replication sistemiyle de içli dışlı olmaya başladı. Bu süreçte performansı iyileştirebilecek birden fazla fırsat tespit edildi ancak çoğu uygulanamayacak kadar riskliydi ve gelecek iyileştirmeler için not edildi.
1 Eylül 2022'de asıl sorunu tespit etmeyi başardık. UE 4.26'daki tek bir kod satırı Replication'ın belirli koşullarda çok daha fazla gerçekleşmesine neden oluyordu ve bunlar da VALORANT'ta oldukça sık meydana gelen koşullardı. Bu da performans düşüşüne yol açıyor ve istemci sayısı arttıkça durum iyice kötüleşiyordu. Sorun 10 istemcili karşılaşmalarda da fark ediliyordu ancak 22 istemcili karşılaşmaları oynanamaz kılıyordu.
Performans düşüşünün nedeni tespit edilmişti, düzeltmek ise riskli görünmüyordu. Sorunu halledeceğimize güvenimiz tamdı. Sevinçten kına yakacaktık neredeyse. Hemen kutlama moduna geçmedik ama kod satırlarımızda yaptığımız değişiklik epey tatmin ediciydi.
Performans Düşüşünün Sonrası
Performans düşüşünün kaynağı tespit edilip sorun düzeltildikten sonra performansın beklentilerimizi karşıladığından ve çözüm sırasında herhangi bir hata oluşmadığından emin olmak adına kapsamlı testler yaptık.
Sorunun Düzeltilmesi
Düzeltmeyi nasıl yapacağımızı 1 Eylül 2022'de tespit etmiş olsak da değişiklikleri 8 Eylül 2022 tarihine yani grup aşamalarının sonrasına kadar espor ortamına yansıtmadık. Böylece test ve doğrulama için fazladan zaman kazandık ve İstanbul'daki organizasyonda yaşanabilecek aksamaları da en aza indirgemiş olduk.
Düzeltme 5.05 Yaması'nda oyundaki yerini aldı ve hatırı sayılır bir performans artışı sağlandı.
Champions 2022'nin Sonrası
İş 5.05 Yaması'yla bitmedi tabii. Replication sistemi incelenirken performansı arttırabilecek birçok fırsat yakalandı ve ilerleyen aşamalarda değerlendirilmek üzere not edildi. Champions zamanı yaşanan sıkıntının temelindeki sorunu çözmedikleri için bu geliştirmeleri o sırada yapmak tehlikeliydi. Performans düşüşünün asıl kaynağını giderdikten sonra yeni kazandığımız Replication uzmanlığını sunucu performansını arttırabilecek birçok alanda fırsata çevirmeye başladık.
Bu çabalarımız neticesinde performans düşüşü öncesine kıyasla sunucu kare işleme hızında %15'lik bir iyileştirme yakalayarak önemli bir performans iyileştirmesi sağlamış olduk. Bu değişikliklerle bölgeler arasındaki değişkenlik de azaldı ve sunucu kare işleme hızı dengesi arttı.
5.07 Yaması'ndan beri sunucu karelerinin %99,3'ten fazlası sıkı 128-tick koşullarımızı karşılıyor. Yani oyuncular VALORANT'ın çıkışından bu yana gördükleri en stabil ve istikrarlı sunucuların keyfini çıkarıyorlar.
(Bu tablo yamalara göre sunucu kare işleme hızını gösteriyor. Her çizgi standart sayı olan 10 ile azami sayı olan 22 arasında değişen istemci sayısını temsil ediyor. 5.03 ve 5.04 Yamalarındaki büyük performans düşüşlerinden sonra sorunu düzelterek 5.05'te normal değerlere geri döndük. 5.07 Yaması'yla birlikte büyük performans düşüşünün öncesindeki değerlerden %15 daha iyi performans gösteren sunuculara sahip olduk.)
Neler Öğrendik?
Bu ani performans sorunu sayısız mühendis, espor partneri, test ekibi, yapımcı ve takım liderinin çabasının yanı sıra partner ekiplerimizin tavsiyeleri ve rehberliğiyle çözüldü. Bu olaydan çok şey öğrendik ve çalışma süreçlerimizde doldurmamız gereken boşluklar olduğunu fark ettik.
- Standardın Dışındaki Karşılaşmaların Takibi – Dikkatimizin çoğunu 10 oyunculu klasik Spike oyun modundaki normal VALORANT deneyimine veriyoruz. Biz verileri derleyip yeni tablolar oluşturana kadar verilerimiz bağlı oyuncu sayısına göre performansın etkilendiğine işaret etmiyordu. Bundan ötürü 10 istemciden fazla bağlantı gerektiren standardın dışındaki VALORANT karşılaşmalarının performans özelliklerini gözden geçirmek ve anlamak için yeni mekanizmalar oluşturduk.
- Standardın Dışındaki Karşılaşmaların Daha Fazla Test Edilmesi – Standart 10 oyunculu Spike oyun modu önceliğimiz olarak kalsa da 22 istemcili ortamlarda da sunucu performansını anlamak adına yeni mekanizmalar ve test süreçleri oluşturmaya çalışıyoruz. 22 istemcili karşılaşmaların örneklem sayısı çok az olduğu için düzenli olarak 22 istemcili oynanış testleri gerçekleştirmemiz gerekiyor. 22 istemcili testler artık yalnızca büyük turnuvalar öncesinde değil her yamada gerçekleştirdiğimiz rutin testler arasındaki yerini aldı. Bunun yanında muhtemelen daha farklı ve karmaşık test süreçlerine de ihtiyacımız olacak.
- Alanında Uzman Kişilerin (SME) Gelişimini Desteklemek – Fazlasıyla zaman alsa da alanında uzman kişilerin varlığı ekipteki bilgi açığının kapanmasını ve herkesin yeni şeyler öğrenmesini sağlıyor. Performans düşüşünü düzeltmeye çalışırken birçok mühendisimiz Replication hakkında uzmanlık kazandı ve bunun aslında iyi bir kaynak yatırımı olduğunu fark ettik.
- Turnuvalar için Riskleri Azaltmak – Champions 2022'yi özellikle Unreal Engine'in henüz yeni entegre edilmiş bir versiyonundaki yepyeni bir yamayla oynamak bizim açımızdan riskliydi. Dengelemeler ve ajan güncellemeleri gibi oynanış değişikliklerinin büyük turnuvalara da yansıdığını görmek istesek de ileride oynanacak turnuvalarda güncellemeleri bu kadar aceleye getirmeyeceğiz. Bunun önüne geçemeyeceğimiz durumlar olması halinde de en azından riskleri birçok kez gözden geçireceğiz.
VALORANT oyuncusu olmayı daha keyifli hale getirecek buna benzer iyileştirmeler yapacağımızdan şüpheniz olmasın. 128-tick sunucuların keyfini çıkarın. Skorunuz bol olsun!