Como aumentar a precisão do ftrace em microssegundos?

3

Estou tentando gerar arquivos do FTrace dentro de um ambiente Android, usando:

root@adroid:# echo 1 > /sys/kernel/debug/tracing/events/sched/sched_switch/enable
root@adroid:# echo 1 > /sys/kernel/debug/tracing/tracing_on
root@adroid:# cat /sys/kernel/debug/tracing/trace > mytracefile.txt
root@adroid:# echo 0 > /sys/kernel/debug/tracing/tracing_on
root@adroid:# echo 0 > /sys/kernel/debug/tracing/events/sched/sched_switch/enable

O problema é que, em mytracefile.txt , a precisão do registro de data e hora está em milissegundos:

          <idle>-0     [000] d.h7 14186.690000: sched_wakeup: comm=tfm_b6bcf800 pid=1714 prio=35 success=1 target_cpu=000
          <idle>-0     [000] d..3 14186.690000: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=tfm_b6bcf800 next_pid=1714 next_prio=35
    tfm_b6bcf800-1714  [000] d..3 14186.690000: sched_switch: prev_comm=tfm_b6bcf800 prev_pid=1714 prev_prio=35 prev_state=D|W ==> next_comm=swapper/0 next_pid=0 next_prio=120
          <idle>-0     [001] d.h3 14186.690000: sched_wakeup: comm=Player Aud Mixe pid=146 prio=35 success=1 target_cpu=001
          <idle>-0     [001] d..3 14186.690000: sched_switch: prev_comm=swapper/1 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=Player Aud Mixe next_pid=146 next_prio=35
 Player Aud Mixe-146   [001] d..3 14186.690000: sched_switch: prev_comm=Player Aud Mixe prev_pid=146 prev_prio=35 prev_state=D ==> next_comm=swapper/1 next_pid=0 next_prio=120
          <idle>-0     [001] d.h3 14186.690000: sched_wakeup: comm=Player Aud Mixe pid=146 prio=35 success=1 target_cpu=001
          <idle>-0     [001] d..3 14186.690000: sched_switch: prev_comm=swapper/1 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=Player Aud Mixe next_pid=146 next_prio=35
 Player Aud Mixe-146   [001] d..3 14186.690000: sched_switch: prev_comm=Player Aud Mixe prev_pid=146 prev_prio=35 prev_state=S ==> next_comm=swapper/1 next_pid=0 next_prio=120
          <idle>-0     [001] d.h3 14186.700000: sched_wakeup: comm=Player Aud Mixe pid=146 prio=35 success=1 target_cpu=001
          <idle>-0     [001] d..3 14186.700000: sched_switch: prev_comm=swapper/1 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=Player Aud Mixe next_pid=146 next_prio=35

Normalmente, deve ser da ordem de microssegundos, como 14186.691234 em vez de apenas 14186.690000.

Já testei todas as outras opções de trace_clock que tenho (local, global e contador), mas os resultados são sempre os mesmos. Alterar esse parâmetro não altera nada no arquivo de saída.

Segui cuidadosamente a documentação do FTrace mas eu não sei mais o que mudar na configuração.

Pesquisando pela internet, eu só consegui encontrar este relatório de bug, mas ele não foi resolvido: link

Algum conselho?

Existem módulos adicionais no kernel que eu tenho que instalar?

  • Versão do Android: 4.2.2
  • Versão do Kernel Linux: 3.4.7
A saída

dmesg também está mostrando a precisão de milissegundos:

<4>[   38.130000] oom_adj 0 => oom_score_adj 0
<4>[   38.130000] oom_adj 1 => oom_score_adj 58
<4>[   38.140000] oom_adj 2 => oom_score_adj 117
<4>[   38.140000] oom_adj 4 => oom_score_adj 235
<4>[   38.150000] oom_adj 9 => oom_score_adj 529
<4>[   38.150000] oom_adj 15 => oom_score_adj 1000

Atualização:

Estamos construindo um analisador gráfico para arquivos do android ftrace (incluindo rastreamentos atrace ). É por isso que é muito importante ter o máximo de precisão possível.

Usando o mesmo dispositivo e outras ferramentas de software, podemos ter precisão de microssegundos com sucesso.

Então, agora estamos planejando editar o código-fonte ftrace.c para modificar a maneira como o timestamp é gerado para este:

static inline uint64_t my_custom_jiffies(void)
{
         struct timeval tv;
         gettimeofday(&tv, NULL);
         return tv.tv_sec*1000000 + tv.tv_usec;
}

Pessoalmente, acho que não é uma solução / arquitetura / implementação muito boa, porque isso deve ser possível sem modificar o código fonte ... mas é a única ideia que temos neste momento.

O que você acha?

    
por Rodmar Conde 11.06.2013 / 13:22

1 resposta

0

Aparentemente, esse problema não tem nada a ver com o Android. Nós testamos com nossa versão Linux personalizada e ainda temos o mesmo problema: FTrace produz precisão de milissegundos, enquanto outras ferramentas são capazes de produzir precisão de microssegundos. Talvez um problema de versão do módulo FTrace?

Atenciosamente,

    
por 25.06.2013 / 13:06