使用 Babeltrace 构建 Perf(用于 Perf 到 CTF 的转换)
Building Perf with Babeltrace (for Perf to CTF Conversion)
我正在尝试使用 TraceCompass 以进一步调查我的系统跟踪。为此,您需要 CTF 格式,并且有两种可能的方法在 Linux 中获取它,afaik:
- 使用 LTTng 进行跟踪并从中使用 CTF 格式
- 使用 'perf data convert' 从 perf.data
创建 CTF 数据
我一直在尝试使用第二个选项,因为第一个选项需要安装跟踪点,而我从 perf 获得的东西对我来说已经足够了。
所以假设我有可用的 perf.data,
正在申请
perf data convert --to-ctf=./ctf
导致:编译时没有版本支持。
深入研究 lwn 的在线资源,我发现如果没有 babeltrace,这种转换是不可用的。为了安装 babeltrace,我尝试了以下方法:
第一个:
sudo apt-get install libbabeltrace-ctf-dev libbabeltrace-ctf1 libbabeltrace1 libbabeltrace-dev python3-babeltrace
没有完全解决以下问题:编译时没有版本支持。
第二个
我尝试从源代码构建 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 联系起来。虽然我还不知道如何使用 babeltrace 支持来编译 perf。我应该从内核模块(下面给出)构建所有内容,还是有解决方法来重新编译或调整我当前的 perf 以支持 babeltrace?
请注意perf/core_ctf_convert是在这个内核模块中实现的:git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git
另请注意,我在 Raspberry Pi 3.
上使用 Raspbian Jessie
提前感谢指导。
干杯,
参考文献:
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/
编辑:已解决
好的,这很棘手。首先,所有功劳都归功于 kernel.org 的 jolsa,他的建议让我解决了这个问题。
从源代码构建 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
安装完成后,使用LD_LIBRARY_PATH env执行perf。即
从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了:)
您需要 构建 perf 与 Babeltrace 链接以获得 perf data convert
支持(AFAIK)。是的,您需要您的内核源代码树来执行此操作(您的确切版本)。
获取 Linux 内核的源代码树。您可能应该使用您的发行版的内核源代码树:这可能包括修改主线项目的补丁。例如,参见 Obtaining the kernel sources for an Ubuntu release using git。
对于主线内核:
git clone https://github.com/torvalds/linux.git
别忘了查看合适的 branch/tag/commit.
确保 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 转换。
我正在尝试使用 TraceCompass 以进一步调查我的系统跟踪。为此,您需要 CTF 格式,并且有两种可能的方法在 Linux 中获取它,afaik:
- 使用 LTTng 进行跟踪并从中使用 CTF 格式
- 使用 'perf data convert' 从 perf.data 创建 CTF 数据
我一直在尝试使用第二个选项,因为第一个选项需要安装跟踪点,而我从 perf 获得的东西对我来说已经足够了。 所以假设我有可用的 perf.data, 正在申请
perf data convert --to-ctf=./ctf
导致:编译时没有版本支持。 深入研究 lwn 的在线资源,我发现如果没有 babeltrace,这种转换是不可用的。为了安装 babeltrace,我尝试了以下方法:
第一个:
sudo apt-get install libbabeltrace-ctf-dev libbabeltrace-ctf1 libbabeltrace1 libbabeltrace-dev python3-babeltrace
没有完全解决以下问题:编译时没有版本支持。
第二个
我尝试从源代码构建 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 联系起来。虽然我还不知道如何使用 babeltrace 支持来编译 perf。我应该从内核模块(下面给出)构建所有内容,还是有解决方法来重新编译或调整我当前的 perf 以支持 babeltrace?
请注意perf/core_ctf_convert是在这个内核模块中实现的:git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git
另请注意,我在 Raspberry Pi 3.
上使用 Raspbian Jessie提前感谢指导。
干杯,
参考文献:
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/
编辑:已解决 好的,这很棘手。首先,所有功劳都归功于 kernel.org 的 jolsa,他的建议让我解决了这个问题。
从源代码构建 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
安装完成后,使用LD_LIBRARY_PATH env执行perf。即
从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了:)
您需要 构建 perf 与 Babeltrace 链接以获得 perf data convert
支持(AFAIK)。是的,您需要您的内核源代码树来执行此操作(您的确切版本)。
获取 Linux 内核的源代码树。您可能应该使用您的发行版的内核源代码树:这可能包括修改主线项目的补丁。例如,参见 Obtaining the kernel sources for an Ubuntu release using git。
对于主线内核:
git clone https://github.com/torvalds/linux.git
别忘了查看合适的 branch/tag/commit.
确保 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 转换。