Создание Perf с помощью Babeltrace (для преобразования Perf в CTF)
Я пытаюсь использовать TraceCompass для дальнейшего исследования моей системной трассировки. Для этого вам нужен формат CTF, и есть два возможных способа получить его в Linux, afaik:
- Использование LTTng для трассировки и использование формата CTF из этого
- Использование 'perf data convert' для создания данных CTF из perf.data
Я пытался использовать второй вариант, так как первый требует установки точек трассировки, и то, что я получил от perf, мне достаточно просто. Итак, при условии, что у меня есть мои perf.data доступны, применяя
perf data convert --to-ctf=./ctf
В результате: Поддержка версий не скомпилирована. Копаясь в онлайн-ресурсы lwn, я обнаружил, что это преобразование недоступно без babeltrace. Для установки babeltrace я попробовал следующие методы:
1-й:
sudo apt-get install libbabeltrace-ctf-dev libbabeltrace-ctf1 libbabeltrace1 libbabeltrace-dev python3-babeltrace
что не совсем решило проблему: нет поддержки скомпилированной версии.
2-й
Я пытался построить babeltrace из источника. Я выкопал и нашел все его зависимости заранее:
sudo apt-get install dh-autoreconf bison libdw-dev libelf-dev flex uuid-dev libpopt-dev
git clone git://git.efficios.com/babeltrace.git
cd babeltrace
./bootstrap
sudo ./configure --prefix=/opt/libbabeltrace LDFLAGS=-L/usr/local/lib
sudo make -j4 prefix=/opt/libbabeltrace
sudo make install prefix=/opt/libbabeltrace
Потом попробовал,
LD_LIBRARY_PATH=/opt/libbabeltrace/lib perf data convert --to-ctf=./ctf
Что также привело к ошибке: не поддерживается версия.
В общем, сейчас я думаю, что проблема в том, чтобы связать babeltrace с perf. Хотя я пока не знаю, как скомпилировать perf с поддержкой babeltrace. Должен ли я собрать все из модулей ядра (приведенных ниже) или есть обходной путь, чтобы перекомпилировать или адаптировать мой текущий перф с поддержкой babeltrace?
Обратите внимание, что perf / core_ctf_convert реализован в этом модуле ядра: git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git
Также обратите внимание, что я использую Raspbian Jessie на Raspberry Pi 3.
Руководство ценится заранее.
Ура,
Рекомендации:
https://lwn.net/Articles/634333/
http://tracingsummit.org/w/images/9/98/TracingSummit2014-Perf-CTF.pdf
https://patchwork.kernel.org/patch/5883821/
https://patchwork.kernel.org/patch/5858601/
РЕДАКТИРОВАТЬ: РЕШЕНО Ладно, это было сложно. Во-первых, все кредиты отправляются на jolsa с kernel.org, который с его предложениями заставил меня понять это.
После того, как libbabeltrace собран из исходного кода, делается следующее:
Установлены некоторые зависимости (некоторые могут и не понадобиться, это то, что я установил для выполнения большинства функций трассировки, доступных для Raspbian. К сожалению, bfd недоступен, afaik)
sudo apt-get install libnewt-dev binutils-arm-none-eabi libcrypto++-dev libunwind-dev systemtap-sdt-dev libssl-dev libperl-dev libiberty-dev
Затем,
sudo git clone git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git
cd linux/tools/perf
sudo git checkout perf/core
sudo LIBBABELTRACE=1 LIBBABELTRACE_DIR=/opt/libbabeltrace/ make
sudo LIBBABELTRACE=1 LIBBABELTRACE_DIR=/opt/libbabeltrace/ make install
После того, как установка завершена, perf выполняется с окружением LD_LIBRARY_PATH. т.е.
Из каталога, в котором находится perf.data, вызовите следующее, предполагая, что недавно созданный perf находится в / home / user / linux / tools / perf:
sudo LD_LIBRARY_PATH=/opt/libbabeltrace/lib ./home/user/linux/tools/perf/perf data convert --to-ctf=./ctf
И тогда CTF может быть импортирован в TraceCompass:)
1 ответ
Вам нужно построить перф, связанный с Babeltrace для perf data convert
поддержка (AFAIK). Да, для этого вам нужно дерево исходного кода ядра (ваша точная версия).
Получите исходное дерево вашего ядра Linux. Вы, вероятно, должны использовать исходное дерево ядра вашего дистрибутива: это могут быть патчи, которые изменяют основной проект Например, смотрите Получение исходников ядра для выпуска Ubuntu с помощью git.
Для основного ядра:
git clone https://github.com/torvalds/linux.git
Не забудьте проверить соответствующую ветку / тег / коммит.
Убедитесь, что Babeltrace установлен в каком-либо месте, используя пакет вашего дистрибутива (
apt-get
и т. д.) или путем создания его из источника (./configure; make; make install
).В
tools/perf
из корня дерева исходного кода ядра запустите:LIBBABELTRACE=1 make
Если Babeltrace не установлен в системном каталоге, используйте
LIBBABELTRACE_DIR
чтобы указать пользовательский каталог установки Babeltrace:LIBBABELTRACE=1 LIBBABELTRACE_DIR=/opt/libbabeltrace/ make
tools/perf/perf
ваша утилита perf, созданная для вашего конкретного ядра с поддержкой преобразования CTF.