Nowości

Pamiętniki deweloperów: W jaki sposób rozwiązano zawieszania się w 0.25

Dowódcy!

Do najczęstszych pytań, jakie zadajecie nam na Discord i forach, są te dotyczące krytycznych problemów, poważnie ingerujących w rozgrywkę – takich jak zawieszania się gry. Po wejściu Aktualizacji 0.25 wpłynęło do nas dużo zgłoszeń takich problemów. Dokładnie zbadaliśmy sprawę i zaprezentowaliśmy wam rozwiązania w postaci ostatnio wprowadzonych łatek. Dzisiaj chcemy opowiedzieć bardziej szczegółowo o wspomnianych problemach oraz procesie, który doprowadził do ich rozwiązania.

scr1

O zawieszeniach ogólnie

Zawieszenia to ogółem jeden z najbardziej poważnych problemów, jakie może mieć gra. Ich rozwiązanie jest bezwzględnie konieczne. Szkopuł tkwi w tym, że zdarzają się z najprzeróżniejszych powodów. Aby znaleźć przyczynę, należy zgromadzić wielką liczbę danych, ponieważ zawieszenia te ogółem nie zdarzają się po stronie dewelopera i nie występują w testach wewnętrznych (gdyby miało to miejsce, nie wydalibyśmy odnośnej aktualizacji). Dane te zbiera automatyczny system raportowania o zawieszeniach, którego komunikaty pojawiają się w momencie zderzenia. Jest to niezwykle ważne i niezbędne do znalezienia rozwiązania tego typu problemów narzędzie.

Informacje gromadzone przez ów system można podzielić na różne kategorie, z których każdą zajmuje się oddzielny zespół. Przytoczmy kilka konkretnych przykładów.

img1

Względna liczba zawieszeń systemów 32-bitowych

img2

Względna liczba zawieszeń systemów 64-bitowych

Wykresy te pokazują, jak zmieniała się liczba zawieszeń rosyjskiego klienta pomiędzy dwoma dużymi aktualizacjami - Caribbean Crisis i Black Sea Incursion, w zależności od rodzaju systemu operacyjnego gracza. Zwróćcie uwagę, że liczba zawieszeń 32-bitowych systemów spadła wraz z wprowadzeniem aktualizacji Black Sea Incursion, zaś liczba zawieszeń 64-bitowych wzrosła. Kolory oznaczają poszczególne aktualizacje.

Odbiegnijmy trochę od tematu i przyjrzyjmy się wpierw systemom 32-bitowym.

Optymalizacja gry na potrzeby systemów 32-bitowych może nie wydawać się ważną sprawą dla zachodnich rynków, ale im dalej na wschód, tym bardziej staje się ona istotna z uwagi na ogólny poziom sprzętu. Problemem 32-bitowego sprzętu jest ograniczenie jego pamięci do 2 GB. Oznacza to, że jeśli gra spróbuje zużyć więcej niż dwa gigabajty, zawiesi się. Faktycznie do zawieszenia gry dojdzie dużo wcześniej z powodu fragmentacji pamięci – nawet przy 1,5 do 1,6 GB dla gry nie pozostaje za dużo pamięci.

Ogromna większość zawieszeń 32-bitowych systemów wiąże się z brakiem pamięci. Aby zaradzić sytuacji, pracujemy w pocie czoła nad optymalizacją klienta poprzez zmniejszenie jego wymogów pamięciowych oraz efektu fragmentacji. Zdecydowanie zalecamy aktualizację do systemu 64-bitowego, ponieważ systemy 32-bitowe są z natury mniej stabilne w przypadku dużych aplikacji, takich jak Armored Warfare ze względu na wyżej wymienione ograniczenia. Do tego deweloperzy sprzętu stopniowo przestają obsługiwać systemy 32-bitowe - na przykład Nvidia zapowiedziała już, że przestanie aktualizować 32-bitowe sterowniki systemowe.

Tymczasem wróćmy do wykresów powyżej. Jak widzicie, ostatnia łatka zmniejszyła w dużym stopniu liczbę zawieszeń. Nadal monitorujemy sytuację, aby nie dopuścić do tego, aby liczba zawieszeń nie przekroczyła dopuszczalnych granic.

Naprawa zawieszeń

Aby dowiedzieć się więcej o awariach, które nękały grę w Update 0.25, musimy zwrócić się do dwóch programistów, którzy najlepiej naświetlą sytuację - lidera zespołu klienta gry Alekseja Petranowskiego oraz wiodącego programisty mechaniki gry Marata Radczenko.

Weźmy przykładową sytuację, w której graczowi zdarza się zawieszenie gry podczas bitwy, a gra wysyła zgłoszenie zawieszenia. Jasna rzecz, gracz ten będzie chciał jak najszybciej wrócić na bitwę i uruchomić grę bez konieczności podawania szczegółów w sekcji na komentarze o zawieszeniu. Wszystko dobrze. Najważniejszą sprawą jest wysłanie raportu poprzez naciśnięcie przycisku "Wyślij" w oknie zgłoszenia zawieszenia.

Zgłoszenia te trafiają następnie do kosza, gdzie są sortowane, a następnie wysłane do różnych zespołów. Aby zrozumieć, jak działa sortowanie, trzeba wiedzieć, że:

  • Klient uruchamia różne tzw. "funkcje"
  • Przy zbieraniu raportów zostaje przekazana lista tych tak zwanych funkcji programistom
  • W zależności od listy generowany jest identyfikator, opisujący dany problem. Od tego momentu wszystkie tego rodzaju problemy (z podobnymi interakcjami funkcji w chwili zawieszenia) otrzymują ten identyfikator. Kiedy programista, odpowiedzialny za dany problem, przegląda zgłoszenia złożone przez graczy i może je zidentyfikować za pomocą tego identyfikatora. Umożliwia mu to ustalenie liczby takich problemów, w danym czasie występujących.

scr3

Wykres ten pokazuje najczęstsze zawieszenia, zdarzające się z różnych przyczyn, posortowane według częstotliwości występowania. Niektóre są ze sobą powiązane (nawet jeśli ich przyczyny są trochę różne) i można je podzielić na różne grupy:

Grupa 1 składa się z problemów prowadzących do zawieszenia 1 i 3 (zgodnie z oznaczeniem wykresu). Były one spowodowane problemami ze starym kodem sieciowym, które następnie prowadziły do zawieszania się klienta. Kwestie te zostały rozwiązane w ostatniej łatce przez zespół, odpowiedzialny na mechanikę bitwy i jej back-end. Dzięki temu liczba zawieszeń na serwerze spadła do 30 procent.

Grupa 2 składa się z problemów prowadzących do zawieszenia 2 (zgodnie z oznaczeniem wykresu). Ten rodzaj zawieszania następuje, kiedy DirectX w pewnym momencie "traci" połączenie z procesorem graficznym, co powoduje wyłączenie klienta. Zawieszenie to może mieć różne przyczyny – problemy z kartami graficznymi, problemy z sterownikami, przegrzanie procesora graficznego lub problemy z systemem renderującym grę. Niestety, my możemy zadziałać w przypadku ostatniego punktu, przy czym nawet w tym przypadku znalezienie rozwiązania tego szczególnego rodzaju zawieszenia się w oparciu o zgłoszenie jest bardzo trudne, ponieważ musimy poszukać sposobu powielenia problemu na naszym końcu. Rozwiązanie tego problemu zalicza się obecnie do najważniejszych zadań zespołu odpowiedzialnego za klienta.

Grupa 3 składa się z problemów zawieszenia typu 4,5 i 7 (zgodnie z oznaczeniem wykresu). Są to zawieszenia ekranu ładowania bitew. Przy ładowaniu bitwy główny wątek gry jest zajęty wczytywaniem zasobów i korzysta z dodatkowych wątków do aktualizacji ekranu, ale niektóre części gry nie oczekują, że będą obsługiwane przez oddzielny wątek i zawieszają się. Problemem tym, rozwiązanym w ostatniej łatce, zajmuje się zespół odpowiedzialny za interfejs użytkownika.

Grupa 4 składa się z problemów zawieszania się typu 6 (zgodnie z oznaczeniem wykresu). Jak na ironię, zawieszenie to powoduje system, służący do monitorowania zawieszania się gry (system ten nazywa się Watch Dog). Monitoruje on bieżące procesy w grze i jeśli nie zareagują one w określonym czasie, to sztucznie i celowo powoduje zawieszenie. Zawieszenia te są w rzeczywistości tylko symptomem innego problemu, a nie samym problemem - są niezbędne do przekazania informacji o komponentach gry, które nie reagują, abyśmy mogli je przeanalizować. Taki brak reakcji może być spowodowany wieloma przyczynami - przeciążeniem procesora, przeciążeniem dysku, niewystarczającą pamięcią lub błędem w grze. Zajmuje się nimi również zespół odpowiedzialny za klienta.

Jak widzicie, wasze opinie zwrotne i zgłoszenia zawieszeń pomagają nam ustalić, które zawieszenia zdarzają się najczęściej i przypisać im najwyższy priorytet. Nie oznacza to, że nie zajmujemy się jednocześnie innymi kwestiami – owe opracowywane są równolegle do wyżej wymienionych.

Trzeba pamiętać, że zgłoszenie rzadko występujących zawieszeń jest nawet jeszcze ważniejsze. Prosimy o pomoc i wysyłanie nam ich, ponieważ znacznie przyspiesza to proces naprawiania zawieszeń. Zdanie się na wysyłanie zawieszeń przez innych graczy i ignorowanie własnych może nam poważnie utrudnić działania. Miejcie to na uwadze. Każde zawieszenie zasługuje na zgłoszenie i każde zawieszenie zostanie rozpatrzone, a każdy fragment danych jest pomocny.

Możecie też, oczywiście zgłaszać wszelkie problemy naszym niesamowitym kolegom z Działu pomocy, którzy je odnotują, a następnie przekażą nam w swoich okresowych sprawozdaniach.

Do zobaczenia na polu bitwy!

Wyżej

Dołącz do akcji