perf tools: Delete perf-with-kcore.sh script
Bugzilla: https://bugzilla.redhat.com/2123231 upstream ======== commit 52cc78424458f936de0dbf7dd279f9e7d47ab96c Author: Adrian Hunter <adrian.hunter@intel.com> Date: Wed Apr 27 17:19:46 2022 +0300 description =========== It has been obsolete since the introduction of the 'perf record --kcore' option. Conflicts: ========== Not backported 5c8166419acf ("kbuild: replace $(if A,A,B) with $(or A,B)") caused different context. Signed-off-by: Michael Petlan <mpetlan@redhat.com>
This commit is contained in:
parent
c927ed1b41
commit
6da6e51e39
|
@ -19,7 +19,6 @@ perf.data
|
||||||
perf.data.old
|
perf.data.old
|
||||||
output.svg
|
output.svg
|
||||||
perf-archive
|
perf-archive
|
||||||
perf-with-kcore
|
|
||||||
perf-iostat
|
perf-iostat
|
||||||
tags
|
tags
|
||||||
TAGS
|
TAGS
|
||||||
|
|
|
@ -286,7 +286,6 @@ PYRF_OBJS =
|
||||||
SCRIPT_SH =
|
SCRIPT_SH =
|
||||||
|
|
||||||
SCRIPT_SH += perf-archive.sh
|
SCRIPT_SH += perf-archive.sh
|
||||||
SCRIPT_SH += perf-with-kcore.sh
|
|
||||||
SCRIPT_SH += perf-iostat.sh
|
SCRIPT_SH += perf-iostat.sh
|
||||||
|
|
||||||
grep-libs = $(filter -l%,$(1))
|
grep-libs = $(filter -l%,$(1))
|
||||||
|
@ -973,8 +972,6 @@ ifndef NO_LIBBPF
|
||||||
endif
|
endif
|
||||||
$(call QUIET_INSTALL, perf-archive) \
|
$(call QUIET_INSTALL, perf-archive) \
|
||||||
$(INSTALL) $(OUTPUT)perf-archive -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
|
$(INSTALL) $(OUTPUT)perf-archive -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
|
||||||
$(call QUIET_INSTALL, perf-with-kcore) \
|
|
||||||
$(INSTALL) $(OUTPUT)perf-with-kcore -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
|
|
||||||
$(call QUIET_INSTALL, perf-iostat) \
|
$(call QUIET_INSTALL, perf-iostat) \
|
||||||
$(INSTALL) $(OUTPUT)perf-iostat -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
|
$(INSTALL) $(OUTPUT)perf-iostat -t '$(DESTDIR_SQ)$(perfexec_instdir_SQ)'
|
||||||
ifndef NO_LIBAUDIT
|
ifndef NO_LIBAUDIT
|
||||||
|
@ -1088,7 +1085,7 @@ bpf-skel-clean:
|
||||||
$(call QUIET_CLEAN, bpf-skel) $(RM) -r $(SKEL_TMP_OUT) $(SKELETONS)
|
$(call QUIET_CLEAN, bpf-skel) $(RM) -r $(SKEL_TMP_OUT) $(SKELETONS)
|
||||||
|
|
||||||
clean:: $(LIBTRACEEVENT)-clean $(LIBAPI)-clean $(LIBBPF)-clean $(LIBSUBCMD)-clean $(LIBPERF)-clean fixdep-clean python-clean bpf-skel-clean
|
clean:: $(LIBTRACEEVENT)-clean $(LIBAPI)-clean $(LIBBPF)-clean $(LIBSUBCMD)-clean $(LIBPERF)-clean fixdep-clean python-clean bpf-skel-clean
|
||||||
$(call QUIET_CLEAN, core-objs) $(RM) $(LIBPERF_A) $(OUTPUT)perf-archive $(OUTPUT)perf-with-kcore $(OUTPUT)perf-iostat $(LANG_BINDINGS)
|
$(call QUIET_CLEAN, core-objs) $(RM) $(LIBPERF_A) $(OUTPUT)perf-archive $(OUTPUT)perf-iostat $(LANG_BINDINGS)
|
||||||
$(Q)find $(if $(OUTPUT),$(OUTPUT),.) -name '*.o' -delete -o -name '\.*.cmd' -delete -o -name '\.*.d' -delete
|
$(Q)find $(if $(OUTPUT),$(OUTPUT),.) -name '*.o' -delete -o -name '\.*.cmd' -delete -o -name '\.*.d' -delete
|
||||||
$(Q)$(RM) $(OUTPUT).config-detected
|
$(Q)$(RM) $(OUTPUT).config-detected
|
||||||
$(call QUIET_CLEAN, core-progs) $(RM) $(ALL_PROGRAMS) perf perf-read-vdso32 perf-read-vdsox32 $(OUTPUT)pmu-events/jevents $(OUTPUT)$(LIBJVMTI).so
|
$(call QUIET_CLEAN, core-progs) $(RM) $(ALL_PROGRAMS) perf perf-read-vdso32 perf-read-vdsox32 $(OUTPUT)pmu-events/jevents $(OUTPUT)$(LIBJVMTI).so
|
||||||
|
|
|
@ -1,247 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# SPDX-License-Identifier: GPL-2.0-only
|
|
||||||
# perf-with-kcore: use perf with a copy of kcore
|
|
||||||
# Copyright (c) 2014, Intel Corporation.
|
|
||||||
#
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
usage()
|
|
||||||
{
|
|
||||||
echo "Usage: perf-with-kcore <perf sub-command> <perf.data directory> [<sub-command options> [ -- <workload>]]" >&2
|
|
||||||
echo " <perf sub-command> can be record, script, report or inject" >&2
|
|
||||||
echo " or: perf-with-kcore fix_buildid_cache_permissions" >&2
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
find_perf()
|
|
||||||
{
|
|
||||||
if [ -n "$PERF" ] ; then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
PERF=`which perf || true`
|
|
||||||
if [ -z "$PERF" ] ; then
|
|
||||||
echo "Failed to find perf" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
if [ ! -x "$PERF" ] ; then
|
|
||||||
echo "Failed to find perf" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "Using $PERF"
|
|
||||||
"$PERF" version
|
|
||||||
}
|
|
||||||
|
|
||||||
copy_kcore()
|
|
||||||
{
|
|
||||||
echo "Copying kcore"
|
|
||||||
|
|
||||||
if [ $EUID -eq 0 ] ; then
|
|
||||||
SUDO=""
|
|
||||||
else
|
|
||||||
SUDO="sudo"
|
|
||||||
fi
|
|
||||||
|
|
||||||
rm -f perf.data.junk
|
|
||||||
("$PERF" record -o perf.data.junk "${PERF_OPTIONS[@]}" -- sleep 60) >/dev/null 2>/dev/null &
|
|
||||||
PERF_PID=$!
|
|
||||||
|
|
||||||
# Need to make sure that perf has started
|
|
||||||
sleep 1
|
|
||||||
|
|
||||||
KCORE=$(($SUDO "$PERF" buildid-cache -v -f -k /proc/kcore >/dev/null) 2>&1)
|
|
||||||
case "$KCORE" in
|
|
||||||
"kcore added to build-id cache directory "*)
|
|
||||||
KCORE_DIR=${KCORE#"kcore added to build-id cache directory "}
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
kill $PERF_PID
|
|
||||||
wait >/dev/null 2>/dev/null || true
|
|
||||||
rm perf.data.junk
|
|
||||||
echo "$KCORE"
|
|
||||||
echo "Failed to find kcore" >&2
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
kill $PERF_PID
|
|
||||||
wait >/dev/null 2>/dev/null || true
|
|
||||||
rm perf.data.junk
|
|
||||||
|
|
||||||
$SUDO cp -a "$KCORE_DIR" "$(pwd)/$PERF_DATA_DIR"
|
|
||||||
$SUDO rm -f "$KCORE_DIR/kcore"
|
|
||||||
$SUDO rm -f "$KCORE_DIR/kallsyms"
|
|
||||||
$SUDO rm -f "$KCORE_DIR/modules"
|
|
||||||
$SUDO rmdir "$KCORE_DIR"
|
|
||||||
|
|
||||||
KCORE_DIR_BASENAME=$(basename "$KCORE_DIR")
|
|
||||||
KCORE_DIR="$(pwd)/$PERF_DATA_DIR/$KCORE_DIR_BASENAME"
|
|
||||||
|
|
||||||
$SUDO chown $UID "$KCORE_DIR"
|
|
||||||
$SUDO chown $UID "$KCORE_DIR/kcore"
|
|
||||||
$SUDO chown $UID "$KCORE_DIR/kallsyms"
|
|
||||||
$SUDO chown $UID "$KCORE_DIR/modules"
|
|
||||||
|
|
||||||
$SUDO chgrp $GROUPS "$KCORE_DIR"
|
|
||||||
$SUDO chgrp $GROUPS "$KCORE_DIR/kcore"
|
|
||||||
$SUDO chgrp $GROUPS "$KCORE_DIR/kallsyms"
|
|
||||||
$SUDO chgrp $GROUPS "$KCORE_DIR/modules"
|
|
||||||
|
|
||||||
ln -s "$KCORE_DIR_BASENAME" "$PERF_DATA_DIR/kcore_dir"
|
|
||||||
}
|
|
||||||
|
|
||||||
fix_buildid_cache_permissions()
|
|
||||||
{
|
|
||||||
if [ $EUID -ne 0 ] ; then
|
|
||||||
echo "This script must be run as root via sudo " >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$SUDO_USER" ] ; then
|
|
||||||
echo "This script must be run via sudo" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
USER_HOME=$(bash <<< "echo ~$SUDO_USER")
|
|
||||||
|
|
||||||
echo "Fixing buildid cache permissions"
|
|
||||||
|
|
||||||
find "$USER_HOME/.debug" -xdev -type d ! -user "$SUDO_USER" -ls -exec chown "$SUDO_USER" \{\} \;
|
|
||||||
find "$USER_HOME/.debug" -xdev -type f -links 1 ! -user "$SUDO_USER" -ls -exec chown "$SUDO_USER" \{\} \;
|
|
||||||
find "$USER_HOME/.debug" -xdev -type l ! -user "$SUDO_USER" -ls -exec chown -h "$SUDO_USER" \{\} \;
|
|
||||||
|
|
||||||
if [ -n "$SUDO_GID" ] ; then
|
|
||||||
find "$USER_HOME/.debug" -xdev -type d ! -group "$SUDO_GID" -ls -exec chgrp "$SUDO_GID" \{\} \;
|
|
||||||
find "$USER_HOME/.debug" -xdev -type f -links 1 ! -group "$SUDO_GID" -ls -exec chgrp "$SUDO_GID" \{\} \;
|
|
||||||
find "$USER_HOME/.debug" -xdev -type l ! -group "$SUDO_GID" -ls -exec chgrp -h "$SUDO_GID" \{\} \;
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Done"
|
|
||||||
}
|
|
||||||
|
|
||||||
check_buildid_cache_permissions()
|
|
||||||
{
|
|
||||||
if [ $EUID -eq 0 ] ; then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
PERMISSIONS_OK+=$(find "$HOME/.debug" -xdev -type d ! -user "$USER" -print -quit)
|
|
||||||
PERMISSIONS_OK+=$(find "$HOME/.debug" -xdev -type f -links 1 ! -user "$USER" -print -quit)
|
|
||||||
PERMISSIONS_OK+=$(find "$HOME/.debug" -xdev -type l ! -user "$USER" -print -quit)
|
|
||||||
|
|
||||||
PERMISSIONS_OK+=$(find "$HOME/.debug" -xdev -type d ! -group "$GROUPS" -print -quit)
|
|
||||||
PERMISSIONS_OK+=$(find "$HOME/.debug" -xdev -type f -links 1 ! -group "$GROUPS" -print -quit)
|
|
||||||
PERMISSIONS_OK+=$(find "$HOME/.debug" -xdev -type l ! -group "$GROUPS" -print -quit)
|
|
||||||
|
|
||||||
if [ -n "$PERMISSIONS_OK" ] ; then
|
|
||||||
echo "*** WARNING *** buildid cache permissions may need fixing" >&2
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
record()
|
|
||||||
{
|
|
||||||
echo "Recording"
|
|
||||||
|
|
||||||
if [ $EUID -ne 0 ] ; then
|
|
||||||
|
|
||||||
if [ "$(cat /proc/sys/kernel/kptr_restrict)" -ne 0 ] ; then
|
|
||||||
echo "*** WARNING *** /proc/sys/kernel/kptr_restrict prevents access to kernel addresses" >&2
|
|
||||||
fi
|
|
||||||
|
|
||||||
if echo "${PERF_OPTIONS[@]}" | grep -q ' -a \|^-a \| -a$\|^-a$\| --all-cpus \|^--all-cpus \| --all-cpus$\|^--all-cpus$' ; then
|
|
||||||
echo "*** WARNING *** system-wide tracing without root access will not be able to read all necessary information from /proc" >&2
|
|
||||||
fi
|
|
||||||
|
|
||||||
if echo "${PERF_OPTIONS[@]}" | grep -q 'intel_pt\|intel_bts\| -I\|^-I' ; then
|
|
||||||
if [ "$(cat /proc/sys/kernel/perf_event_paranoid)" -gt -1 ] ; then
|
|
||||||
echo "*** WARNING *** /proc/sys/kernel/perf_event_paranoid restricts buffer size and tracepoint (sched_switch) use" >&2
|
|
||||||
fi
|
|
||||||
|
|
||||||
if echo "${PERF_OPTIONS[@]}" | grep -q ' --per-thread \|^--per-thread \| --per-thread$\|^--per-thread$' ; then
|
|
||||||
true
|
|
||||||
elif echo "${PERF_OPTIONS[@]}" | grep -q ' -t \|^-t \| -t$\|^-t$' ; then
|
|
||||||
true
|
|
||||||
elif [ ! -r /sys/kernel/debug -o ! -x /sys/kernel/debug ] ; then
|
|
||||||
echo "*** WARNING *** /sys/kernel/debug permissions prevent tracepoint (sched_switch) use" >&2
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$1" ] ; then
|
|
||||||
echo "Workload is required for recording" >&2
|
|
||||||
usage
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -e "$PERF_DATA_DIR" ] ; then
|
|
||||||
echo "'$PERF_DATA_DIR' exists" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
find_perf
|
|
||||||
|
|
||||||
mkdir "$PERF_DATA_DIR"
|
|
||||||
|
|
||||||
echo "$PERF record -o $PERF_DATA_DIR/perf.data ${PERF_OPTIONS[@]} -- $@"
|
|
||||||
"$PERF" record -o "$PERF_DATA_DIR/perf.data" "${PERF_OPTIONS[@]}" -- "$@" || true
|
|
||||||
|
|
||||||
if rmdir "$PERF_DATA_DIR" > /dev/null 2>/dev/null ; then
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
copy_kcore
|
|
||||||
|
|
||||||
echo "Done"
|
|
||||||
}
|
|
||||||
|
|
||||||
subcommand()
|
|
||||||
{
|
|
||||||
find_perf
|
|
||||||
check_buildid_cache_permissions
|
|
||||||
echo "$PERF $PERF_SUB_COMMAND -i $PERF_DATA_DIR/perf.data --kallsyms=$PERF_DATA_DIR/kcore_dir/kallsyms $@"
|
|
||||||
"$PERF" $PERF_SUB_COMMAND -i "$PERF_DATA_DIR/perf.data" "--kallsyms=$PERF_DATA_DIR/kcore_dir/kallsyms" "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
if [ "$1" = "fix_buildid_cache_permissions" ] ; then
|
|
||||||
fix_buildid_cache_permissions
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
PERF_SUB_COMMAND=$1
|
|
||||||
PERF_DATA_DIR=$2
|
|
||||||
shift || true
|
|
||||||
shift || true
|
|
||||||
|
|
||||||
if [ -z "$PERF_SUB_COMMAND" ] ; then
|
|
||||||
usage
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$PERF_DATA_DIR" ] ; then
|
|
||||||
usage
|
|
||||||
fi
|
|
||||||
|
|
||||||
case "$PERF_SUB_COMMAND" in
|
|
||||||
"record")
|
|
||||||
while [ "$1" != "--" ] ; do
|
|
||||||
PERF_OPTIONS+=("$1")
|
|
||||||
shift || break
|
|
||||||
done
|
|
||||||
if [ "$1" != "--" ] ; then
|
|
||||||
echo "Options and workload are required for recording" >&2
|
|
||||||
usage
|
|
||||||
fi
|
|
||||||
shift
|
|
||||||
record "$@"
|
|
||||||
;;
|
|
||||||
"script")
|
|
||||||
subcommand "$@"
|
|
||||||
;;
|
|
||||||
"report")
|
|
||||||
subcommand "$@"
|
|
||||||
;;
|
|
||||||
"inject")
|
|
||||||
subcommand "$@"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
usage
|
|
||||||
;;
|
|
||||||
esac
|
|
Loading…
Reference in New Issue