Re: fast path cycle muncher (vmstat: make vmstat_updater deferrable again and shut down on idle)
From: Mike Galbraith
Date: Sat Jan 23 2016 - 21:46:30 EST
On Sat, 2016-01-23 at 18:33 -0600, Christoph Lameter wrote:
> On Sat, 23 Jan 2016, Mike Galbraith wrote:
>
> > While you're fixing that commit up, can you perhaps find a better home
> > for quiet_vmstat()? It not only munches cycles when switching cross
> > -core mightily, for -rt it injects a sleeping lock into the idle task.
>
> Not sure what you are talking about. No sleeping locks are used in
> quiet_vmstat() nor does it switch across cores. It would be broken if it
> would do so.
By switching cross-core, I'm referring to scheduling of communicating
tasks.
The perf top snippet...
12.89% [kernel] [k] refresh_cpu_vm_stats.isra.12
4.75% [kernel] [k] __schedule
4.70% [kernel] [k] mutex_unlock
3.14% [kernel] [k] __switch_to
... was pipe-test, an unrealistic microbench, but the same will happen
at lower frequency in the real world.
Here's the sleeping lock for -rt:
[ 2.279582] CPU: 1 PID: 0 Comm: swapper/1 Not tainted 4.5.0-rt3 #7
[ 2.280444] Hardware name: MEDION MS-7848/MS-7848, BIOS M7848W08.20C 09/23/2013
[ 2.281316] ffff88040b00d640 ffff88040b01fe10 ffffffff812d20e2 0000000000000000
[ 2.282202] ffff88040b01fe30 ffffffff81081095 ffff88041ec4cee0 ffff88041ec501e0
[ 2.283073] ffff88040b01fe48 ffffffff815ff910 ffff88041ec4cee0 ffff88040b01fe88
[ 2.283941] Call Trace:
[ 2.284797] [<ffffffff812d20e2>] dump_stack+0x49/0x67
[ 2.285658] [<ffffffff81081095>] ___might_sleep+0xf5/0x180
[ 2.286521] [<ffffffff815ff910>] rt_spin_lock+0x20/0x50
[ 2.287382] [<ffffffff81075919>] try_to_grab_pending+0x69/0x240
[ 2.288239] [<ffffffff81075b16>] cancel_delayed_work+0x26/0xe0
[ 2.289094] [<ffffffff8115ec05>] quiet_vmstat+0x75/0xa0
[ 2.289949] [<ffffffff8109ab38>] cpu_idle_loop+0x38/0x3e0
[ 2.290800] [<ffffffff8109aef3>] cpu_startup_entry+0x13/0x20
[ 2.291647] [<ffffffff81036164>] start_secondary+0x114/0x140