Kiedy mówisz o wydajności na serwerze, istnieje kilka różnych sposobów patrzenia na nią. Widoczny jest czas reakcji (podobny do opóźnienia sieci) i przepustowość (podobny do przepustowości sieci).
Niektóre wersje systemu Windows Server są dostarczane z domyślnie włączonymi ustawieniami zrównoważonej energii. Jak zauważył Jeff. Windows 2008 R2 jest jednym z nich. Obecnie bardzo niewiele procesorów jest jedno-rdzeniowych, więc to objaśnienie dotyczy niemal każdego serwera Windows, na który się natkniesz, z wyjątkiem jednordzeniowych maszyn wirtualnych. (więcej na ten temat później).
Gdy aktywny jest zrównoważony plan zasilania, procesor próbuje zmniejszyć przepustowość zużywanej mocy. Robi to poprzez wyłączenie połowy rdzeni procesora w procesie znanym jako „parkowanie”. Tylko połowa procesorów będzie dostępna jednocześnie, więc zużywa mniej energii w okresach małego ruchu. Nie jest to problem sam w sobie.
Problemem jest fakt, że kiedy procesory nie są zaparkowane, podwoiłeś dostępne cykle procesora dostępne dla systemu i nagle niezrównoważiłeś obciążenie systemu, przenosząc go z (na przykład) wykorzystania 70% na wykorzystanie 35%. System patrzy na to i po przetworzeniu gwałtownego ruchu myśli: „Hej, powinienem to nieco cofnąć, aby oszczędzać energię”. I tak się dzieje.
Oto zła część. Aby zapobiec nierównomiernemu rozkładowi ciepła i mocy w rdzeniach procesora, ma on tendencję do parkowania procesorów, które nie zostały ostatnio zaparkowane. Aby to działało poprawnie, procesor musi opróżnić wszystko, od rejestrów procesora (pamięć podręczna L1, L2 i L3) do innej lokalizacji (najprawdopodobniej pamięci głównej).
Jako hipotetyczny przykład załóżmy, że masz 8-rdzeniowy procesor z C1-C8.
- Aktywne: C1, C3, C5, C7
- Zaparkowany: C2, C4, C6, C8
Gdy tak się stanie, wszystkie z nich stają się aktywne przez pewien czas, a następnie system zaparkuje je w następujący sposób:
- Aktywne: C2, C4, C6, C8
- Zaparkowany: C1, C3, C5, C7
Ale robiąc to, istnieje spora ilość narzutu związanego z opróżnianiem wszystkich danych z pamięci podręcznej L1-L3, aby tak się stało, aby dziwne błędy nie zdarzały się programom, które zostały usunięte z potoku procesora.
Prawdopodobnie jest to oficjalna nazwa, ale lubię to tłumaczyć jako bicie procesora. Zasadniczo procesory spędzają więcej czasu na wykonywaniu pracochłonnego przenoszenia danych wewnątrz, niż na przetwarzaniu żądań pracy.
Jeśli masz jakąkolwiek aplikację, która wymaga niewielkich opóźnień w żądaniach, musisz wyłączyć ustawienia zrównoważonej mocy. Jeśli nie masz pewności, czy jest to problem, wykonaj następujące czynności:
- Otwórz „Menedżera zadań”
- Kliknij kartę „Wydajność”.
- Kliknij „Otwórz monitor zasobów”
- Wybierz zakładkę „CPU”
- Spójrz na prawą stronę okna na różne procesory.
Jeśli zobaczysz, że któryś z nich zaparkował, zauważysz, że połowa z nich jest zaparkowana w danym momencie, wszystkie odpalą, a następnie druga połowa zostanie zaparkowana. Zmienia się naprzód i wstecz. Tak więc procesory systemowe są wstrząsające.
Maszyny wirtualne: ten problem jest jeszcze poważniejszy, gdy używasz maszyny wirtualnej, ponieważ istnieje dodatkowy narzut hiperwizora. Ogólnie rzecz biorąc, aby maszyna wirtualna mogła działać, sprzęt musi mieć wolne miejsce na czas dla każdego z rdzeni w każdym przedziale czasu.
Jeśli masz 16-rdzeniowy element sprzętowy, możesz uruchamiać maszyny wirtualne przy użyciu więcej niż 16 rdzeni ogółem, ale dla każdego przedziału czasu, tylko do 16 wirtualnych procesorów będzie kwalifikowało się do tego przedziału czasu, a hiperwizor musi pasować do wszystkich rdzeni maszyny wirtualnej w te czasy. Nie można go rozłożyć na wiele odcinków czasu. (Szczelina czasowa jest zasadniczo zestawem cykli procesora X. Może to być 1000 lub 100 000 cykli)
Przykład: 16-rdzeniowy sprzęt z 8 maszynami wirtualnymi. 6 ma 4 wirtualny procesor (4C), a 2 ma 8 wirtualnych procesorów (8C).
Timeslice 1: 4x4C Timeslice 2: 2x8C Timeslice 3: 2x4C + 1x8C Timeslice 4: 1x8C + 2x4C
To, czego nie może zrobić hiperwizor, to podzielenie połowy przydziału dla szczeliny czasowej na pierwsze 4 procesory 8 maszyny wirtualnej vCPU, a następnie na następnej szczelinie czasowej oddaj resztę pozostałym 4 vCPU tej maszyny wirtualnej. To wszystko albo nic w krótkim czasie.
Jeśli korzystasz z Hyper-V Microsoftu, ustawienia kontroli mocy można włączyć w systemie operacyjnym hosta, co oznacza, że będzie się ono rozprzestrzeniać w systemach klienckich, a tym samym wpłynie na nie.
Gdy zobaczysz, jak to działa, łatwo jest zobaczyć, jak korzystanie z ustawień zrównoważonej kontroli mocy powoduje problemy z wydajnością i powolne działanie serwerów. Jednym z podstawowych problemów jest to, że przychodzące żądanie musi poczekać na zakończenie procesu parkowania / rozpakowywania procesora, zanim serwer będzie w stanie odpowiedzieć na przychodzące żądanie, niezależnie od tego, czy jest to zapytanie bazy danych, żądanie serwera WWW lub cokolwiek innego .
Czasami system zaparkuje lub odparkuje procesory w środku żądania. W takich przypadkach żądanie zostanie uruchomione w potoku procesora, zostanie z niego zrzucone, a następnie inny rdzeń procesora odbierze stamtąd proces. Jeśli jest to wystarczająco duże żądanie, może się to zdarzyć kilka razy w trakcie żądania, zmieniając, co powinno być 5-sekundowe zapytanie do bazy danych, na 15-sekundowe zapytanie do bazy danych.
Największą rzeczą, którą zobaczysz przy korzystaniu ze zrównoważonej mocy, jest to, że systemy będą reagować wolniej, odpowiadając na prawie każde Twoje zapytanie.