Как увеличить точность ftrace до микросекунд?

Я пытаюсь генерировать файлы FTrace в среде Android, используя:

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 

Проблема в том, что в mytracefile.txt точность mytracefile.txt времени находится в миллисекундах:

  • Как скомпилировать компилятор C с нуля, а затем скомпилировать Unix / Linux с нуля
  • Не удается загрузить из-за отсутствия внешнего диска
  • Как получить пуленепробиваемый Wi-Fi?
  • Создание программы в корзине
  • Случайно удалили разделы на моем загрузочном диске. Система все еще работает. Как я могу выздороветь?
  • Как повернуть микрофонный разъем в гнездо для наушников?
  •   <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 

    Обычно он должен быть порядка микросекунд, например 14186.691234, а не только 14186.690000.

    Я уже тестировал все остальные параметры trace_clock , которые у меня есть (локальный, глобальный и счетчик), но результаты всегда одинаковы. Изменение этого параметра ничего не меняет в выходном файле.

    Я внимательно следил за документацией FTrace, но я не знаю, что еще нужно изменить в конфигурации.

    Поиск через Интернет я только смог найти этот отчет об ошибке, но он не был решен: http://lists.linaro.org/pipermail/linaro-dev/2011-February/002720.html

    Любой совет?

    Есть ли в ядре дополнительные модули, которые я должен установить?

    • Версия Android: 4.2.2
    • Kernel Linux Версия: 3.4.7

    Выход dmesg также показывает точность в миллисекундах:

     <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 

    Обновить:

    Мы создаем графический парсер для файлов андроида ftrace (включая трассировки atrace ). Вот почему очень важно иметь как можно больше точности.

    Используя одно и то же устройство и другие программные средства, мы можем добиться точности микросекунд.

    Итак, теперь мы планируем отредактировать исходный код ftrace.c, чтобы изменить способ создания временной метки:

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

    Я лично считаю, что это не очень хорошее решение / архитектура / реализация, потому что это должно быть возможно без изменения исходного кода … но это единственная идея, которую мы имеем в данный момент.

    Как вы думаете ?

  • Статус добавления Reiser4 в ядро ​​Linux
  • Когда вы будете использовать pivot_root через switch_root?
  • Имя переменной массива Bash eval
  • Почему мой пакет был установлен в / opt?
  • Как изменить линию консоли консоли Linux (на некоторое время)
  • тройник и grep одновременно (оболочка)?
  • One Solution collect form web for “Как увеличить точность ftrace до микросекунд?”

    Видимо, этот вопрос не имеет ничего общего с Android. Мы протестировали нашу пользовательскую версию Linux, и у нас есть та же проблема: FTrace производит миллисекундную точность, а другие инструменты способны обеспечить точность микросекунд. Возможно, проблема версии модуля FTrace?

    С Уважением,

    Linux и Unix - лучшая ОС в мире.