2013-08-23 00:52:22

by Andy Lutomirski

[permalink] [raw]
Subject: Finding out who's holding a lock?

My program is occasionally seeing slow page faults. latencytop says
they're slow because they're waiting for read access to mmap_sem, but
latencytop isn't showing any other thread in the process blocking.

Is there any straightforward way to find out who called down_write on
mmap_sem when down_read is slow?

--Andy


2013-08-24 10:50:49

by Peter Hurley

[permalink] [raw]
Subject: Re: Finding out who's holding a lock?

On 08/22/2013 08:52 PM, Andy Lutomirski wrote:
> My program is occasionally seeing slow page faults. latencytop says
> they're slow because they're waiting for read access to mmap_sem, but
> latencytop isn't showing any other thread in the process blocking.
>
> Is there any straightforward way to find out who called down_write on
> mmap_sem when down_read is slow?

Build with CONFIG_LOCKDEP (Kernel Debugging -> Lock Debugging ->
"Lock Debugging: prove locking correctness").

When you experience the slowdown, sysrq + d (displays all currently
held locks). sysrq can also be programmatically triggered with
"echo d > /proc/sysrq-trigger" or equivalent.

Regards,
Peter Hurley