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_64
maszynie.
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.
źródło
Odpowiedzi:
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:
Mówi to w zasadzie do jądra, aby przejęło operację od procesu, przechodzi do
count
bajtów, zaczynając od adresu pamięci wskazanego przez*buf
deskryptor plikufd
bieżą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.
źródło
System calls cause context switches by their very own nature
wydaje się nieprawidłowe. Wywołania systemowe powodują zmianę trybu zgodnie z linfo.org/context_switch.htmlmó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.
źródło
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
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ć?
źródło
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.
źródło