Ile przełączników kontekstowych jest „normalnych” (jako funkcja rdzeni procesorów (lub innych))?

34

Cześć, Linux / UNIX Overlords,

Czy ktoś z was ma ogólną zasadę, ile przełączników kontekstu (na rdzeń procesora) ma wartość Normal na serwerze z systemem Linux?

Mój college tutaj go wychował i widzi 16K na 8-rdzeniowej x86_64maszynie.

Oto kilka statystyk z sarface z ostatnich kilku dni ...

alt tekst http://src.autonomy.net.au/imagebin/81895e338fae67d3d205c09db44a81e6-Picture_10.png

Aby zobaczyć statystyki tworzenia procesu, oto logarytmiczny widok tego samego wykresu ...

alt tekst http://src.autonomy.net.au/imagebin/7481f7e52bead4effc90248fc23c72fe-Picture_11.png

A 8 rdzeni jest znudzonych na śmierć ...

alt text http://src.autonomy.net.au/imagebin/0e94326652e977fd74edcd840f94200f-Picture_12.png

CS vs IOwait (skala x10000)

alt text http://src.autonomy.net.au/imagebin/a52a2a8a120394849c0da4045933e306-Picture_13.png

Więcej bezużytecznych informacji na wypadek, gdyby ktoś zapytał ...

  • Pamięć, na której działa serwer, to SAN o pojemności 0,5 TB za pośrednictwem FC
  • Jest 8 GB pamięci RAM, głównie pamięć podręczna - bez zamiany.
Kserkses
źródło
1
W jakimś konkretnym okresie?
dmckee
Czy możesz bardziej szczegółowo określić obciążenie pracą?
dmo
1
Jak stworzyłeś ten wykres? Wygląda naprawdę ładnie!
Antoine Benkemoun
Cześć Antoine - Wykresy są wykonane z sarface ( projects.autonomy.net.au/sarface )
Kserkses
łącza do wykresów są już martwe. @ Xerxes, możesz skądś się tam dostać?
törzsmókus

Odpowiedzi:

25

Zależy to bardzo od rodzaju uruchomionej aplikacji. Jeśli masz aplikacje, które są bardzo zadowolone z wyzwalaczy systemowych WRT, możesz spodziewać się dużej ilości przełączania kontekstu. Jeśli większość aplikacji jest bezczynna i budzi się tylko wtedy, gdy na gnieździe dzieje się coś, możesz spodziewać się niskiej szybkości przełączania kontekstu.

Połączenia systemowe

Wywołania systemowe powodują przełączanie kontekstu z ich własnej natury. Kiedy proces wykonuje wywołanie systemowe, po prostu informuje jądro, aby przejmowało kontrolę nad bieżącym momentem i pamięcią, aby robić rzeczy, których proces nie jest uprzywilejowany, i powrócić do tego samego miejsca po zakończeniu.

Kiedy spojrzymy na definicję syscall write (2) z Linuksa, staje się to bardzo jasne:

IMIĘ
       write - zapisz do deskryptora pliku

STRESZCZENIE
       #zawierać 

       ssize_t write (int fd, const void * buf, size_t count);

OPIS
       write () zapisuje do zliczania bajtów z bufora wskazanego buf do pliku
       do którego odwołuje się deskryptor pliku fd. [..]

WARTOŚĆ ZWRACANA
       Po pomyślnym zakończeniu zwracana jest liczba zapisanych bajtów (zero wskazuje
       nic nie zostało napisane). W przypadku błędu zwracane jest -1 i ustawiane errno
       odpowiednio.
       [..]

Mówi to w zasadzie do jądra, aby przejęło operację od procesu, przechodzi do countbajtów, zaczynając od adresu pamięci wskazanego przez *bufdeskryptor pliku fdbieżącego procesu, a następnie powraca do procesu i mówi mu, jak poszło.

Dobrym przykładem na to jest serwer dedykowany do gier opartych na Valve Source, hlds . http://nopaste.narf.at/f1b22dbc9 pokazuje jedną sekundę wywołań systemowych wykonanych przez pojedyncze wystąpienie serwera gry, na którym nie było graczy. Proces ten zajmuje około 3% czasu procesora na Xeon X3220 (2,4 Ghz), aby dać Ci poczucie, jak drogie jest to urządzenie.

Wielozadaniowość

Innym źródłem przełączania kontekstu mogą być procesy, które nie wykonują wywołań systemowych, ale muszą zostać przeniesione z danego procesora, aby zrobić miejsce dla innych procesów.

Dobrym sposobem na wizualizację tego jest cpuburn . cpuburn sam nie wykonuje żadnych wywołań systemowych, tylko iteruje swoją własną pamięć, więc nie powinien powodować przełączania kontekstu.

Weź bezczynną maszynę, uruchom vmstat, a następnie uruchom burnMMX (lub inny test z pakietu cpuburn) dla każdego rdzenia procesora, jaki ma system. Do tego czasu powinieneś mieć pełne wykorzystanie systemu, ale prawie żadne zwiększone przełączanie kontekstu. Następnie spróbuj uruchomić jeszcze kilka procesów. Zobaczysz, że szybkość przełączania kontekstu rośnie, gdy procesy zaczynają konkurować o rdzenie procesora. Ilość przełączeń zależy od współczynnika procesów / rdzenia i rozdzielczości wielozadaniowości twojego jądra.

Dalsza lektura

linfo.org ma ładny opis tego, jakie są przełączniki kontekstu i wywołania systemowe . Wikipedia ma ogólne informacje i niezłą kolekcję linków do wywołań systemowych.

Michael Renner
źródło
1
To było przydatne - dałeś mi świetny pomysł! =)
Kserkses
1
Twoje oświadczenie System calls cause context switches by their very own naturewydaje się nieprawidłowe. Wywołania systemowe powodują zmianę trybu zgodnie z linfo.org/context_switch.html
Nicolas Labrot,
6

mój umiarkowanie obciążony serwer WWW ma około 100-150 przełączników sekundę przez większość czasu z pikami w tysiącach.

Wysokie wskaźniki zmiany kontekstu same w sobie nie stanowią problemu, ale mogą wskazywać drogę do bardziej znaczącego problemu.

edycja: Przełączniki kontekstu są objawem, a nie przyczyną. Co próbujesz uruchomić na serwerze? Jeśli masz komputer wieloprocesorowy, możesz spróbować ustawić powinowactwo procesora dla głównych procesów serwera.

Alternatywnie, jeśli używasz X, spróbuj przejść do trybu konsoli.

edytuj ponownie: przy 16k cs na sekundę, każde procesor uśrednia dwa przełączniki na milisekundę - to połowa do szóstej normalnego przedziału czasu. Czy mógłby prowadzić wiele wątków związanych z IO?

edytuj ponownie publikuj wykresy: Z pewnością wygląda na związane z IO. czy system spędza większość czasu w SYS, gdy przełączniki kontekstu są wysokie?

edytuj jeszcze raz: Wysoka iowait i system na ostatnim wykresie - całkowicie przyćmiewają przestrzeń użytkownika. Masz problemy z IO.
Jakiej karty FC używasz?

edycja: hmmm. Czy jest jakaś szansa na uzyskanie wyników testów dostępu do sieci SAN z bonnie ++ lub dbench w czasie przestoju? Byłbym zainteresowany, aby zobaczyć, czy mają podobne wyniki.

edycja: Zastanawiałem się nad tym przez weekend i widziałem podobne wzorce użycia, gdy Bonnie wykonuje przepustkę „zapisz bajt na raz”. To może tłumaczyć dużą liczbę przełączeń, ponieważ każdy zapis wymagałby osobnego wywołania systemowego.

jay_dubya
źródło
Nadal nie jestem przekonany, że wysoka szybkość przełączania kontekstu nie stanowi problemu, mówię o wysokiej, jak w 4K do 16K, a nie 100-150.
Kserkses
Żaden z naszych serwerów nie obsługuje X. Zgadzam się z tobą w sprawie problemu oczekiwania IO i relacji między tym a CS. Karta HBA nie jest jednak podejrzana, ponieważ używamy tej samej karty na około stu innych serwerach ... Wniosek jest taki, że winię zespoły SAN kiepskie EVA SAN, które desperacko próbują bronić przez cały czas. Należy pamiętać, że wysokie oczekiwanie na operacje we / wy nie zawsze jest powodem do niepokoju, jeśli większość procesów na komputerze jest związana z operacjami we / wy, oczekuje się, że serwer nie będzie miał nic lepszego do zrobienia w przypadku bezczynności.
Kserkses
Po drugie - załączony czwarty wykres pokazuje, że nie jest tak blisko, jak na początku myślałem. Nie do końca zaćmienie. Nadal jednak obwiniam SAN. =)
Kserkses
1

Jestem bardziej skłonny martwić się o stopień zajętości procesora przez stan systemu. Jeśli jest blisko 10% lub więcej, oznacza to, że Twój system operacyjny spędza zbyt dużo czasu na przełączaniu kontekstu. Chociaż przeniesienie niektórych procesów na inną maszynę jest znacznie wolniejsze, zasługuje na to.


źródło
1

Takie rzeczy powodują, że powinieneś starać się utrzymywać podstawowe poziomy wydajności swoich serwerów. W ten sposób możesz porównać nagłe rzeczy z nagranymi w przeszłości.

To powiedziawszy, mam uruchomione serwery (głównie niezbyt zajęte serwery Oracle), które są stabilne wokół 2k z pewnymi szczytami 4k. Dla moich serwerów, to normalne, dla serwerów innych osób, które mogą być o wiele za niskie lub za wysokie.

Jak daleko można cofnąć swoje dane?

Jakie informacje o procesorze możesz nam podać?

wzzrd
źródło
Zdecydowanie zgadzam się z utrzymaniem linii bazowej i mamy dane nagios wracające przez długi czas - problem z tym serwerem polega na tym, że jest to nowa krew - był obecny tylko przez krótki czas. Ponadto działa na nim oprogramowanie dla przedsiębiorstw (czytaj: crap) - Teamsite - tylko po to, by dodać je do listy zmiennych niezdefiniowanych. Nadal wolę sar (preferencje osobiste), więc skonfiguruję go tak, aby zachowywał więcej niż domyślny (2 tygodnie) i sprawdził, jak to działa.
Kserkses
Używanie sar w połączeniu z rrdtool (które wygląda na to, że pochodzą z twoich wykresów) może być łatwym sposobem na przechowywanie twoich danych (lub przynajmniej ich streszczeń) przez długi czas.
wzzrd
0

Nie ma ogólnej zasady. Przełącznik kontekstu to tylko procesor przechodzący od przetwarzania jednego wątku do drugiego. Jeśli uruchomisz wiele procesów (lub kilka wysoce wątkowych), zobaczysz więcej przełączników. Na szczęście nie musisz martwić się o liczbę przełączników kontekstu - koszt jest niewielki i mniej więcej nieunikniony.

Alex J.
źródło
6
W rzeczywistości koszt zmiany kontekstu jest drogi . Jest to nawet najgorsze na maszynach wirtualnych - kilka miesięcy temu przeprowadziliśmy kilka testów, które wykazały, że jedną z największych przyczyn wydajności maszyn wirtualnych było przełączanie kontekstu.
Kserkses
W rzeczywistości w każdym nowoczesnym (wielozadaniowym) systemie operacyjnym minimalizacja przełączania kontekstu jest bardzo znaczącym zadaniem optymalizacji. Czy masz jakieś źródła na poparcie swojego twierdzenia, że ​​koszt jest niewielki?
Kserkses
Przepraszam, czy mówisz o zminimalizowaniu zmiany kontekstu z perspektywy rozwoju systemu operacyjnego? Nie mając nic wspólnego z takim rozwojem, nie mam zdania na temat korzyści zaprojektowania systemu w celu zminimalizowania CS :) Jeśli mówisz o minimalizowaniu przełączników kontekstu na serwerze, problemem jest łagodzenie przełączników kontekstu wprowadzających opóźnienia w innych miejscach. Np. Zmniejszenie liczby procesów na maszynie oznacza, że ​​musisz przenieść te procesy na inną maszynę, co oznacza, że ​​komunikacja odbywa się przez sieć, która jest znacznie wolniejsza!
Alex J
Uważam, że twoja definicja przełączników kontekstu jest błędna; zdarzają się również podczas wykonywania wywołania systemowego, nawet jeśli powraca ono do tego samego wątku. Aplikacje optymalizują to, wykonując różne sztuczki. Na przykład Apache bardzo często otrzymuje czas systemowy; w tym celu wątek wielokrotnie wywołuje czas lokalny i przechowuje wynik we wspólnej pamięci. Pozostałe wątki muszą tylko czytać z pamięci RAM i nie wymagają przy tym przełączania procesów.
niXar