linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Steven Rostedt <rostedt@goodmis.org>
To: Masami Hiramatsu <mhiramat@kernel.org>
Cc: LKML <linux-kernel@vger.kernel.org>,
	Ingo Molnar <mingo@kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	John 'Warthog9' Hawley <warthog9@kernel.org>
Subject: Re: [RFC][PATCH] bootconfig/tracing/ktest: Add ktest examples of testing bootconfig
Date: Thu, 17 Jun 2021 08:47:59 -0400	[thread overview]
Message-ID: <20210617084759.78bc21d1@gandalf.local.home> (raw)
In-Reply-To: <20210617115921.624c5c0d163de94d29202a83@kernel.org>

On Thu, 17 Jun 2021 11:59:21 +0900
Masami Hiramatsu <mhiramat@kernel.org> wrote:

> Hi Steve,
> 
> On Wed, 16 Jun 2021 17:41:55 -0400
> Steven Rostedt <rostedt@goodmis.org> wrote:
> 
> > From: "Steven Rostedt (VMware)" <rostedt@goodmis.org>
> > 
> > bootconfig is a new feature that appends scripts onto the initrd, and the
> > kernel executes the scripts as an extended kernel command line.
> > 
> > Need to add tests to test that the happened. To test the bootconfig
> > properly, the initrd needs to be updated and the kernel rebooted. ktest is
> > the perfect solution to perform these tests.
> > 
> > Add a example bootconfig.conf in the tools/testing/ktest/examples/include
> > and example bootconfig scripts in tools/testing/ktest/examples/bootconfig
> > and also include verifier scripts that ktest will install on the target
> > and run to make sure that the bootconfig options in the scripts took place
> > after the target rebooted with the new initrd update.  
> 
> Thank you very much for integrate it to ktest!
> I gave some experimental bconfs without cleanup.
> 

No problem. If I was to take bootconfig patches from you, I had to have a
way to test for regressions ;-)


> > --- /dev/null
> > +++ b/tools/testing/ktest/examples/bootconfigs/ftrace.bconf
> > @@ -0,0 +1,82 @@
> > +#!/bin/sh  
> 
> This shebang is for the syntax hilighting. Please remove it.

OK. I didn't even notice that.

> 
> > +
> > +ftrace {
> > +	options = "sym-addr", "context-info"
> > +	buffer_size = 1MB
> > +}
> > +
> > +ftrace.event {
> > +	# Sample1: Make a histogram for initcall functions
> > +	synthetic.initcall_latency {
> > +                fields = "unsigned long func", "u64 lat"
> > +		hist {
> > +			keys = func.sym, lat
> > +			vals = lat
> > +			sort = lat
> > +		}  
> 
> These event.<GROUP>.<EVENT>.hist block is an experimental syntax (plan A),
> and not implemented yet.

I'll remove this then.

> 
> > +	}
> > +	initcall.initcall_start.hist {
> > +		keys = func
> > +		var.ts0 = common_timestamp.usecs
> > +	}
> > +	initcall.initcall_finish.hist {
> > +		keys = func
> > +		var.lat = common_timestamp.usecs - $ts0
> > +		onmatch {
> > +			event = initcall.initcall_start
> > +			action = "initcall_latency(func, $lat)"
> > +		}
> > +	}  
> 
> So please drop this Sample1.

OK.

> 
> > +
> > +	# Sample2: kmalloc() tracing in read(2) syscall
> > +	syscalls.sys_enter_read.enable_event {
> > +		event = kmem.kmalloc
> > +		count = 1
> > +	}
> > +	syscalls.sys_exit_read.disable_event {
> > +		event = kmem.kmalloc
> > +	}
> > +
> > +	# Sample3: Stacktrace at the event
> > +	kmem.kmalloc.stacktrace {
> > +		count = 5
> > +		filter = 'bytes_req >= 65536'
> > +	}
> > +
> > +	# Sample4: Take a snapshot
> > +	block.block_unplug.snapshot {
> > +		count = 1
> > +		filter = nr_rq > 1
> > +	}
> > +
> > +	# Sample5: Trace-on/off
> > +	block.block_plug.traceon {
> > +		filter = nr_rq > 1
> > +	}
> > +	block.block_unplug.traceoff {
> > +		filter = nr_rq > 1
> > +	}
> > +
> > +        # Sample6: onmax
> > +	sched.sched_waking {
> > +		enable
> > +		hist {
> > +			keys = pid
> > +			ts1 = common_timestamp.usecs
> > +			filter = 'comm == "cyclictest"'
> > +		}
> > +	}
> > +	sched.sched_switch {
> > +		enable
> > +		hist {
> > +			keys = next_pid
> > +			var.wakeup_lat = common_timestamp.usecs - $ts1
> > +			onmax {
> > +				var = wakeup_lat
> > +				action = "save(next_prio,next_comm,prev_pid,prev_prio,prev_comm)"
> > +			}
> > +			filter = 'next_comm == "cyclictest"'
> > +		}  
> 
> This also an experimental syntax. Please drop Sample 6.

OK.

> 
> > +	}
> > +}
> > +
> > diff --git a/tools/testing/ktest/examples/bootconfigs/functiongraph.bconf b/tools/testing/ktest/examples/bootconfigs/functiongraph.bconf
> > new file mode 100644
> > index 000000000000..f9fb65caaad2
> > --- /dev/null
> > +++ b/tools/testing/ktest/examples/bootconfigs/functiongraph.bconf
> > @@ -0,0 +1,15 @@
> > +ftrace {
> > +      tracing_on = 0  # off by default
> > +      tracer = function_graph
> > +      event.kprobes {
> > +                start_event {
> > +                        probes = "pci_proc_init"
> > +                        actions = "traceon"
> > +                }
> > +                end_event {
> > +                        probes = "pci_proc_init%return"
> > +                        actions = "traceoff"
> > +                }
> > +        }
> > +  }
> > +
> > diff --git a/tools/testing/ktest/examples/bootconfigs/tracing.bconf b/tools/testing/ktest/examples/bootconfigs/tracing.bconf
> > new file mode 100644
> > index 000000000000..4094390ade41
> > --- /dev/null
> > +++ b/tools/testing/ktest/examples/bootconfigs/tracing.bconf
> > @@ -0,0 +1,51 @@
> > +ftrace {
> > +	tracer = function;
> > +	options = event-fork, sym-addr, stacktrace;
> > +	buffer_size = 1M;
> > +	alloc_snapshot;
> > +	trace_clock = global;
> > +	events = "task:task_newtask", "initcall:*";
> > +	event.sched.sched_process_exec {
> > +		filter = "pid < 128";
> > +	}
> > +	event.kprobes.myevent {
> > +		probes = "vfs_read $arg1 $arg2", "vfs_write $arg1 $arg2"
> > +	}
> > +	event.kprobes.myevent2 {
> > +		probes = "initrd_load";
> > +	}
> > +	event.kprobes.enable
> > +	instance.bar {
> > +		event.synthetic.initcall_latency {
> > +			fields = "unsigned long func", "u64 lat";
> > +			actions.hist {
> > +				keys = func.sym, lat;
> > +				vals = lat;
> > +				sort = lat;
> > +			}  
> 
> This is another experimental syntax (plan B). 
> This makes histogram into actions.

I'll remove it for now.

> 
> > +		}
> > +		event.initcall {
> > +			initcall_start.actions.hist {
> > +				keys = func;
> > +				ts0 = "common_timestamp.usecs";  
> 
> But remove "var." from local variable definition.
> 
> > +			}
> > +			initcall_finish.actions.hist {
> > +				keys = "func";
> > +				lat = "common_timestamp.usecs-$ts0";
> > +				onmatch = "initcall.initcall_start",
> > +					  "initcall_latency(func,$lat)";
> > +			}
> > +		}
> > +	}  
> 
> Thus, please drop this "instance.bar" block.

Will do.

Thanks for the review.

-- Steve

> 
> > +	instance.foo {
> > +		tracer = function-graph;
> > +		tracing_on = false;
> > +		event.workqueue.workqueue_start.actions = "tracing_on";
> > +		event.workqueue.workqueue_end.actions = "tracing_off";
> > +	};
> > +}
> > +kernel {
> > +	tp_printk;
> > +	dump_on_oops = 2
> > +	traceoff_on_warning
> > +}  
> 
> Thank you,
> 
> 


  reply	other threads:[~2021-06-17 12:48 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-16 21:41 [RFC][PATCH] bootconfig/tracing/ktest: Add ktest examples of testing bootconfig Steven Rostedt
2021-06-17  2:59 ` Masami Hiramatsu
2021-06-17 12:47   ` Steven Rostedt [this message]
2021-06-17 13:18   ` 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=20210617084759.78bc21d1@gandalf.local.home \
    --to=rostedt@goodmis.org \
    --cc=akpm@linux-foundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mhiramat@kernel.org \
    --cc=mingo@kernel.org \
    --cc=warthog9@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;
as well as URLs for NNTP newsgroup(s).