1 #!/bin/bash 1 #!/bin/bash 2 # SPDX-License-Identifier: GPL-2.0 2 # SPDX-License-Identifier: GPL-2.0 3 # perf archive 3 # perf archive 4 # Arnaldo Carvalho de Melo <acme@redhat.com> 4 # Arnaldo Carvalho de Melo <acme@redhat.com> 5 5 6 PERF_DATA=perf.data 6 PERF_DATA=perf.data 7 PERF_SYMBOLS=perf.symbols !! 7 if [ $# -ne 0 ] ; then 8 PERF_ALL=perf.all !! 8 PERF_DATA=$1 9 ALL=0 << 10 UNPACK=0 << 11 << 12 while [ $# -gt 0 ] ; do << 13 if [ $1 == "--all" ]; then << 14 ALL=1 << 15 shift << 16 elif [ $1 == "--unpack" ]; then << 17 UNPACK=1 << 18 shift << 19 else << 20 PERF_DATA=$1 << 21 UNPACK_TAR=$1 << 22 shift << 23 fi << 24 done << 25 << 26 if [ $UNPACK -eq 1 ]; then << 27 if [ ! -z "$UNPACK_TAR" ]; then << 28 if [ ! -e "$UNPACK_TAR" ]; the << 29 echo "Provided file $U << 30 exit 1 << 31 fi << 32 TARGET="$UNPACK_TAR" << 33 else << 34 TARGET=`find . -regex "\./perf << 35 TARGET_NUM=`echo -n "$TARGET" << 36 << 37 if [ -z "$TARGET" ] || [ $TARG << 38 echo -e "Error: $TARGE << 39 echo "Provide the requ << 40 exit 1 << 41 else << 42 echo "Found target fil << 43 fi << 44 fi << 45 << 46 if [[ "$TARGET" =~ (\./)?$PERF_ALL.*.t << 47 TAR_CONTENTS=`tar tvf "$TARGET << 48 VALID_TAR=`echo "$TAR_CONTENTS << 49 if [ $VALID_TAR -ne 1 ]; then << 50 echo "Error: $TARGET f << 51 exit 1 << 52 fi << 53 << 54 INTERSECT=`comm -12 <(ls) <(ec << 55 if [ ! -z "$INTERSECT" ]; then << 56 echo "File(s) ${INTERS << 57 while true; do << 58 read -p 'Do yo << 59 case $yn in << 60 [Yy]* << 61 [Nn]* << 62 * ) ec << 63 esac << 64 done << 65 fi << 66 << 67 # unzip the perf.data file in << 68 tar xvf $TARGET && tar xvf $PE << 69 << 70 else << 71 tar xvf $TARGET -C ~/.debug << 72 fi << 73 exit 0 << 74 fi 9 fi 75 10 76 # 11 # 77 # PERF_BUILDID_DIR environment variable set by 12 # PERF_BUILDID_DIR environment variable set by perf 78 # path to buildid directory, default to $HOME/ 13 # path to buildid directory, default to $HOME/.debug 79 # 14 # 80 if [ -z $PERF_BUILDID_DIR ]; then 15 if [ -z $PERF_BUILDID_DIR ]; then 81 PERF_BUILDID_DIR=~/.debug/ 16 PERF_BUILDID_DIR=~/.debug/ 82 else 17 else 83 # append / to make substitutions work 18 # append / to make substitutions work 84 PERF_BUILDID_DIR=$PERF_BUILDID_DIR/ 19 PERF_BUILDID_DIR=$PERF_BUILDID_DIR/ 85 fi 20 fi 86 21 87 BUILDIDS=$(mktemp /tmp/perf-archive-buildids.X 22 BUILDIDS=$(mktemp /tmp/perf-archive-buildids.XXXXXX) 88 23 89 perf buildid-list -i $PERF_DATA --with-hits | 24 perf buildid-list -i $PERF_DATA --with-hits | grep -v "^ " > $BUILDIDS 90 if [ ! -s $BUILDIDS ] ; then 25 if [ ! -s $BUILDIDS ] ; then 91 echo "perf archive: no build-ids found 26 echo "perf archive: no build-ids found" 92 rm $BUILDIDS || true 27 rm $BUILDIDS || true 93 exit 1 28 exit 1 94 fi 29 fi 95 30 96 MANIFEST=$(mktemp /tmp/perf-archive-manifest.X 31 MANIFEST=$(mktemp /tmp/perf-archive-manifest.XXXXXX) 97 PERF_BUILDID_LINKDIR=$(readlink -f $PERF_BUILD 32 PERF_BUILDID_LINKDIR=$(readlink -f $PERF_BUILDID_DIR)/ 98 33 99 cut -d ' ' -f 1 $BUILDIDS | \ 34 cut -d ' ' -f 1 $BUILDIDS | \ 100 while read build_id ; do 35 while read build_id ; do 101 linkname=$PERF_BUILDID_DIR.build-id/${ 36 linkname=$PERF_BUILDID_DIR.build-id/${build_id:0:2}/${build_id:2} 102 filename=$(readlink -f $linkname) 37 filename=$(readlink -f $linkname) 103 echo ${linkname#$PERF_BUILDID_DIR} >> 38 echo ${linkname#$PERF_BUILDID_DIR} >> $MANIFEST 104 echo ${filename#$PERF_BUILDID_LINKDIR} 39 echo ${filename#$PERF_BUILDID_LINKDIR} >> $MANIFEST 105 done 40 done 106 41 107 if [ $ALL -eq 1 ]; then !! 42 tar cjf $PERF_DATA.tar.bz2 -C $PERF_BUILDID_DIR -T $MANIFEST 108 HOSTNAME=$(hostname) !! 43 rm $MANIFEST $BUILDIDS || true 109 DATE=$(date '+%Y%m%d-%H%M%S') << 110 tar cjf $PERF_SYMBOLS.tar.bz2 -C $PERF << 111 tar cjf $PERF_ALL-$HOSTNAME-$DATE.tar. << 112 rm $PERF_SYMBOLS.tar.bz2 $MANIFEST $BU << 113 else << 114 tar cjf $PERF_DATA.tar.bz2 -C $PERF_BU << 115 rm $MANIFEST $BUILDIDS || true << 116 fi << 117 << 118 echo -e "Now please run:\n" 44 echo -e "Now please run:\n" 119 echo -e "$ perf archive --unpack\n" !! 45 echo -e "$ tar xvf $PERF_DATA.tar.bz2 -C ~/.debug\n" 120 echo "or unpack the tar manually wherever you !! 46 echo "wherever you need to run 'perf report' on." 121 exit 0 47 exit 0
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.