Eu sei que essa pergunta é bem antiga (16 de fevereiro), mas aqui há uma resposta caso isso ajude alguém. O problema é que você digitou '-F 999' indicando que deseja amostrar os eventos com uma frequência de 999 vezes por segundo. Para eventos 'trace', você geralmente não quer fazer amostragem. Por exemplo, quando seleciono sched: sched_switch, quero ver todas as alternâncias de contexto. Se você inserir -F 999, receberá uma amostra dos interruptores de contexto ... Se você olhar para a saída do seu 'perf record' cmd com algo como:
perf script --verbose -I --header -i perf.dat -F comm,pid,tid,cpu,time,period,event,trace,ip,sym,dso > perf.txt
você veria que o "período" (o número entre o registro de data e hora e o nome do evento) não seria (geralmente) == 1.
Se você usar um cmd de 'perf record' como abaixo, você verá um período de 1 na saída 'perf script' como:
Binder:695_5 695/2077 [000] 16231.700440: 1 sched:sched_switch: prev_comm=Binder:695_5 prev_pid=2077 prev_prio=120 prev_state=S ==> next_comm=kworker/u16:17 next_pid=7665 next_prio=120
Uma explicação longa, mas basicamente: não faça isso (onde 'isso' é '-F 999').
Se você acabou de fazer algo como:
perf record -a -g -e sched:sched_switch -e sched:sched_blocked_reason -e sched:sched_stat_sleep -e sched:sched_stat_wait sleep 5
então a saída mostraria cada mudança de contexto com a pilha de chamadas para cada evento. E você pode precisar fazer:
echo 1 > /proc/sys/kernel/sched_schedstats
para obter os eventos sched_stat.