linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Masami Hiramatsu <mhiramat@kernel.org>
To: Borislav Petkov <bp@alien8.de>
Cc: Steven Rostedt <rostedt@goodmis.org>,
	linux-kernel@vger.kernel.org, Ingo Molnar <mingo@kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>
Subject: Re: [for-next][PATCH 04/26] bootconfig: Add Extra Boot Config support
Date: Tue, 11 Feb 2020 00:10:07 +0900	[thread overview]
Message-ID: <20200211001007.62290c743e049b231bdd7052@kernel.org> (raw)
In-Reply-To: <20200210112512.GA29627@zn.tnic>

On Mon, 10 Feb 2020 12:25:13 +0100
Borislav Petkov <bp@alien8.de> wrote:

> On Sat, Feb 08, 2020 at 12:06:48AM +0900, Masami Hiramatsu wrote:
> > OK, could you tell me your idea to make it better? I'm waiting for such
> > discussion a half of last year :)
> 
> Yah, situation sounds familiar. :)
> 
> > For your information, here is the background of this bootconfig.
> > To build my boot-time tracing, I need a way to pass a flexible and
> > structured configuration at boot time.
> 
> Can I see an actual example of what you're doing?

Sure, there are some examples under Documentation/trace/boottime-trace.rst.
Since the tracefs (ftrace's filesystem user interface) is extensible
by dynamic events and instanses, I need flexibility of option "keys"
not only values, also I need structured settings because some keys
will configure same events or trace instance.
For example, ftrace has tracing instances (which represents different
trace logs) which has some set of configuration parameters. Some
parameters has sub-parameters (trace options), and most parameters
have default parameters. I don't want to make it a single parametarized
options, like ftrace.instance="NAME:OPT1,OPT2:CLOCK:SIZE:SNAPSHOT:...",
because it is not human readable and easy to make mistakes.
Instead, bootconfig solve that with structured, multi-line keys;

ftrace.instance.NAME {
	options = OPT1,OPT2
	trace_clock = CLOCK
	buffer_size = SIZE
	...
}

If we have 3 or more instances, it is easy to expand it as

ftrace.instance {
	NAME1 {
		...
	}
	NAME2 {
		...
	}
	NAME3 {
		...
	}
}

(Hmm, maybe I should reserve "default" name for setting a default configuration)

> > I had tried to reuse devicetree at first, but it was rejected because
> > the devicetree is only for describing hardware. So I introduced this
> > bootconfig.
> 
> Makes sense.
> 
> > When I designed the bootconfig, I tried to sort out the requirements.
> > That config should be able to pass all setting we can do on tracefs.
> > Since ftrace already has a parser for tracefs, we don't need any types
> > for each settings. Thus it should be something like sysctl.conf. But the
> > sysctl.conf was too simple, it couldn't handle several related keys
> > well. So I decided to introduce braces which put together some related
> > parameters. And the bootconfig syntax was born.
> 
> Ok, here's my boot command line:
> 
> [    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.5.0-rc7+ root=/dev/nvme0n1p2 ro root=/dev/disk/by-id/nvme-eui.0025385481b2fe2a-part2 resume=/dev/disk/by-id/nvme-eui.0025385481b2fe2a-part1 debug ignore_loglevel log_buf_len=16M no_console_suspend net.ifnames=0 mem_encrypt=off systemd.log_target=null
> 
> How do I use the bootconfig thing with it? Or is it not supposed to be
> used that way? IOW, how is it supposed to be used so that it needs to be
> enabled on every box?

Sure,

1) write a following bootconfig file
----
kernel {
	# root device and resume devices
	root = /dev/disk/by-id/nvme-eui.0025385481b2fe2a-part2
	resume = /dev/disk/by-id/nvme-eui.0025385481b2fe2a-part1
	ro			# Mount root device readonly.
	debug			# boot with debug log
	ignore_loglevel	# this will print all messages
	log_buf_len = 16M	# So expand log buffer to 16MB
	no_console_suspend	# Debugging suspend process
	mem_encrypt = off	# Set AMD SME to off
}

init {
	net.ifnames = 0	# Use tradisional ifname
	systemd.log_target = null	# Ignore systemd log?
}
----
2) Use tools/bootconfig/bootconfig to apply it to your initrd image
# tools/bootconfig/bootconfig -a <your-bootconfig> <your-initrd>
3) boot.

Note that I don't intended to "replace" all legacy command line
(but it is easy for bootloaders to use bootconfig) it seems above example
seems have some options which added by the bootloader.

> 
> > Okay, I hope it and try to prove it. Anyway, to use boot-time tracing which
> > can fully utilize ftrace at boot-time, we have to enable bootconfig.
> 
> Ok, this is getting closer. But not everyone is using boottime tracing?

No, (but I HOPE so). 

> 
> Or is the logic: every user/tool might need to be able to do boottime
> tracing at some future point in time and bootconfig is a mandatory part
> of that use case?

Boot time tracing is just a example. I think we can expand this for some
other subsystems too. And this might be also helpful for adding a bit more
complex syntax to those parameters without parser.

Thank you,

-- 
Masami Hiramatsu <mhiramat@kernel.org>

  reply	other threads:[~2020-02-10 15:10 UTC|newest]

Thread overview: 65+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-14 21:03 [for-next][PATCH 00/26] tracing: Updates for 5.6 Steven Rostedt
2020-01-14 21:03 ` [for-next][PATCH 01/26] perf: Make struct ring_buffer less ambiguous Steven Rostedt
2020-01-14 21:03 ` [for-next][PATCH 02/26] tracing: Rename trace_buffer to array_buffer Steven Rostedt
2020-01-14 21:03 ` [for-next][PATCH 03/26] tracing: Make struct ring_buffer less ambiguous Steven Rostedt
2020-01-14 21:03 ` [for-next][PATCH 04/26] bootconfig: Add Extra Boot Config support Steven Rostedt
2020-02-06 11:54   ` Borislav Petkov
2020-02-06 14:41     ` Masami Hiramatsu
2020-02-06 17:20       ` Geert Uytterhoeven
2020-02-07  0:30         ` Masami Hiramatsu
2020-02-07  8:49           ` Geert Uytterhoeven
2020-02-07 13:17             ` Masami Hiramatsu
2020-02-07 14:28               ` [PATCH] bootconfig: Allocate xbc_nodes array dynamically Masami Hiramatsu
2020-02-06 17:58       ` [for-next][PATCH 04/26] bootconfig: Add Extra Boot Config support Borislav Petkov
2020-02-06 18:10         ` Randy Dunlap
2020-02-06 22:39           ` Steven Rostedt
2020-02-06 22:51             ` Borislav Petkov
2020-02-07  8:59             ` Geert Uytterhoeven
2020-02-07  2:46         ` Masami Hiramatsu
2020-02-07 11:41           ` Borislav Petkov
2020-02-07 15:06             ` Masami Hiramatsu
2020-02-10 11:25               ` Borislav Petkov
2020-02-10 15:10                 ` Masami Hiramatsu [this message]
2020-02-10 17:40                   ` Borislav Petkov
2020-02-11  2:02                     ` Masami Hiramatsu
2020-02-18 13:27                       ` Borislav Petkov
2020-02-18 17:57                         ` Steven Rostedt
2020-02-18 19:38                           ` Borislav Petkov
2020-02-19  2:26                             ` Masami Hiramatsu
2020-02-19  2:26                           ` Masami Hiramatsu
2020-02-19  2:26                         ` Masami Hiramatsu
2020-02-11  9:25                     ` Geert Uytterhoeven
2020-01-14 21:03 ` [for-next][PATCH 05/26] bootconfig: Load boot config from the tail of initrd Steven Rostedt
2020-01-14 21:03 ` [for-next][PATCH 06/26] tools: bootconfig: Add bootconfig command Steven Rostedt
2020-02-07 13:02   ` Michael Ellerman
2020-02-07 13:39     ` Masami Hiramatsu
2020-02-07 13:55     ` [PATCH] tools/bootconfig: Fix wrong __VA_ARGS__ usage Masami Hiramatsu
2020-02-08 11:10       ` Michael Ellerman
2020-02-09  4:09         ` Masami Hiramatsu
2020-02-09 13:05         ` [PATCH] tools/bootconfig: Suppress non-error messages Masami Hiramatsu
2020-02-10  2:06           ` Michael Ellerman
2020-02-10  7:18             ` Masami Hiramatsu
2020-02-10  9:50               ` Michael Ellerman
2020-02-10  9:50       ` [PATCH] tools/bootconfig: Fix wrong __VA_ARGS__ usage Michael Ellerman
2020-02-10 17:07         ` Steven Rostedt
2020-01-14 21:03 ` [for-next][PATCH 07/26] tools: bootconfig: Add bootconfig test script Steven Rostedt
2020-01-14 21:03 ` [for-next][PATCH 08/26] proc: bootconfig: Add /proc/bootconfig to show boot config list Steven Rostedt
2020-01-14 21:03 ` [for-next][PATCH 09/26] init/main.c: Alloc initcall_command_line in do_initcall() and free it Steven Rostedt
2020-01-14 21:03 ` [for-next][PATCH 10/26] bootconfig: init: Allow admin to use bootconfig for kernel command line Steven Rostedt
2020-01-14 21:03 ` [for-next][PATCH 11/26] bootconfig: init: Allow admin to use bootconfig for init " Steven Rostedt
2020-01-14 21:03 ` [for-next][PATCH 12/26] Documentation: bootconfig: Add a doc for extended boot config Steven Rostedt
2020-01-14 21:03 ` [for-next][PATCH 13/26] tracing: Apply soft-disabled and filter to tracepoints printk Steven Rostedt
2020-01-14 21:03 ` [for-next][PATCH 14/26] tracing: kprobes: Output kprobe event to printk buffer Steven Rostedt
2020-01-14 21:03 ` [for-next][PATCH 15/26] tracing: kprobes: Register to dynevent earlier stage Steven Rostedt
2020-01-14 21:03 ` [for-next][PATCH 16/26] tracing: Accept different type for synthetic event fields Steven Rostedt
2020-01-14 21:03 ` [for-next][PATCH 17/26] tracing: Add NULL trace-array check in print_synth_event() Steven Rostedt
2020-01-14 21:03 ` [for-next][PATCH 18/26] tracing/boot: Add boot-time tracing Steven Rostedt
2020-01-14 21:03 ` [for-next][PATCH 19/26] tracing/boot: Add per-event settings Steven Rostedt
2020-01-14 21:03 ` [for-next][PATCH 20/26] tracing/boot Add kprobe event support Steven Rostedt
2020-01-14 21:03 ` [for-next][PATCH 21/26] tracing/boot: Add synthetic " Steven Rostedt
2020-01-14 21:03 ` [for-next][PATCH 22/26] tracing/boot: Add instance node support Steven Rostedt
2020-01-14 21:03 ` [for-next][PATCH 23/26] tracing/boot: Add cpu_mask option support Steven Rostedt
2020-01-14 21:03 ` [for-next][PATCH 24/26] tracing/boot: Add function tracer filter options Steven Rostedt
2020-01-14 21:03 ` [for-next][PATCH 25/26] Documentation: tracing: Add boot-time tracing document Steven Rostedt
2020-01-14 21:03 ` [for-next][PATCH 26/26] tracing: trigger: Replace unneeded RCU-list traversals Steven Rostedt
2020-01-14 22:11   ` 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=20200211001007.62290c743e049b231bdd7052@kernel.org \
    --to=mhiramat@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=bp@alien8.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=rostedt@goodmis.org \
    --subject='Re: [for-next][PATCH 04/26] bootconfig: Add Extra Boot Config support' \
    /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

This is a public inbox, see mirroring instructions
on how to clone and mirror all data and code used for this inbox