내 프로세스가 많은 컨텍스트 전환을 수행하는지 확인하고 싶습니다. 또한 작업 그룹 운영이 컨텍스트 전환 수에 어떤 영향을 미치는지 이해하고 싶습니다.
답변1
에서 프로세스 컨텍스트 스위치에 대한 정보를 볼 수 있습니다 /proc/<pid>/status
.
$ pid=307
$ grep ctxt /proc/$pid/status
voluntary_ctxt_switches: 41
nonvoluntary_ctxt_switches: 16
업데이트된 숫자를 보려면 다음을 실행하세요.
$ # Update twice a second.
$ watch -n.5 grep ctxt /proc/$pid/status
숫자 만 얻으려면 다음을 실행하십시오.
$ grep ctxt /proc/$pid/status | awk '{ print $2 }'
답변2
pidstat(1) - Linux 작업에 대한 통계를 보고합니다. 그에 따르면 man pidstat
아주 간단하다.pidstat -w …
답변3
바라보다남자가 정보를 얻다이를 통해 자발적 및 비자발적 컨텍스트 전환 수를 쿼리할 수 있습니다.
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 */
};
다음과 같이 스레드별 정보를 보고하도록 지시할 수 있습니다.
struct rusage usage;
getrusage( RUSAGE_THREAD, &usage );
임계 섹션 전후에 두 번 호출하여 use.ru_nivcsw 값이 증가하는지 확인하십시오.
답변4
sar -w
예를 들어 초당 총 컨텍스트 전환 수를 보고하는 데 사용할 수 있으며 sar -w 1 3
, 1초마다 총 3회 보고합니다.