#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, например.