Eu não tenho uma resposta, mas você pode encontrar uma entre as ferramentas, exemplos e recursos escritos ou listados por
Brendan Gregg no comando perf
e no kernel do Linux ftrace e debugfs.
No meu Raspberry Pi, essas ferramentas estavam no pacote perf-tools-unstable
. O comando perf
estava realmente em /usr/bin/perf_3.16
.
De interesse pode ser esta discussão benchmark benchmark por Benoit Sigoure, e o lat_ctx teste do antigo pacote lmbench .
Eles podem precisar de algum trabalho para executar no Pi, por exemplo, com tsuna/contextswitch
eu editei timectxswws.c
get_iterations()
para while (iterations * ws_pages * 4096UL < 4294967295UL) {
e removi -march=native -mno-avx
do Makefile
.
Usando perf record
por 10 segundos no Pi sobre o ssh enquanto fazendo while sleep .1;do echo hi;done
em outro ssh:
sudo timeout -10 perf_3.16 record -e context-switches -a
sudo perf_3.16 script -f time,pid,comm | less
dá saída assim
sleep 29341 2703976.560357:
swapper 0 2703976.562160:
kworker/u8:2 29163 2703976.564901:
swapper 0 2703976.565737:
echo 29342 2703976.565768:
migration/3 19 2703976.567549:
sleep 29343 2703976.570212:
kworker/0:0 28906 2703976.588613:
rcu_preempt 7 2703976.609261:
sleep 29343 2703976.670674:
bash 29066 2703976.671654:
echo 29344 2703976.675065:
sshd 29065 2703976.675454:
swapper 0 2703976.677757:
presumivelmente mostrando quando um evento de troca de contexto aconteceu, para qual processo.