Como ver quantas alternâncias de contexto um processo faz?
25
Quero ver se meu processo faz muitas alternâncias de contexto. Também quero ver como a manipulação de grupos de tarefas afeta o número de alternâncias de contexto.
Eu tentei o comando watch acima, mas a saída é apenas 1 (para troca de contexto voluntária e involuntária). Minha versão do kernal do linux é 2.6.39-400.214.4.el6uek.x86_64. A saída depende da versão do Linux?
Andy Dufresne
Cole sua saída aqui, por favor.
É o mesmo que mencionado na resposta - "watch -n.5 grep ctxt / proc / 5647 / status"
Andy Dufresne
Eu tenho que usar procfs, mas em kernels antigos não existem valores dentro de /proc/.../status. alguma sugestão ?
Massimo
12
pidstat (1) - Relatar estatísticas para tarefas do Linux. De acordo com man pidstatisso é tão fácil quantopidstat -w …
Eu executei o comando "watch -n0.5 pidstat -w -I -p 5876", mas a saída é 0 (para ambos os cswch / s nvcswch / s). Este comando funciona para a versão linux - 2.6.39-400.214.4.el6uek.x86_64?
Andy Dufresne
Este comando deve funcionar bem. Mas cuidado que você está usando errado, porque quando você não especifica intervalo do relatório “tarefas estatísticas devem ser relatados para o tempo decorrido desde a inicialização do sistema (boot).” Semelhante a vmstat, iostate outros. Portanto, se as estatísticas atuais forem necessárias, em vez de watchsimplesmente executá-las com um intervalo de um segundo.
poige
Se eu não assistir, como vejo os números sendo atualizados continuamente? Executando o comando "pidstat -w -I -p 5876 5", o comando aguarda 5 segundos e depois imprime a saída (novamente como 0). Ele não roda continuamente como eu esperava (sei que isso está em contradição com o que a página de manual do pidstat diz - linux.die.net/man/1/pidstat ). Meu sistema operacional é o Oracle Linux Server 6.4.
Andy Dufresne 21/03
O `pidstat -w -l -p SELF 1` funciona para você?
21415 poige
4
Para obter um registro de toda uma execução do processo, você pode usar o timeutilitário GNU (não confunda com o bashembutido) com a -vopção Aqui está um exemplo com linhas de saída não relacionadas removidas:
$ `which time`-v ls
a.out exception_finder.cpp log.txt
Command being timed:"ls"...Voluntary context switches:1Involuntary context switches:2...Exit status:0
Isso não funciona "pronto para uso" em muitos sistemas, mesmo que o comando esteja disponível. Você pode incluir na sua resposta como habilitar a coleta de dados sar?
Anthon
2
Escreva o seguinte script em file ( ctx.sh). com ctx.sh <core>você vai ver todos os processos em execução em um determinado núcleo e mudando interruptores nv ao contexto será destacado. Olhando para isso, você poderá identificar quais são os processos concorrentes para o núcleo.
Veja man getrusage, que permitirá consultar o número de alternâncias de contexto voluntárias e involuntárias.
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 */};
Você pode solicitar que ele relate informações por thread, como este:
/proc/[pid]/status
Respostas:
Você pode visualizar informações sobre as mudanças de contexto do processo
/proc/<pid>/status
.Para ver esses números atualizando continuamente, execute
Para obter apenas os números, execute
fonte
pidstat (1) - Relatar estatísticas para tarefas do Linux. De acordo com
man pidstat
isso é tão fácil quantopidstat -w …
fonte
vmstat
,iostat
e outros. Portanto, se as estatísticas atuais forem necessárias, em vez dewatch
simplesmente executá-las com um intervalo de um segundo.Para obter um registro de toda uma execução do processo, você pode usar o
time
utilitário GNU (não confunda com obash
embutido) com a-v
opção Aqui está um exemplo com linhas de saída não relacionadas removidas:fonte
Você pode usar
sar -w
. Por exemplo,sar -w 1 3
relata o número total de alternâncias de contexto por segundo a cada 1 segundo, no total, 3 vezes.fonte
sar
?Escreva o seguinte script em file (
ctx.sh
). comctx.sh <core>
você vai ver todos os processos em execução em um determinado núcleo e mudando interruptores nv ao contexto será destacado. Olhando para isso, você poderá identificar quais são os processos concorrentes para o núcleo.fonte
Veja man getrusage, que permitirá consultar o número de alternâncias de contexto voluntárias e involuntárias.
Você pode solicitar que ele relate informações por thread, como este:
Basta chamá-lo duas vezes, antes e depois da seção crítica e ver se o valor de use.ru_nivcsw aumentou ou não.
fonte
fonte