Jak zwiększyć wydajność serwera Windows Hyper-V o 100%?

W IT nie ma nic pewnego. Oto historia pewnego problemu w którym nowy, super szybki serwer z Hyper-v jest wolniejszy od starego, poczciwego serwera – oraz nieoczekiwanie prostego rozwiązania.

[important]Microsoft Hyper-V to technologia pozwalająca na wirtualizację komputerów i serwerów. Dzięki niej na jednym fizycznym serwerze może pracować wiele wirtualnych maszyn (serwerów). Wirtualnych czyli takich, gdzie każda z nich jest samodzielnym systemem operacyjnym, nie posiadającym wspólnych elementów z innymi maszynami wirtualnymi pracującymi na serwerze dokładnie tak, jak gdyby miała cały serwer tylko dla siebie. Poszczególne maszyny wirtualne mogą mieć inne systemy operacyjne lub służyć do innych celów.[/important]
Jesteśmy fanami wirtualizacji oraz Hyper-v. Wszystkie nasze serwery oparte są o Hyper-v (aktualnie w wersji 2012), a także polecamy to rozwiązanie wszystkim naszym klientom. Ze względu na zalety (jak np. możliwość łatwego stworzenia środowiska testowego, łatwemu zabezpieczeniu się na wypadek nieudanej aktualizacji, łatwości przeniesienia systemu na inny serwer, czy utrzymaniu ciągłości działania na wypadek awarii) – większość naszych klientów decyduje się na to, aby ich nowy serwer był zwirtualizowany (w oparciu o Hyper-v). Tak też było z naszym kolejnym klientem. Gdy przyszedł czas wymiany starego serwera na nowy wspólnie uzgodniliśmy, że wszystko zwirtualizujemy. Proces instalacji, konfiguracji przeszedł sprawnie, również  przeniesienia danych. W ustalonym terminie, od rana wszyscy bez problemów pracowali na nowym serwerze terminali, a stary serwer poszedł w odstawkę. Nieoczekiwany problem pojawił się dopiero po kilku tygodniach.

Nowy, szybki serwer, działa wolniej, czemu?

Podczas intensywnych księgowań dokumentów z całego miesiąca, okazało się, że czas ten wydłużył się ponad dwukrotnie – o czym klient nas niezwłocznie poinformował. Zdziwiliśmy się, ponieważ nowy serwer był parametrami ponad 2x szybszy od starego (szybszy zegar, więcej rdzeni, więcej ramu, kilka generacji nowszy itd.) posiadał najnowsze wersje SQL Servera, oraz Windows Server. Zaczęliśmy szukać przyczyny. Najpierw sprawdziliśmy czy poprawnie zainstalowaliśmy hyper-v, czy prawidłowe są wszystkie ustawienia, wgrane wszystkie sterowniki – okazało się, że wszystko zrobiliśmy prawidłowo. Kolejno, chcieliśmy zmierzyć wydajność serwera, uruchomiliśmy wiele syntetycznych testerów, mierzących wydajność procesora, pamięci, dysków – wszystkie wyniki, kilkukrotnie powtarzane – również wychodziły zgodnie z oczekiwaniami czyli lepiej niż na starym serwerze. Szukaliśmy dalej, sprawdziliśmy konfigurację i obciążenie zainstalowanych na serwerze programów, wszystko było OK. Przygotowaliśmy własne testy wydajności na bazie klienta, wielokrotnie aktualizujące lub odczytujące dane i puszczaliśmy je na starym i nowym serwerze. Oczywiście na nowym wszystko było super. Czyli dalej nie mieliśmy rozwiązania.

Czy mamy rozwiązanie?

Wtedy pojawiła się nowa wersja Comarch ERP XL (na którym pracuje klient) i w liście zmian, poprawek była jedna, która nas zainteresowała. Opisywała ona poprawę błędu w programie związanego z współpracą z SQL 2012. Ucieszyliśmy, się, że rozwiąże to nasz problem. Poprzednio klient miał MS SQL w wersji 2008, a teraz 2012, pomyśleliśmy że to może być przyczyną. Przygotowaliśmy klienta do aktualizacji, trwało to trochę ponieważ trzeba było zgrać wgranie kilku programów, ale udało się. Wgraliśmy nową wersję. Niestety okazało się, że nic to nie dało. Księgowania nie przyspieszyły. Zweryfikowaliśmy wtedy z producentem daną zmianę, okazało się, że dotyczyła ona jednego niewielkiego fragmentu w programie, i to takiego, którego ten klient nie używał.

Optymalizacja

Ponieważ nie lubimy mieć nierozwiązanych problemów więc szukaliśmy dalej. Rozpoczęliśmy optymalizację bazy klienta narzędziami z SQLa, założyliśmy dodatkowe indeksy – mieliśmy częściowy sukces. Udało się ulepszyć wydajność ale dalej było gorzej niż na starym serwerze.

Mamy wreszcie trop.

Postanowiliśmy wtedy sprawdzić wszystko jeszcze raz, jeszcze dokładniej. Sprawdziliśmy czy wgraliśmy sterowniki, czy ustawiliśmy plan zasilania pozwalający procesorowi na korzystanie z Turbo Boost. I … znaleźliśmy pewien niepokojący objaw.

[important]Turbo Boost to technologia Intel przyspieszająca procesor do wyższych niż standardowe częstotliwości, gdy pozwalają na to warunki np. temperatury. Czyli procesor pracujący z częstotliwością np. 3,4Ghz, może okresowo pracować nawet z 3,7Ghz.

SpeedStep to z kolei technologia ograniczająca szybkość procesora gdy jest nie używany, po to aby oszczędzać prąd i ograniczać ilość wydzielanego ciepła.[/important]

Podczas testów syntetycznych procesor podkręcał się do 3,7Ghz, natomiast podczas księgowania pracował na poziomie ok 0,9Ghz – 1,5Ghz, czyli praktycznie w stanie spoczynku, i to było dziwne, bo system nie był w stanie spoczynku.

Wydedukowaliśmy to tak, księgowanie to proces obciążający przez moment aplikację a następnie bazę danych, i tak na zmianę. Pomiędzy przejściami (przesłaniem danych pomiędzy aplikacją a bazą danych, pracujących na osobnych maszynach wirtualnych) system nie jest obciążony. Może procesor czeka aż będzie obciążony przez dłuższy czas aby podnieść swoją szybkość? Może tak, może nie. Dla nas nie miało to znaczenia. Miało znaczenie to, że księgowanie trwało za długo. Przestawiliśmy więc serwer w tryb zasilania Performance (czyli taki, który wyłącza speedstep), i puściliśmy ponownie księgowanie, i po 10 minutach się zdziwiliśmy, serwer się wyłączył i nie chciał włączyć – pojawił się BlueScereen. Po uruchomieniu serwera w trybie awaryjnym przestawiliśmy z powrotem ustawienia zasilania na Zrównoważone i zaczęliśmy szukać dalej. Okazało się, że klient nie posiada wystarczającego chłodzenia w serwerowni i inteligentny procesor Intel Xeon E3 samodzielnie zwleka z przyspieszeniem swojej szybkości po to, aby wydzielać mniej ciepła, gdy w około jest gorąco.

Rozwiązanie

Aby zachować stabilność, przestawiliśmy ustawienia procesora tak, aby pracował z minimalną szybkością 50% i obserwując temperatury puściliśmy ponownie księgowanie. Rezultat był tym czego szukaliśmy.

Czas księgowania
Start serwer 26 minut
Nowy serwer 51 minut
Nowy serwer po optymalizacji 46 minut
Nowy serwer ustawiony na 50% 21 minut

 

Okazało się, że uzyskaliśmy oczekiwaną poprawę, obecnie czas księgowania jest szybszy niż na starym serwerze. Przekazaliśmy informacje do klienta, który obiecał popracować nad chłodzeniem w serwerowni.  A my wreszcie mogliśmy zamknąć zgłoszenie dotyczące wydajności. Swoją drogą ciekawi jesteśmy rezultatów jakie osiągnięte zostaną po poprawieniu chłodzenia oraz przestawieniu tego serwera w tryb performance. Czy uda nam się osiągnąć czas poniżej 10 minut?

Co jeszcze zauważyliśmy?

Sprawdziliśmy problem dogłębnie w naszym środowisku, i przestawienie na stałe serwera w tryb performance znacznie zwiększa jego wydajność w środowisku Hyper-v przy zastosowaniu oprogramowania ERP. Oczywiście w serwerowni w której jest adekwatne chłodzenie. Przy serwerze tradycyjnym, bez wirtualizacji nie obserwujemy istotnej zmiany pomiędzy ustawieniami „Balanced” oraz „Performance”. Od teraz wszystkie serwery z Hyper-v przekazujemy klientom ustawione w trybie wysokiej wydajności. A wszystkim, którzy zamierzają zainwestować w nowy serwer, w dalszym ciągu mocno polecamy Hyper-v i nasze usługi instalacji. Jeżeli jesteś zainteresowany wirtualizacją swoich systemów lub administracją serwerów z hyper-v to zachęcamy do kontaktu.

Zobacz również

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *