用Babeltrace建筑Perf(Perf到CTF转换)

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

  • 使用LTTng来追踪和使用CTF格式
  • 使用'perf数据转换'为了从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?

    请注意,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
    

    安装完成后,perf将与LD_LIBRARY_PATH env一起执行。 即

    从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


    你需要建立perf与Babeltrace链接以获得性能perf data convert支持(AFAIK)。 是的,你需要你的内核源代码树来做到这一点(你的确切版本)。

  • 获取你的Linux内核的源代码树。 您应该使用发行版的内核源代码树:这可能包含修改主线项目的修补程序。 例如,请参阅使用git获取Ubuntu发行版的内核源代码。

    对于主线内核:

    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转换支持的特定内核而构建。

    链接地址: http://www.djcxy.com/p/80041.html

    上一篇: Building Perf with Babeltrace (for Perf to CTF Conversion)

    下一篇: Perf Tool Linux