Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1351528
| From | Jan Kara <jack@suse.cz> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | Re: [RFC][PATCH v2 1/2] printk: Make printk() completely async |
| Date | 2016-03-07 12:00 +0100 |
| Message-ID | <ra13k-1LB-13@gated-at.bofh.it> (permalink) |
| References | (4 earlier) <r9Dkm-38n-7@gated-at.bofh.it> <r9EJr-4dl-1@gated-at.bofh.it> <r9GUW-5zH-5@gated-at.bofh.it> <r9YI9-oh-5@gated-at.bofh.it> <ra0qC-1wR-25@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
On Mon 07-03-16 19:12:33, Sergey Senozhatsky wrote: > Hello, > > On (03/07/16 09:22), Jan Kara wrote: > [..] > > > hm, just for note, none of system-wide wqs seem to have a ->rescuer thread > > > (WQ_MEM_RECLAIM). > > > > > > [..] > > > > Even if you use printk_wq with WQ_MEM_RECLAIM for printing_work work item, > > > > printing_work_func() will not be called until current work item calls > > > > schedule_timeout_*(). That will be an undesirable random delay. If you use > > > > a dedicated kernel thread rather than a dedicated workqueue with WQ_MEM_RECLAIM, > > > > we can avoid this random delay. > > > > > > hm. yes, seems that it may take some time until workqueue wakeup() a ->rescuer thread. > > > need to look more. > > > > Yes, it takes some time (0.1s or 2 jiffies) before workqueue code gives up > > creating a worker process and wakes up rescuer thread. However I don't see > > that as a problem... > > yes, that's why I asked Tetsuo whether his concern was a wq's MAYDAY timer > delay. the two commits that Tetsuo pointed at earlier in he loop (373ccbe59270 > and 564e81a57f97) solved the problem by switching to WQ_MEM_RECLAIM wq. > I've slightly tested OOM-kill on my desktop system and haven't spotted any > printk delays (well, a test on desktop is not really representative, of > course). > > > the only thing that so far grabbed my attention - is > > __this_cpu_or(printk_pending) > irq_work_queue(this_cpu_ptr(&wake_up_klogd_work)); > > a _theoretical_ corner case here is when we have only one CPU doing a bunch > of printk()s and this CPUs disables irqs in advance > local_irq_save > for (...) > printk() > local_irq_restore() > > if no other CPUs see `printk_pending' then nothing will be printed up > until local_irq_restore() (assuming that IRQ disable time is withing > the hardlockup detection threshold). if any other CPUs concurrently > execute printk then we are fine, but > a) if none -- then we probably have a small change in behaviour > and > b) UP systems So for UP systems, we should by default disable async printing anyway I suppose. It is just a pointless overhead. So please just make printk_sync default to true if !CONFIG_SMP. When IRQs are disabled, you're right we will have a change in behavior. I don't see an easy way of avoiding delaying of printk until IRQs get enabled. I don't want to queue work directly because that creates possibility for lock recursion in queue_work(). And playing some tricks with irq_works isn't easy either - you cannot actually rely on any other CPU doing anything (even a timer tick) because of NOHZ. So if this will be a problem in practice, using a kthread will probably be the easiest solution. Honza -- Jan Kara <jack@suse.com> SUSE Labs, CR
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[RFC][PATCH v2 1/2] printk: Make printk() completely async Sergey Senozhatsky <sergey.senozhatsky@gmail.com> - 2016-03-05 12:00 +0100
Re: [RFC][PATCH v2 1/2] printk: Make printk() completely async Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com> - 2016-03-06 07:40 +0100
Re: [RFC][PATCH v2 1/2] printk: Make printk() completely async Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp> - 2016-03-06 08:20 +0100
Re: [RFC][PATCH v2 1/2] printk: Make printk() completely async Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com> - 2016-03-06 10:40 +0100
Re: [RFC][PATCH v2 1/2] printk: Make printk() completely async Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp> - 2016-03-06 12:10 +0100
Re: [RFC][PATCH v2 1/2] printk: Make printk() completely async Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com> - 2016-03-06 14:30 +0100
Re: [RFC][PATCH v2 1/2] printk: Make printk() completely async Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp> - 2016-03-06 16:00 +0100
Re: [RFC][PATCH v2 1/2] printk: Make printk() completely async Jan Kara <jack@suse.cz> - 2016-03-07 09:30 +0100
Re: [RFC][PATCH v2 1/2] printk: Make printk() completely async Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com> - 2016-03-07 11:20 +0100
Re: [RFC][PATCH v2 1/2] printk: Make printk() completely async Jan Kara <jack@suse.cz> - 2016-03-07 12:00 +0100
Re: [RFC][PATCH v2 1/2] printk: Make printk() completely async Jan Kara <jack@suse.cz> - 2016-03-07 13:20 +0100
Re: [RFC][PATCH v2 1/2] printk: Make printk() completely async Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp> - 2016-03-07 13:40 +0100
Re: [RFC][PATCH v2 1/2] printk: Make printk() completely async Sergey Senozhatsky <sergey.senozhatsky@gmail.com> - 2016-03-07 16:20 +0100
Re: [RFC][PATCH v2 1/2] printk: Make printk() completely async Tejun Heo <tj@kernel.org> - 2016-03-07 17:00 +0100
Re: [RFC][PATCH v2 1/2] printk: Make printk() completely async Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com> - 2016-03-08 11:30 +0100
Re: [RFC][PATCH v2 1/2] printk: Make printk() completely async Tejun Heo <tj@kernel.org> - 2016-03-11 18:30 +0100
Re: [RFC][PATCH v2 1/2] printk: Make printk() completely async Sergey Senozhatsky <sergey.senozhatsky@gmail.com> - 2016-03-12 06:10 +0100
Re: [RFC][PATCH v2 1/2] printk: Make printk() completely async Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com> - 2016-03-09 07:10 +0100
Re: [RFC][PATCH v2 1/2] printk: Make printk() completely async Jan Kara <jack@suse.cz> - 2016-03-10 10:30 +0100
Re: [RFC][PATCH v2 1/2] printk: Make printk() completely async Sergey Senozhatsky <sergey.senozhatsky@gmail.com> - 2016-03-10 17:00 +0100
Re: [RFC][PATCH v2 1/2] printk: Make printk() completely async Petr Mladek <pmladek@suse.com> - 2016-03-10 11:00 +0100
Re: [RFC][PATCH v2 1/2] printk: Make printk() completely async Sergey Senozhatsky <sergey.senozhatsky@gmail.com> - 2016-03-10 17:30 +0100
Re: [RFC][PATCH v2 1/2] printk: Make printk() completely async Sergey Senozhatsky <sergey.senozhatsky@gmail.com> - 2016-03-07 15:50 +0100
Re: [RFC][PATCH v2 1/2] printk: Make printk() completely async Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp> - 2016-03-07 12:20 +0100
Re: [RFC][PATCH v2 1/2] printk: Make printk() completely async Sergey Senozhatsky <sergey.senozhatsky@gmail.com> - 2016-03-07 15:40 +0100
Re: [RFC][PATCH v2 1/2] printk: Make printk() completely async Tejun Heo <tj@kernel.org> - 2016-03-07 16:50 +0100
csiph-web