ftrace: вывод через GPIO

#linux-kernel #trace #function-call #raspberry-pi4 #ftrace

#linux-ядро #трассировка #вызов функции #raspberry-pi4 #ftrace

Вопрос:

Я провожу некоторые исследования, и мне нужно собрать все вызовы функций ядра в течение определенного промежутка времени, например, 60 секунд. Я использую Raspberry Pi 4B. Я попытался использовать трассировщик функций ftrace и прочитать trace_pipe

 echo function > current_tracer
echo 1 > tracing_on
cat trace_pipe > /home/pi/trace/test.txt
  

Этот метод кажется слишком медленным, и слишком много данных теряется из-за переполненного буфера: приблизительно 50-60 миллионов точек данных теряются, и я получаю только около 3 миллионов точек данных. Так что это не очень хорошая статистика.

Я также пытался использовать trace-cmd :

 trace-cmd record -p function sleep 60
  

При trace-cmd потере около 20 миллионов точек данных, что намного лучше, но все же недостаточно хорошо для построения хорошей статистики. Кроме того, файл, который я получаю, выполняя

 trace-cmd report > /home/pi/trace/test_trace-cmd.txt
  

составляет около 5-6 Гб и занимает несколько минут для записи. У меня нет намерения уменьшать этот файл (я предполагаю, что это невозможно). Но я просто не могу ждать так долго.
Я также беспокоюсь о том, чтобы создавать слишком много накладных расходов для системы, сохраняя такие большие файлы трассировки. Так ли это?

Мне интересно, можно ли направить вывод trace_pipe (или, возможно, какого-либо другого файла трассировки) на некоторый вывод ввода-вывода, чтобы я мог подключить к этому выводу какой-нибудь логический анализатор и считывать поток данных с помощью какого-либо другого устройства? Тогда не будет необходимости сохранять файл трассировки на самой raspberry. Я также надеюсь, что смогу уменьшить объем потерянных данных.

Комментарии:

1. Запишите трассировку как двоичную, чтобы уменьшить размер.

2. @stark с trace-cmd трассировкой сохраняется в двоичном формате внутри trace.dat и преобразуется в ASCII путем выполнения trace-cmd report . Так что на самом деле это изначально в двоичном формате. Но это, к сожалению, не решает проблему с потерей данных.

3. Вам нужно использовать аппаратный отладчик (Lauterbach) или один встроенный в процессор (Intel PT для процессоров Intel и Coresight для ARM) с подключением к USB, например.