Server IP : 172.67.216.182 / Your IP : 172.70.188.161 Web Server : Apache System : Linux krdc-ubuntu-s-2vcpu-4gb-amd-blr1-01.localdomain 5.15.0-142-generic #152-Ubuntu SMP Mon May 19 10:54:31 UTC 2025 x86_64 User : www ( 1000) PHP Version : 7.4.33 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /usr/lib/modules/5.15.0-142-generic/build/tools/perf/ |
Upload File : |
#!/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