lkml.org 
[lkml]   [2011]   [Dec]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4/4] perf script: Add script to collect and display IBS samples
    Date
    This patch adds a script to collect and display IBS samples.
    There are the following options:

    perf script ibs [ibs_op|ibs_fetch] [-c period] <command>

    Examples for usage:

    perf script ibs ibs_op <command>
    perf script ibs ibs_fetch <command>
    perf script record ibs ibs_op -c 500000 <command>
    perf script report ibs
    perf script record ibs ibs_op -c 500000 <command> | perf script report ibs

    Signed-off-by: Robert Richter <robert.richter@amd.com>
    ---
    tools/perf/scripts/perl/bin/ibs-record | 23 +++++++++++++++
    tools/perf/scripts/perl/bin/ibs-report | 6 ++++
    tools/perf/scripts/perl/ibs.pl | 47 ++++++++++++++++++++++++++++++++
    3 files changed, 76 insertions(+), 0 deletions(-)
    create mode 100644 tools/perf/scripts/perl/bin/ibs-record
    create mode 100644 tools/perf/scripts/perl/bin/ibs-report
    create mode 100644 tools/perf/scripts/perl/ibs.pl

    diff --git a/tools/perf/scripts/perl/bin/ibs-record b/tools/perf/scripts/perl/bin/ibs-record
    new file mode 100644
    index 0000000..dc5f4d2
    --- /dev/null
    +++ b/tools/perf/scripts/perl/bin/ibs-record
    @@ -0,0 +1,23 @@
    +#! /bin/bash
    +
    +while [ "${1+defined}" ]; do
    + case $1 in
    + ibs_op|ibs_fetch)
    + EVENT=$1
    + shift
    + break
    + ;;
    + -*)
    + REC_OPT+=($1)
    + shift
    + ;;
    + *)
    + echo $0 "$@" >&2
    + echo "Invalid option: $1" >&2
    + echo "perf script ibs [ibs_op|ibs_fetch] [-c <period>]" >&2
    + exit 1
    + ;;
    + esac
    +done
    +
    +perf record -e ${EVENT:-ibs_op}:r0 -c 100000 -R -a "${REC_OPT[@]}" "$@"
    diff --git a/tools/perf/scripts/perl/bin/ibs-report b/tools/perf/scripts/perl/bin/ibs-report
    new file mode 100644
    index 0000000..f44e69d
    --- /dev/null
    +++ b/tools/perf/scripts/perl/bin/ibs-report
    @@ -0,0 +1,6 @@
    +#! /bin/bash
    +
    +# description: collect and display AMD IBS samples
    +# args: [ibs_op|ibs_fetch] [-c period]
    +
    +perf script -s "$PERF_EXEC_PATH"/scripts/perl/ibs.pl "$@"
    diff --git a/tools/perf/scripts/perl/ibs.pl b/tools/perf/scripts/perl/ibs.pl
    new file mode 100644
    index 0000000..caee32f
    --- /dev/null
    +++ b/tools/perf/scripts/perl/ibs.pl
    @@ -0,0 +1,47 @@
    +#
    +# ibs.pl - perf script for AMD Instruction Based Sampling
    +#
    +# Copyright (C) 2011 Advanced Micro Devices, Inc., Robert Richter
    +#
    +# For licencing details see kernel-base/COPYING
    +#
    +# description: collect and display AMD IBS samples
    +# args: [ibs_op|ibs_fetch] [-c period]
    +#
    +# examples:
    +#
    +# perf script ibs ibs_op <command>
    +# perf script ibs ibs_fetch <command>
    +# perf script record ibs ibs_op -c 500000 <command>
    +# perf script report ibs
    +# perf script record ibs ibs_op -c 500000 <command> | perf script report ibs
    +#
    +
    +# Packed byte string args of process_event():
    +#
    +# $event: union perf_event util/event.h
    +# $attr: struct perf_event_attr linux/perf_event.h
    +# $sample: struct perf_sample util/event.h
    +# $raw_data: perf_sample->raw_data util/event.h
    +
    +sub process_event
    +{
    + my ($event, $attr, $sample, $raw_data) = @_;
    +
    + my ($type) = (unpack("LSS", $event))[0];
    + my ($sample_type) = (unpack("LLQQQQQLLQQ", $attr))[4];
    + my ($cpu, $raw_size) = (unpack("QLLQQQQQLL", $sample))[8, 9];
    + my ($caps, @ibs_data) = unpack("LQ*", $raw_data);
    +
    + return if (!$raw_size); # no raw data
    +
    + if (scalar(@ibs_data) == 3) {
    + printf("IBS_FETCH sample on cpu%d\tIBS0: 0x%016x IBS1: 0x%016x IBS2:0x%016x\n",
    + $cpu, @ibs_data);
    + } else {
    + printf("IBS_OP sample on cpu%d\t" .
    + "\t IBS0: 0x%016x IBS1: 0x%016x IBS2: 0x%016x\n" .
    + "\tIBS3: 0x%016x IBS4: 0x%016x IBS5: 0x%016x IBS6: 0x%016x\n",
    + cpu, @ibs_data);
    + }
    +}
    --
    1.7.7



    \
     
     \ /
      Last update: 2011-12-15 18:29    [W:0.027 / U:1.324 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site