Jak sprawdzić, ile przełączników kontekstu dokonuje proces?
25
Chcę sprawdzić, czy mój proces dokonuje wielu przełączeń kontekstu. Chcę również zobaczyć, jak manipulowanie grupami zadań wpływa na liczbę przełączników kontekstu.
Próbowałem powyższego polecenia watch, ale wynik to tylko 1 (dla dobrowolnego i mimowolnego przełączania kontekstu). Moja wersja jądra Linuksa to 2.6.39-400.214.4.el6uek.x86_64. Czy wyjście zależy od wersji Linux?
Andy Dufresne,
Proszę wklej tutaj swój wynik.
Jest taki sam, jak wspomniany w odpowiedzi - „watch -n.5 grep ctxt / proc / 5647 / status”
Andy Dufresne
Muszę używać procfs, ale na starych jądrach nie ma wartości w /proc/.../status. jakieś sugestie ?
Massimo
12
pidstat (1) - Raportuj statystyki dla zadań Linux. Według man pidstattego jest tak proste jak tylkopidstat -w …
Wykonałem polecenie „watch -n0.5 pidstat -w -I -p 5876”, ale wynikiem jest 0 (dla obu cswch / s nvcswch / s). Czy to polecenie działa dla wersji linux - 2.6.39-400.214.4.el6uek.x86_64?
Andy Dufresne,
To polecenie powinno działać dobrze. Ale uwaga używasz go źle, bo jeśli nie określić interwał raportu „zadania statystyczne są przekazywane w czasie od startu systemu (boot).” Podobny do vmstat, iostati innych. Więc jeśli potrzebne są aktualne statystyki zamiast watchpo prostu uruchom je z jednosekundowym interwałem.
poige
Jeśli nie oglądam, to jak mogę stale aktualizować liczby? Wykonanie polecenia „pidstat -w -I -p 5876 5” polecenie czeka tylko 5 sekund, a następnie wypisuje dane wyjściowe (ponownie jako 0). Nie działa tak, jak się spodziewałem (wiem, że jest to sprzeczne z tym, co mówi strona podręcznika pidstat - linux.die.net/man/1/pidstat ). Mój system operacyjny to Oracle Linux Server 6.4.
Andy Dufresne
Czy `pidstat -w -l -p SELF 1` działa dla Ciebie?
poige
4
Aby uzyskać zapis całego przebiegu procesu, możesz użyć timenarzędzia GNU (nie mylić go z bashwbudowanym) z -vopcją. Oto przykład z usuniętymi niepowiązanymi wierszami danych wyjściowych:
$ `which time`-v ls
a.out exception_finder.cpp log.txtCommand being timed:"ls"...Voluntary context switches:1Involuntary context switches:2...Exit status:0
To nie działa „po wyjęciu z pudełka” w wielu systemach, nawet jeśli polecenie jest dostępne. Czy możesz podać w swojej odpowiedzi, jak włączyć gromadzenie danych sar?
Anthon
2
Napisz następujący skrypt do file ( ctx.sh). z ctx.sh <core>zobaczysz wszystkie procesy uruchomione na danym rdzeniu i zmienia przełączniki nv-context zostaną podświetlone. Patrząc na to, będziesz w stanie określić, które są konkurującymi procesami dla rdzenia.
Zobacz man getrusage, który pozwoli ci zapytać o liczbę dobrowolnych i mimowolnych zmian kontekstu.
struct rusage {
struct timeval ru_utime;/* user CPU time used */
struct timeval ru_stime;/* system CPU time used */
long ru_maxrss;/* maximum resident set size */
long ru_ixrss;/* integral shared memory size */
long ru_idrss;/* integral unshared data size */
long ru_isrss;/* integral unshared stack size */
long ru_minflt;/* page reclaims (soft page faults)*/
long ru_majflt;/* page faults (hard page faults)*/
long ru_nswap;/* swaps */
long ru_inblock;/* block input operations */
long ru_oublock;/* block output operations */
long ru_msgsnd;/* IPC messages sent */
long ru_msgrcv;/* IPC messages received */
long ru_nsignals;/* signals received */
long ru_nvcsw;/* voluntary context switches */
long ru_nivcsw;/* involuntary context switches */};
Możesz powiedzieć mu, aby zgłaszał informacje dotyczące wątków, na przykład:
/proc/[pid]/status
Odpowiedzi:
Możesz wyświetlić informacje o przełącznikach kontekstu procesu
/proc/<pid>/status
.Aby zobaczyć ciągłe aktualizowanie tych liczb, uruchom
Aby uzyskać tylko liczby, uruchom
źródło
pidstat (1) - Raportuj statystyki dla zadań Linux. Według
man pidstat
tego jest tak proste jak tylkopidstat -w …
źródło
vmstat
,iostat
i innych. Więc jeśli potrzebne są aktualne statystyki zamiastwatch
po prostu uruchom je z jednosekundowym interwałem.Aby uzyskać zapis całego przebiegu procesu, możesz użyć
time
narzędzia GNU (nie mylić go zbash
wbudowanym) z-v
opcją. Oto przykład z usuniętymi niepowiązanymi wierszami danych wyjściowych:źródło
Możesz użyć
sar -w
,. Na przykładsar -w 1 3
raportuje całkowitą liczbę przełączeń kontekstu na sekundę co 1 sekundę łącznie 3 razy.źródło
sar
?Napisz następujący skrypt do file (
ctx.sh
). zctx.sh <core>
zobaczysz wszystkie procesy uruchomione na danym rdzeniu i zmienia przełączniki nv-context zostaną podświetlone. Patrząc na to, będziesz w stanie określić, które są konkurującymi procesami dla rdzenia.źródło
Zobacz man getrusage, który pozwoli ci zapytać o liczbę dobrowolnych i mimowolnych zmian kontekstu.
Możesz powiedzieć mu, aby zgłaszał informacje dotyczące wątków, na przykład:
Po prostu wywołaj go dwa razy, przed sekcją krytyczną i po niej, i sprawdź, czy wartość use.ru_nivcsw wzrosła, czy nie.
źródło
źródło