mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Steven Rostedt <rostedt@goodmis.org>
To: "Bean Huo (beanhuo)" <beanhuo@micron.com>
Cc: "mingo@redhat.com" <mingo@redhat.com>,
	"will.deacon@arm.com" <will.deacon@arm.com>,
	"catalin.marinas@arm.com" <catalin.marinas@arm.com>,
	"rfi@lists.rocketboards.org" <rfi@lists.rocketboards.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"linux-arm-kernel@lists.infradead.org" 
	<linux-arm-kernel@lists.infradead.org>,
	"Zoltan Szubbocsev (zszubbocsev)" <zszubbocsev@micron.com>
Subject: Re: ftrace function_graph causes system crash
Date: Tue, 20 Sep 2016 10:07:16 -0400	[thread overview]
Message-ID: <20160920100716.131d3647@gandalf.local.home> (raw)
In-Reply-To: <7d0e88fff8e64591ac31be3adbbf763c@SIWEX5A.sing.micron.com>

[-- Attachment #1: Type: text/plain, Size: 2382 bytes --]

On Tue, 20 Sep 2016 13:10:39 +0000
"Bean Huo (beanhuo)" <beanhuo@micron.com> wrote:

> Hi, all 
> I just use ftrace to do some latency study, found that function_graph can not
> Work, as long as enable it, will cause kernel panic. I searched this online.
> Found that there are also some cause the same as mine. I am a newer of ftrace. 
> I want to know who know what root cause? Here is some partial log:
> 
> 

Can you do a function bisect to find what function this is.

This script is used to help find functions that are being traced by
function tracer or function graph tracing that causes the machine to
reboot, hang, or crash. Here's the steps to take.

First, determine if function graph is working with a single function:

# cd /sys/kernel/debug/tracing
# echo schedule > set_ftrace_filter
# echo function_graph > current_tracer

If this works, then we know that something is being traced that
shouldn't be.

# echo nop > current_tracer

# cat available_filter_functions > ~/full-file
# ftrace-bisect ~/full-file ~/test-file ~/non-test-file
# cat ~/test-file > set_ftrace_filter

*** Note *** this will take several minutes. Setting multiple functions
is an O(n^2) operation, and we are dealing with thousands of functions.
So go have  coffee, talk with your coworkers, read facebook. And
eventually, this operation will end.

# echo function_graph > current_tracer

If it crashes, we know that ~/test-file has a bad function.

   Reboot back to test kernel.

   # cd /sys/kernel/debug/tracing
   # mv ~/test-file ~/full-file

If it didn't crash.

   # echo nop > current_tracer
   # mv ~/non-test-file ~/full-file

Get rid of the other test file from previous run (or save them off
somewhere.
# rm -f ~/test-file ~/non-test-file

And start again:

# ftrace-bisect ~/full-file ~/test-file ~/non-test-file

The good thing is, because this cuts the number of functions in
~/test-file by half, the cat of it into set_ftrace_filter takes half as
long each iteration, so don't talk so much at the water cooler the
second time.

Eventually, if you did this correctly, you will get down to the problem
function, and all we need to do is to notrace it.

The way to figure out if the problem function is bad, just do:

# echo <problem-function> > set_ftrace_notrace
# echo > set_ftrace_filter
# echo function_graph > current_tracer

And if it doesn't crash, we are done.

-- Steve

[-- Attachment #2: ftrace-bisect --]
[-- Type: application/octet-stream, Size: 1487 bytes --]

#!/bin/bash
#
# Here's how to use this:
#
# Start off by doing:
#
#   cat /sys/kernel/debug/tracing/available_filter_functions > full-file
#   ftrace-bisect full-file test-file non-test-file
#   cat test-file > /sys/kernel/debug/tracing/set_ftrace_filter
#
#    [ this may take several minutes to complete, be patient ]
#
#   echo function > /sys/kernel/debug/tracing/current_tracer
#
# If it crashes/locks-up whatever, then reboot and do:
#
#   mv test-file new-file
#
# Else, if it did not crash, then do:
#
#   mv non-test-file  new-file
#
# Then you can continue with:
#
#   ftrace-bisect new-file test-file non-test-file
#   cat test-file > /sys/kernel/debug/tracing/set_ftrace_filter
#     [ again, this can take time to run ]
#   echo function > /sys/kernel/debug/tracing/current_tracer
#
# And repeat.
#


if [ $# -ne 3 ]; then
  echo 'usage: ftrace-bisect full-file test-file  non-test-file'
  exit
fi

full=$1
test=$2
nontest=$3

x=`cat $full | wc -l`
if [ $x -eq 1 ]; then
	echo "There's only one function left, must be the bad one"
	cat $full
	exit 0
fi

let x=$x/2
let y=$x+1

if [ ! -f $full ]; then
	echo "$full does not exist"
	exit 1
fi

if [ -f $test ]; then
	echo -n "$test exists, delete it? [y/N]"
	read a
	if [ "$a" != "y" -a "$a" != "Y" ]; then
		exit 1
	fi
fi

if [ -f $nontest ]; then
	echo -n "$nontest exists, delete it? [y/N]"
	read a
	if [ "$a" != "y" -a "$a" != "Y" ]; then
		exit 1
	fi
fi

sed -ne "1,${x}p" $full > $test
sed -ne "$y,\$p" $full > $nontest

  reply	other threads:[~2016-09-20 14:07 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-20 13:10 Bean Huo (beanhuo)
2016-09-20 14:07 ` Steven Rostedt [this message]
2016-09-21  7:50   ` Bean Huo (beanhuo)
2016-09-21  9:13     ` Jisheng Zhang
2016-09-21 18:17       ` Steven Rostedt
2016-09-22  8:36         ` Bean Huo (beanhuo)
2016-09-21 13:45     ` Steven Rostedt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160920100716.131d3647@gandalf.local.home \
    --to=rostedt@goodmis.org \
    --cc=beanhuo@micron.com \
    --cc=catalin.marinas@arm.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=rfi@lists.rocketboards.org \
    --cc=will.deacon@arm.com \
    --cc=zszubbocsev@micron.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®