[Crash-utility] Extensions: Dump log buffer of Intel Processor Trace

Dave Anderson anderson at redhat.com
Tue Jan 5 16:17:51 UTC 2016



----- Original Message -----
> Hi Dave,
> 
> The attached files are extension module to dump log buffer of Intel
> Processor Trace from vmcore. Please consider placing this in the
> extensions page.
> 
> [Overview of PT]
> PT(Processor Trace) is a new feature of Intel CPU "Broadwell", it
> captures information about program execution flow.[1]
> 
> Once Intel PT is enabled, the events which change program flow, like
> branch instructions, exceptions, interruptions, traps and so on are
> logged in the memory. This is very useful for debugging because we can
> know the detailed behavior of software.
> 
> 
> [About extension]
> This extension retrieves log buff of PT from vmcore and saves it as a
> file. 'ptdump' command can be used once this extension is loaded.
> 
> crash> extend extensions/ptdump.so
> ./extensions/ptdump.so: shared object loaded
> crash> ptdump output_dir
> [0] buffer dump: dump.0
> [0] packet decode: decode.0
> [1] buffer dump: dump.1
> [1] packet decode: decode.1
> (snipped)
> 
> In this case, output_dir directory is created, and then dump.N and
> decode.N files are created in the directory for each cpus(N is cpu
> number).
> 
> dump.N:   raw data of PT
> decode.N: result of PT packet decoder
> 
> dump.N is binary data and it is not human readable. decode.N is
> generated by fastdecode[2], which is PT packet dumper created by Andi
> Kleen. It's useful for checking what kinds of packets are included in
> dump.N. I'll update extension using PT library(libipt[3]) to generate
> more useful file for investigation.
> 
> [Build extension]
> To build the module from the top-level crash-<version> directory, enter:
> 
> $ tar xvf ptdump-1.0.0.tar.gz
> $ mv ptdump-1.0.0/* extensions
> $ make extensions
> 
> [1] https://software.intel.com/en-us/blogs/2013/09/18/processor-tracing
> [2] https://github.com/andikleen/simple-pt
> [3] https://github.com/01org/processor-trace
> 
> Thanks,
> Takao Indoh

Hi Takao,

I certainly can add this to the extensions subdirectory.  However
I do have a couple suggestions with respect to the build procedure:
  
  $ tar xvf $dl/ptdump-1.0.0.tar.gz
  ptdump-1.0.0/
  ptdump-1.0.0/fastdecode.c
  ptdump-1.0.0/map.c
  ptdump-1.0.0/map.h
  ptdump-1.0.0/ptdump.c
  ptdump-1.0.0/ptdump.mk
  $ mv ptdump-1.0.0/* extensions
  $ make extensions
  gcc -Wall -g -nostartfiles -shared -rdynamic -o fastdecode.so fastdecode.c -fPIC -DX86_64 -DLZO -DSNAPPY -DGDB_7_6
  gcc  -DLZO -DSNAPPY -Wall -I.. -fPIC -DX86_64 -c -o ptdump.o ptdump.c
  gcc  -DLZO -DSNAPPY -Wall -I.. -fPIC -DX86_64 -c -o fastdecode.o fastdecode.c
  gcc  -DLZO -DSNAPPY -Wall -I.. -fPIC -DX86_64 -c -o map.o map.c
  gcc -Wall -g -shared -rdynamic -o map.so map.c -fPIC -DX86_64 -DLZO -DSNAPPY -DGDB_7_6
  $ ls -ltr extensions/*.so
  -rwxrwxr-x 1 anderson anderson  17613 Jan  5 10:51 extensions/echo.so*
  -rwxrwxr-x 1 anderson anderson 851633 Jan  5 10:51 extensions/eppic.so*
  -rwxrwxr-x 1 anderson anderson 100465 Jan  5 10:51 extensions/trace.so*
  -rwxrwxr-x 1 anderson anderson 112373 Jan  5 10:51 extensions/dminfo.so*
  -rwxrwxr-x 1 anderson anderson  42358 Jan  5 10:51 extensions/snap.so*
  -rwxrwxr-x 1 anderson anderson  15539 Jan  5 10:57 extensions/fastdecode.so*
  -rwxrwxr-x 1 anderson anderson  21136 Jan  5 10:57 extensions/ptdump.so*
  -rwxrwxr-x 1 anderson anderson  14880 Jan  5 10:57 extensions/map.so*
  $

The build procedure shows the creation of the "map.so" and "fastdecode.so"
shared objects, but does not show the creation of "ptdump.so", which is the
only object that actually gets loaded into a crash session, correct?
That build line gets hidden because of the "@if" clause:

        @if [ $(ARCH) = "UNSUPPORTED"  ]; then \
                echo "ptdump: architecture not supported"; \
        else \
                gcc $(CFLAGS) $(TARGET_CFLAGS) $(COMMON_CFLAGS) -nostartfiles -shared -rdynamic -o $@ $^ ; \
        fi;

Can you fix that so that a user can actually see the build of ptdump.so?

Also, unlike the other extension modules, the ptdump files and build 
procedure clutter up the extensions subdirectory.  Since you do
not have a single ptdump.mk and ptdump.c file, would it be possible 
for you to do the same kind of thing that the "eppic" module does, 
where there would be an extensions/ptdump.mk file, which would reference
the sources in a "ptdump" subdirectory where all of the files can be 
cleanly kept in one place?

Thanks,
  Dave








More information about the Crash-utility mailing list