Programer rešio ‘nerešiv’ problem, skratio učitavanje GTA Online za 70%

Sedam godina Rockstar nije uspeo da reši problem.

Stefan Alidini
03/03/2021

Uprkos odličnim prodajama, GTA Online nije savršen, i igru prate i bagovi koji nikada nisu popravljeni. Među njima je i čuveni problem dugačkog učitavanja, za koje se gejmeri godinama dovijaju kako da izbegnu.

Zajednici se takođe godinama govori da problem postoji zbog kompleksnosti peer 2 peer sistema, zbog veličine sveta igre, i da ga nije moguće popraviti.

Tu predrasudu skoro je razbio jedan programer, koji je na svom blogu dao mnoštvo detalja o tome kako se suočio sa tim problemom, i šta je tačno uradio da ga reši.

Pošto nije mogao da poveruje da njegovoj mašini (AMD FX-8350, GTX 1070, SSD, 16BG DDR3 RAM) treba čak 6 minuta za učitavanje igre, a čak i jačim konfiguracijama par minuta, rešio je da uzme stvar u svoje ruke i ispita o čemu se radi.

Kako nije imao pristup izvornom kodu, morao je da prati rad programa i pokuša sam da ulovi krivca. Eksperimentisao je sa disasemblovanjem delova koda i uspeo da vidi da je za problem zaslužna ‘strlen’ funkcija, a onda je pomoću alata kakvi su Process Dump i dibager x64dbg našao i fajl koji je u centru svega.

Ispostavilo se da je u središtu problema JSON fajl od 10 megabajta, sa oko 63 hiljade pojedinačnih unosa. U pitanju je katalog predmeta koji se mogu kupiti u igri (najverovatnije ne oni koji su vezani za mikrotransakcije).

Međutim, kako je programer otkrio, dugačko učitavanje događa se zbog lošeg i slabo optimizovanog načina na koji se pristupa tim podacima, gde se parsovanje odvija izuzetno neefikasno, tako što se čitaju pojedinačni karakteri kataloga.

Drugi problem je što se nakon čuvanja pojedinačnog predmeta i njegovih karakteristika u prazan fajl onda upoređuju hash vrednosti tog predmeta sa hash vrednostima svih ostalih unosa u JSON fajlu, kao i još mnoge druge stvari koje nisu imale smisla.

Kako se prilikom učitavanja koristi samo jedno jezgro procesora računara, bespotrebno se produžava vreme koje je potrebno za obradu tog kataloga od 10 megabajta, a zbog neefikasnog sistema provera sadržaja kataloga broj operacija se penje do dve milijarde, što stvara ozloglašeno dugačka učitavanja.

U potrazi za funkcionalnim rešenjem, programer je napravio svoj .dll fajl koji je bolje koristio postojeći parser i keširao početak i dužinu svakog dugačkog stringa, kako bi imao odakle da ga pozove ukoliko se kasnije pojavi potreba. Zaobišao je i proveru hash-eva, jer su svi unosi i onako bili jedinstveni, pa proveru nikad nije ni bilo potrebe vršiti.

Rezultat? Sa zakrpljenim parserom i zaobilaženjem hash provera smanjio je učitavanje za čitavih 70 odsto.

Njegovo rešenje brzo je odjeknulo internetom. Većina ljudi na forumima slaže se da je nedopustivo da igra koja beleži neverovatne prihode sedam godina ne može da popravi dugačka učitavanja, iako to spada među najiritantnije stvari za gejmere, a da je to uspeo da uradi neki programer sa interneta koji nije imao ni pristup izvornom kodu.

Jedna od najpoznatijih multiplejer video igara, Grand Theft Auto Online, sa oko 140 miliona prodatih kopija ujedno je i jedna od najprodavanijih igara svih vremena. Od 2014. godine obara rekorde i beleži odlične prihode, a i 2020. godine je zabeležila rekordni prihod od mikrotransakcija (procenjuje se, stotine miliona dolara), a veruje se da je do sada ukupno zaradila preko 6 milijardi, uprkos kontroverzama i pokušajima da se serijal zabrani.

Pošto rekordni prihodi nisu motivisali kompaniju, nadajmo se da će medijska pažnja ubediti Rockstar Games da dotera kod, a u nedostatku vremena ili resursa, programer bi im verovatno ustupio i svoj .dll.

Stefan Alidini

Objavio/la članak.

sreda, 3. Mart, 2021.

IT Industrija

🔥 Najčitanije