On Thu 2017-06-01 16:21:02, Sergey Senozhatsky wrote: > On (05/31/17 16:30), Sergey Senozhatsky wrote: > > On (05/29/17 14:12), Jan Kara wrote: > > [..] > > > Actually I had something very similar in old versions of my patch set. And > > > it didn't work very well. The problem was that e.g. sometimes scheduler > > > decided that printk kthread should run on the same CPU as the process > > > currently doing printing and in such case printk kthread never took over > > > printing and the machine locked up due to heavy printing. > > > > hm, interesting. > > that's a tricky problem to deal with. > > > > ... so may be we can have per-CPU printk kthreads then > > static DEFINE_PER_CPU(struct task_struct *, printk_kthread); > > > SMP hotplug threads, to be precise, the same way as watchdog has it. and > then during offloading we can wake_up any printk_kthread that is knowingly > not from this-CPU, all of them, let them compete for the console_sem. > > just a quick idea. > > thoughts?
I am not sure if this is worth the resources. It think that one big win of workqueues was that it reduced the amount of running per-CPU kthreads. There are systems with thousands of CPUs. I am a bit afraid to use workqueues for flushing consoles. It would be another dependency and another risk. Otherwise, per-CPU kthreads/workqueues primary handle per-CPU resources. But printk_kthread would handle consoles that need to be serialized anyway. It sounds weird to have per-CPU task just to increase the chance that it will get scheduled. Best Regards, Petr