프로세스가 얼마나 많은 컨텍스트 전환을 수행했는지 확인하는 방법은 무엇입니까?

프로세스가 얼마나 많은 컨텍스트 전환을 수행했는지 확인하는 방법은 무엇입니까?

내 프로세스가 많은 컨텍스트 전환을 수행하는지 확인하고 싶습니다. 또한 작업 그룹 운영이 컨텍스트 전환 수에 어떤 영향을 미치는지 이해하고 싶습니다.

답변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회 보고합니다.

관련 정보