使用Babeltrace构建Perf(用于Perf到CTF转换)

时间:2017-04-23 22:02:49

标签: linux linux-kernel tracing perf babeltrace

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

  1. 使用LTTng跟踪并使用其中的CTF格式
  2. 使用'perf data convert'从perf.data
  3. 创建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环境执行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:)

    TraceCompass

1 个答案:

答案 0 :(得分:1)

您需要构建与Babeltrace链接的perf git clone https://github.com/torvalds/linux.git 支持(AFAIK)。是的,您需要使用内核源代码树(确切版本)。

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

    对于主线内核:

    apt-get

    不要忘记查看相应的分支/标记/提交。

  2. 确保将Babeltrace 安装到某个位置,使用您的发布包(./configure; make; make install等)或从源代码构建(tools/perf

  3. 在内核源代码树根目录的LIBBABELTRACE=1 make 中,运行:

    LIBBABELTRACE_DIR

    如果未在系统目录中安装Babeltrace,请使用LIBBABELTRACE=1 LIBBABELTRACE_DIR=/opt/libbabeltrace/ make 指定自定义Babeltrace安装目录:

    tools/perf/perf
  4. select name from participant where name not in ( select case when g.pointsp1 < g.pointsp2 then p2 when g.pointsp1 > g.pointsp2 then p1 end as winner from game g where g.pointsp1 != g.pointsp2 ) and name in ( select p1 from game union all select p2 from game ) 是您的perf实用程序,专为具有CTF转换支持的特定内核而构建。