public inbox for fstests@vger.kernel.org
 help / color / mirror / Atom feed
From: Qu Wenruo <wqu@suse.com>
To: Dave Chinner <david@fromorbit.com>
Cc: fstests@vger.kernel.org
Subject: Re: [PATCH v2] fstests: add basic ftrace support
Date: Fri, 4 Jun 2021 10:45:52 +0800	[thread overview]
Message-ID: <af48b9a5-9f94-5b57-7115-e802faf50886@suse.com> (raw)
In-Reply-To: <20210604023547.GA2068689@dread.disaster.area>



On 2021/6/4 上午10:35, Dave Chinner wrote:
> On Thu, Jun 03, 2021 at 02:21:13PM +0800, Qu Wenruo wrote:
>> Sometimes developers want trace dump for certain test cases.
>>
>> Normally I just add "trace-cmd" calls in "check", but it would be much
>> better to let fstests to support ftrace dumping.
>>
>> This patchset will add basic ftrace dumping support by:
>>
>> - Clear all buffers before running each test
>> - Start tracing before running each test
>> - End tracing after test finished
>> - Copy the trace to "$seqres.trace" if needed
>>    The condition is either:
>>    * $KEEP_TRACE environment is set to "yes"
>>    * The test case failed
>>
>> Currently we only support the main ftrace buffer, but all supporting
>> functions have support for ftrace instances, for later expansion.
>>
>> Signed-off-by: Qu Wenruo <wqu@suse.com>
>> ---
>> Changelog:
>> v2:
>> - Add explanation in "common/config" for how to use it
>> - Make variables local
>> - Don't create the instance when clearing buffers
>> ---
>>   check         | 12 +++++++-
>>   common/config |  8 +++++
>>   common/ftrace | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++
>>   common/rc     |  1 +
>>   4 files changed, 103 insertions(+), 1 deletion(-)
>>   create mode 100644 common/ftrace
>>
>> diff --git a/check b/check
>> index ba192042..0a09dcf9 100755
>> --- a/check
>> +++ b/check
>> @@ -801,7 +801,7 @@ function run_section()
>>   		fi
>>   
>>   		# really going to try and run this one
>> -		rm -f $seqres.out.bad
>> +		rm -f $seqres.out.bad $seqres.trace
>>   
>>   		# check if we really should run it
>>   		_expunge_test $seqnum
>> @@ -839,6 +839,10 @@ function run_section()
>>   		# to be reported for each test
>>   		(echo 1 > $DEBUGFS_MNT/clear_warn_once) > /dev/null 2>&1
>>   
>> +		# Clear previous trace and start new trace
>> +		_clear_trace_buffers
>> +		_start_trace
> 
> So how does one enable all 500+ xfs tracepoints for this? Or just
> some subset? i.e. how do we pass it a list of events like we do
> trace-cmd?  IOWs, for this to be actually useful as a replacement
> for trace-cmd, it has to be able to replace invocations like this:
> 
> # trace-cmd record -e xfs_i*lock* -e xfs_buf* -e printk -e iomap* ....

That's not a big problem, you can do the same thing just using tracefs 
interface, without invovling trace-cmd at all.

For your above case, you can do the same thing without trace_cmd at all:

# cat ${tracefs}/available_events | grep xfs_i*lock >> \
   ${tracefs}/set_event
# cat ${tracefs}/available_events | grep xfs_buf* >> \
   ${tracefs}/set_event
# cat ${tracefs}/available_events | grep iomap* >> \
   ${tracefs}/set_event
# cat ${tracefs}/available_events | grep printk >> \
   ${tracefs}/set_event

> 
> which is how I use trace-cmd 99.9% of the time I'm debugging fstests
> using tracepoints.

I don't bevelive above commands can be hard to use, although it's indeed 
a little complex than trace-cmd.

> 
> Next: some tests will generate gigabytes of trace data on XFS. I'm
> not joking here

That's exactly why I use custom trace_printk() to filter out certain 
events, and only print what I care.

> - I regularly am looking for single traces in an
> output file that contains tens of millions of events in it. Having
> fstests run with tracing enabled is going to rapidly cause ENOSPC
> problems on test machines, and that's going to cause test harness
> issues...
> 
> Hence I don't think that unilaterally turning on tracing is a good
> idea. I think it should only run if we set a value in the config
> section for the test run. This allows a user to define two identical
> test sections except one has "ENABLE_TRACE=true" in it and the other
> doesn't. Hence they can run:
> 
> # check -s xfs -g auto

And in the expected use case, trace is only used to test certain 
failure, not to do a full test run.
It would only make things miserably slow and make your storage explode.

But we still need to clear/start/end the events for whatever test cases 
that is going to be executed.

> 
> to get a normal, non-traced run done. Then, for all the failures
> reported, run:
> 
> # check -s xfs_trace <trace specification> <failed tests>
> 
> and get those tests run with tracing enabled instead of running
> 
> # trace-cmd record <trace specification> check -s xfs <failed tests>
> 
> Finally, I also don't want fstests perturbing whatever tracing I'm
> doing externally to fstests, so being having it enable tracing only
> when I want it to enable tracing is somewhat important...
> 
>> +#                   NOTE: to dump ftrace buffer one needs to enable ftrace
>> +#                   events or add custom trace_printk() into the fs code.
>> +#                   And since fstest will clear buffer before running one
>> +#                   test case, existing trace-cmd can be interrupted.
> 
> trace_printk is only a small part of the tracing I use with
> trace-cmd. If we can't configure trace event output through this
> interface, then it's really not a replacement for using trace-cmd...

I mean, if you can use trace-cmd, I see now reason you can't pack your 
trace events into a small script to enable it before running the tests.

Or is trace-cmd really making us forget how to manually setup ftrace 
evetnts?

Thanks,
Qu

> 
> Cheers,
> 
> Dave.
> 


  reply	other threads:[~2021-06-04  2:46 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-03  6:21 [PATCH v2] fstests: add basic ftrace support Qu Wenruo
2021-06-04  2:35 ` Dave Chinner
2021-06-04  2:45   ` Qu Wenruo [this message]
2021-06-04 16:30     ` Darrick J. Wong
2021-06-04 22:44     ` Dave Chinner

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=af48b9a5-9f94-5b57-7115-e802faf50886@suse.com \
    --to=wqu@suse.com \
    --cc=david@fromorbit.com \
    --cc=fstests@vger.kernel.org \
    /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