Bir Hacker, GTA Online Yükleme Süresini Azaltmayı Başardı!

Oyun modları, özellikle Grand Theft Auto Online için bir karmaşadır. Ancak bazen, birisi o kadar iyi ve yine de o kadar basit bir konuyla gelir ki, geliştiricinin aynı şeyi neden bir yamada yapmadığını merak edersiniz. İşte bugün böyle bir olay ile karşınızdayız, bir bilgisayar korsanı, yükleme süreleri için o kadar basit bir düzeltme gösterdi ki, Rockstar Games’in bunu neden yıllar önce yapmadığını merak edeceksiniz.

Grand Theft Auto Online oynayanlar bilir ki oyuna girişte yükleme süreleri çok uzun sürer. Geride bıraktığımız yaz döneminde Reddit’te yapılan bilimsel olmayan bir anket, çoğunun oyunun başlayabilmesi için üç ila altı dakika beklediğiniz ve oyuncuların yüzde 35’inden fazlasının altı dakikadan daha uzun yükleme sürelerine sahip olduğunu ortaya koydu. En kötü senaryolardan birinde ise bekleme süreleri 15 dakikadan fazlayı bile bulabiliyordu.

T0st isimli bir yazılım uzmanı, altı dakikalık yükleme sürelerine neyin sebep olabileceğini merak etti ve araştırdı. İşlem yığınını boşalttıktan sonra, tek bir CPU iş parçacığını en üst düzeye çıkaran iki darboğaz keşfetti. Kötü yazılmış bir rutin, 63.000’den fazla öğe içeren 10MB JSON dosyasını verimsiz bir şekilde ayrıştırmaya çalıştığını ispatladı.

Görünüşe göre, JSON dosyası oyun içi mağazalardan satın alınabilen öğeleri barındırıyordu (mikro işlemlerle karıştırılmamalıdır). Süreyi gereksiz yere uzatan rutin, dosyadaki her girişi okuyor ve ardından bir dizide depoluyor. Her geçişte, yeni öğeyi eklemeden önce tüm diziyi kopyalamak için yeniden denetliyor. Tahmin edilebileceği gibi, dizi büyüdükçe bu süreç uzayıp gidiyor.

Sorunu çözmek için T0st, bekleme süresini uzatan iki darboğazı ortadan kaldıran bir DLL oluşturdu. İlk düzeltme, uzun dizi uzunluklarını “önbelleğe alır”. “Dizenin aralığı içinde yeniden çağrılırsa, önbelleğe alınan değeri [döndürür],” .

Bu düzeltme, tekrarlanan girişleri ortadan kaldırdığından, çift kontrol artık gerekli değildir. Dolayısıyla, DLL’nin ikinci bölümü değerleri diziye ekler.

Bu iki yamanın sonuçları oldukça dikkat çekici. Yalnızca yineleme denetimi düzeltmesi yüklendiğinde, yükleme süresi mütevazı bir şekilde altı dakikadan 4,5 dakikaya düşürüldü. JSON ayrıştırıcısı çok daha etkiliydi, beklemeyi iki dakika 50 saniyeye düşürdü ve her iki yamayı DLL’ye uygulayarak yükleme süresinin hızını yaklaşık olarak yüzde 70 (veya 1 dakika 50 saniye) artırdı.

Sonuçlar, donanım yapılandırmasına bağlı olarak değişiklik gösterebilecek tabi ki, ancak optimizasyonlar, her kurulum için yükleme hızlarını önemli ölçüde iyileştirmelidir.

T0st, ilgileniyorsanız konsept kanıtını GitHub üzerinden paylaştı, ancak çevrimiçi iken enjekte etmenin sizi askıya alabileceği konusunda uyarıyor. Sorunu nasıl bulup çözdüğüne dair yazdığı yazı da oldukça iyi bir okuma. Rockstar Games’in PoC’sinden haberdar olacağını ve stüdyonun yedi yaşındaki nakit ineği için mantıksız bir talep olmayan resmi bir yama yayınlayacağını umuyor.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir