Do odnalezienia błędu przyczynili się twórcy przeglądarki Vivaldi. Podczas testowania zauważyli, że testy zajmujące około 100 minut są wykonywane w czasie 300 lub nawet 360 minut. Nie udało im się znaleźć przyczyny we własnym zakresie mimo zmian konfiguracji i sterowników maszyn wirtualnych, używanych do testów. Do łask wrócił używany wcześniej Windows 7 Pro.
Błąd został znaleziony w Windowsie
Twórcy Vivaldiego drążyli temat. Muszą być jakieś różnice między Windowsem 7 i Windowsem 10. Yngve Pettersen poświęcił na to swój prywatny komputer i opisał wyniki. Ten sam zestaw testów na siódemce zajmował 20 minut, na dziesiątce zaś 100 minut.
Pettersen sprawdził kilka różnych wersji Vivaldiego i Chromium, aż w końcu zgłosił problem deweloperom silnika przeglądarki. Jego dochodzenie wykazało, że za kilkukrotne zwolnienie pracy przeglądarki odpowiadają wywołania CreateProcess - funkcji Windowsa, tworzącej nowe procesy w grupach testów, by awaria jednego testu nie zakończyła całego procesu.
Zestaw testów zawierał prawie 11 tys. jednostek i tworzył prawie 1,1 tys. procesów, zawierających po 10 testów. Na Windowsie 7 ten krok zajmował 2-3 milisekundy, na dziesiątce zaś między 300 i 600 milisekund. Ze względu na to, jak Chromium traktuje procesy, możliwe jest uruchomienie tylko jednego na raz. Uruchomienie 8 procesów zajmowało 2,4 sekundy. Po zakończeniu zestawu testów proces musi poczekać w kolejce także na uruchomienie nowych - po 100 ms działania musi czekać bezczynnie przynajmniej 2,3 sekundy. Coś tu jest poważnie zepsute.
Równolegle z Pettersenem błąd badał Bruce Dawson, pracujący nad Chromium. Z jego obserwacji wynika, że złożoność pracy z wielowątkkowym kodem na Widnowsie 10 jest kwadratowa (O(n2)), a powinna być liniowa (O(n)).
Dawson miał początkowo inne podejrzenia, ale w końcu dotarł do mechanizmu Control Flow Guard (CFG). Z jego winy czas uruchamiania procesu rośnie zależnie od kwadratu liczby funkcji w programie. Ta funkcja jest bardzo pomocna przy ochronie przeglądarek, ale do uruchamiania testów i różnych innych zadań zupełnie niepotrzebna.
Problem opóźnia pracę programistów, ale możliwe, że CFG opóźnia przeglądarki także w normalnym użyciu - w końcu każda karta Chrome'a czy Vivaldiego jest uruchamiana w nowym procesie. Ratuje je możliwość współdzielenia bibliotek (DLL).
Łatka pojawi się we wtorek
Microsoft otrzymał powiadomienie o błędzie 15 kwietnia, 23 kwietnia miał już gotowe rozwiązanie. Otrzymamy je w najbliższy Patch Tuesday, czyli w drugi wtorek maja. Wyłączenie CFG nie wchodzi w grę - byłoby zbyt groźne.
Programiści zauważyli też kilka innych anomalii w zachowaniu Windowsa 10. Nowszy Windows wciąż zostaje w tyle za Windowsem 7 pod względem wydajności. Nic dziwnego, że tak wiele osób nie chce aktualizować systemu.