5

我正在尝试使用 TraceCompass 来进一步调查我的系统跟踪。为此,您需要 CTF 格式,并且有两种可能的方式在 Linux 中获取它,afaik:

  1. 使用 LTTng 进行跟踪并从中使用 CTF 格式
  2. 使用“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。我应该从内核模块(如下所示)构建所有内容,还是有一种解决方法来重新编译或调整我当前的性能并支持 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 环境执行 perf。IE

在 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 :)

追踪指南针

4

1 回答 1

1

您需要构建与 Babeltrace 链接的性能以获得perf data convert支持 (AFAIK)。是的,您需要您的内核源代码树来执行此操作(您的确切版本)。

  1. 获取 Linux 内核的源代码树。您可能应该使用您的发行版的内核源代码树:这可能包括修改主线项目的补丁。例如,请参阅使用 git 获取 Ubuntu 版本的内核源代码

    对于主线内核:

    git clone https://github.com/torvalds/linux.git
    

    不要忘记检查适当的分支/标签/提交。

  2. 确保将 Babeltrace安装到某个位置,使用您的发行版的包(apt-get等)或从源代码构建它(./configure; make; make install)。

  3. tools/perf内核源代码树的根目录中,运行:

    LIBBABELTRACE=1 make
    

    如果系统目录下没有安装 Babeltrace,使用LIBBABELTRACE_DIR指定自定义 Babeltrace 安装目录:

    LIBBABELTRACE=1 LIBBABELTRACE_DIR=/opt/libbabeltrace/ make
    

tools/perf/perf是您的 perf 实用程序,专为您的特定内核构建,支持 CTF 转换。

于 2017-04-24T04:15:32.850 回答