• Linus Torvalds's avatar
    Merge tag 'tif-task_work.arch-2020-12-14' of git://git.kernel.dk/linux-block · 005b2a9d
    Linus Torvalds authored
    Pull TIF_NOTIFY_SIGNAL updates from Jens Axboe:
     "This sits on top of of the core entry/exit and x86 entry branch from
      the tip tree, which contains the generic and x86 parts of this work.
    
      Here we convert the rest of the archs to support TIF_NOTIFY_SIGNAL.
    
      With that done, we can get rid of JOBCTL_TASK_WORK from task_work and
      signal.c, and also remove a deadlock work-around in io_uring around
      knowing that signal based task_work waking is invoked with the sighand
      wait queue head lock.
    
      The motivation for this work is to decouple signal notify based
      task_work, of which io_uring is a heavy user of, from sighand. The
      sighand lock becomes a huge contention point, particularly for
      threaded workloads where it's shared between threads. Even outside of
      threaded applications it's slower than it needs to be.
    
      Roman Gershman <romger@amazon.com> reported that his networked
      workload dropped from 1.6M QPS at 80% CPU to 1.0M QPS at 100% CPU
      after io_uring was changed to use TIF_NOTIFY_SIGNAL. The time was all
      spent hammering on the sighand lock, showing 57% of the CPU time there
      [1].
    
      There are further cleanups possible on top of this. One example is
      TIF_PATCH_PENDING, where a patch already exists to use
      TIF_NOTIFY_SIGNAL instead. Hopefully this will also lead to more
      consolidation, but the work stands on its own as well"
    
    [1] https://github.com/axboe/liburing/issues/215
    
    * tag 'tif-task_work.arch-2020-12-14' of git://git.kernel.dk/linux-block: (28 commits)
      io_uring: remove 'twa_signal_ok' deadlock work-around
      kernel: remove checking for TIF_NOTIFY_SIGNAL
      signal: kill JOBCTL_TASK_WORK
      io_uring: JOBCTL_TASK_WORK is no longer used by task_work
      task_work: remove legacy TWA_SIGNAL path
      sparc: add support for TIF_NOTIFY_SIGNAL
      riscv: add support for TIF_NOTIFY_SIGNAL
      nds32: add support for TIF_NOTIFY_SIGNAL
      ia64: add support for TIF_NOTIFY_SIGNAL
      h8300: add support for TIF_NOTIFY_SIGNAL
      c6x: add support for TIF_NOTIFY_SIGNAL
      alpha: add support for TIF_NOTIFY_SIGNAL
      xtensa: add support for TIF_NOTIFY_SIGNAL
      arm: add support for TIF_NOTIFY_SIGNAL
      microblaze: add support for TIF_NOTIFY_SIGNAL
      hexagon: add support for TIF_NOTIFY_SIGNAL
      csky: add support for TIF_NOTIFY_SIGNAL
      openrisc: add support for TIF_NOTIFY_SIGNAL
      sh: add support for TIF_NOTIFY_SIGNAL
      um: add support for TIF_NOTIFY_SIGNAL
      ...
    005b2a9d
signal.c 24 KB