Messages in this thread | | | Subject | Re: [PATCH printk 3/5] printk: use buffer pool for sprint buffers | From | Rasmus Villemoes <> | Date | Wed, 30 Sep 2020 10:06:24 +0200 |
| |
On 25/09/2020 10.28, Petr Mladek wrote: > On Thu 2020-09-24 14:32:49, Rasmus Villemoes wrote: >> On 24/09/2020 11.54, Rasmus Villemoes wrote: >>> On 23/09/2020 17.11, Petr Mladek wrote: >>>> On Tue 2020-09-22 17:44:14, John Ogness wrote: >>>>> vprintk_store() is using a single static buffer as a temporary >>>>> sprint buffer for the message text. This will not work once >>>>> @logbuf_lock is removed. Replace the single static buffer with a >>>>> pool of buffers. >>>> >>>> The buffer is used because we do not know the length of the >>>> formatted message to reserve the right space in the ring buffer >>>> in advance. >>>> >>>> There was the idea to call vsprintf(NULL, fmt, args) to count >>>> the length in advance. >>> >>> sprintf is dog slow. > > Well, printk() is a slow path. It has never been too optimized for > speed. The main purpose is to report problems and eventually some > interesting information.
True. But remember that printk is called from _everywhere_, with all sorts of locks held and/or preemption disabled or whatnot, and every cycle spent in printk makes those windows wider. Doubling the cost of every single printk by unconditionally doing vsnprintf() twice is a bad idea.
Rasmus
| |