プロセスがどのくらいのコンテキスト切り替えを行ったかを確認する方法は?

プロセスがどのくらいのコンテキスト切り替えを行ったかを確認する方法は?

私のプロセスが多くのコンテキスト切り替えを実行していることを確認したいと思います。また、ワークグループの運用がコンテキストコンバージョン数にどのように影響するかを理解したいと思います。

答え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 );

しきい値セクションの前後に 2 回呼び出して、use.ru_nivcsw の値が増加することを確認します。

答え4

sar -wたとえば、1秒あたりのコンテキストコンバージョンの合計数を報告するために使用でき、sar -w 1 31秒ごとに合計3回報告します。

関連情報