All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
To: Jan Kara <jack@suse.cz>,
	Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Cc: pmladek@suse.com, LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 1/3] printk: Make printk() completely async
Date: Thu, 3 Mar 2016 20:26:55 +0900	[thread overview]
Message-ID: <56D81F7F.4010405@I-love.SAKURA.ne.jp> (raw)
In-Reply-To: <1456934363-3199-1-git-send-email-jack@suse.cz>

On 2016/03/03 0:59, Jan Kara wrote:
> This patch makes printk() completely asynchronous (similar to what
> printk_deferred() did until now). It appends message to the kernel
> printk buffer and queues work to do the printing to console. This has
> the advantage that printing always happens from a schedulable contex and
> thus we don't lockup any particular CPU or even interrupts. Also it has
> the advantage that printk() is fast and thus kernel booting is not
> slowed down by slow serial console. Disadvantage of this method is that
> in case of crash there is higher chance that important messages won't
> appear in console output (we may need working scheduling to print
> message to console). We somewhat mitigate this risk by switching printk
> to the original method of immediate printing to console if oops is in
> progress.  Also for debugging purposes we provide printk.synchronous
> kernel parameter which resorts to the original printk behavior.

A few questions.

(1) How do you handle PM/suspend? I think kernel threads including
    workqueue will be frozen during suspend operation. Maybe we can use
    an atomic_t counter (like oom_victims) which forces synchronous
    printing if counter value > 0.

(2) Can we have a method for waiting for pending data to be flushed
    with timeout? If I want to emit as much messages as SysRq-t from
    schedulable context, I want to wait for flush before proceeding.
    This is different from using atomic_t counter suggested in (1), for
    asynchronous printk() helps reducing RCU duration; queuing to string
    buffer from RCU context and emitting from !RCU context will be
    preferable.

(3) Is reliability of SysRq-t changed by this patch? I mean, does this
    patch make SysRq-t prone to drop traces if the logbuf was not large
    enough?

(4) This will be outside of this proposal's scope, but it would be nice
    if we can selectively allow each console driver to control loglevel
    to emit. For example, send all kernel messages to serial console
    (console=ttyS0,115200n8) but send only critical messages to login
    console (console=tty0). I'm interested in logging via serial console
    and netconsole but not via login console. Since traces sent to login
    console is swept away soon, waiting for login console is wasteful.

(5) This will be outside of this proposal's scope, but it would be nice
    if printk() can combine multiple logs and pass to console drivers.
    For example, logging via netconsole will become significantly faster
    if printk() can combine multiple logs up to ethernet packet's size.
    A single stack trace can likely be sent using one ethernet packet.

  parent reply	other threads:[~2016-03-03 11:27 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-02 15:59 [PATCH 1/3] printk: Make printk() completely async Jan Kara
2016-03-02 15:59 ` [PATCH 2/3] printk: Skip messages on oops Jan Kara
2016-03-02 17:06   ` kbuild test robot
2016-03-02 15:59 ` [PATCH 3/3] printk: debug: Slow down printing to 9600 bauds Jan Kara
2016-03-03 11:26 ` Tetsuo Handa [this message]
2016-03-03 12:01   ` [PATCH 1/3] printk: Make printk() completely async Jan Kara
2016-03-04 11:24   ` Sergey Senozhatsky

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=56D81F7F.4010405@I-love.SAKURA.ne.jp \
    --to=penguin-kernel@i-love.sakura.ne.jp \
    --cc=jack@suse.cz \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pmladek@suse.com \
    --cc=sergey.senozhatsky@gmail.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.