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 count
bajtów, zaczynając od adresu pamięci wskazanego przez *buf
deskryptor pliku fd
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.