Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1324594

[RFC 0/12] introduce down_write_killable for rw_semaphore

From Michal Hocko <mhocko@kernel.org>
Newsgroups linux.kernel
Subject [RFC 0/12] introduce down_write_killable for rw_semaphore
Date 2016-02-02 21:30 +0100
Message-ID <qXPKi-8sh-3@gated-at.bofh.it> (permalink)
Organization linux.* mail to news gateway

Show all headers | View raw


Hi,
the following patchset implements a killable variant of write lock for
rw_semaphore. My usecase is to turn as many mmap_sem write users to use
a killable variant which will be helpful for the oom_reaper [1] to
asynchronously tear down the oom victim address space which requires
mmap_sem for read. This will reduce a likelihood of OOM livelocks caused
by oom victim being stuck on a lock or other resource which prevents it
to reach its exit path and release the memory. I haven't implemented
the killable variant of the read lock because I do not have any usecase
for this API.

The patchset is organized as follows.
- Patch 1 is a trivial cleanup
- Patch 2, I belive, shouldn't introduce any functional changes as per
  Documentation/memory-barriers.txt.
- Patch 3 is the preparatory work and necessary infrastructure for
  down_write_killable. It implements generic __down_write_killable
  and prepares the write lock slow path to bail out earlier when told so
- Patch 4-9 are implementing arch specific __down_write_killable. One
  patch per architecture. I haven't even tried to compile test anything but
  sparch which uses CONFIG_RWSEM_GENERIC_SPINLOCK in allnoconfig.
  Those shold be mostly trivial.
- One exception is x86 which replaces the current implementation of
  __down_write with the generic one to make easier to read and get rid
  of one level of indirection to the slow path. More on that in patch 10.
  I do not have any problems to drop patch 10 and rework 11 to the current
  inline asm but I think the easier code would be better.
- finally patch 11 implements down_write_killable and ties everything
  together. I am not really an expert on lockdep so I hope I got it right.

Many of arch specific patches are basically same and I can squash them
into one patch if this is preferred but I thought that one patch per
arch is preferable.

My patch to change mmap_sem write users to killable form is not part
of the series because it is not finished yet but I guess it is not
really necessary for the RFC. The API is used in the same way as
mutex_lock_killable.

I have tested on x86 with OOM situations with high mmap_sem contention
(basically many parallel page faults racing with many parallel mmap/munmap
tight loops) so the waiters for the write locks are routinely interrupted
by SIGKILL.

Patches should apply cleanly on both Linus and next tree.

Any feedback is highly appreciated.
---
[1] http://lkml.kernel.org/r/1452094975-551-1-git-send-email-mhocko@kernel.org

Back to linux.kernel | Previous | Next — Next in thread | Find similar | Unroll thread


Thread

[RFC 0/12] introduce down_write_killable for rw_semaphore Michal Hocko <mhocko@kernel.org> - 2016-02-02 21:30 +0100
  [RFC 03/12] locking, rwsem: introduce basis for down_write_killable Michal Hocko <mhocko@kernel.org> - 2016-02-02 21:30 +0100
  [RFC 02/12] locking, rwsem: drop explicit memory barriers Michal Hocko <mhocko@kernel.org> - 2016-02-02 21:30 +0100
  [RFC 05/12] ia64, rwsem: provide __down_write_killable Michal Hocko <mhocko@kernel.org> - 2016-02-02 21:30 +0100
  [RFC 10/12] x86, rwsem: simplify __down_write Michal Hocko <mhocko@kernel.org> - 2016-02-02 21:30 +0100
    Re: [RFC 10/12] x86, rwsem: simplify __down_write Ingo Molnar <mingo@kernel.org> - 2016-02-03 09:20 +0100
      Re: [RFC 10/12] x86, rwsem: simplify __down_write Michal Hocko <mhocko@kernel.org> - 2016-02-03 13:20 +0100
  [RFC 06/12] s390, rwsem: provide __down_write_killable Michal Hocko <mhocko@kernel.org> - 2016-02-02 21:30 +0100
  [RFC 04/12] alpha, rwsem: provide __down_write_killable Michal Hocko <mhocko@kernel.org> - 2016-02-02 21:30 +0100
  [RFC 01/12] locking, rwsem: get rid of __down_write_nested Michal Hocko <mhocko@kernel.org> - 2016-02-02 21:30 +0100
  [RFC 09/12] xtensa, rwsem: provide __down_write_killable Michal Hocko <mhocko@kernel.org> - 2016-02-02 21:30 +0100

csiph-web