git: kernel - Implementat much deeper use of shared VM object locks

Matthew Dillon dillon at crater.dragonflybsd.org
Sat Feb 23 11:30:14 PST 2013


commit ce94514e6b38abad5c78107e3d1ac401117df5c4
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Sat Feb 23 11:22:00 2013 -0800

    kernel - Implementat much deeper use of shared VM object locks
    
    * Use a shared VM object lock on terminal (and likely highly shared)
      OBJT_VNODE objects.  For example, binaries in the system such as
      /bin/sh or /usr/bin/make.
    
      This greatly improves fork/exec and related VM faults on concurrently
      executing binaries.  Most commonly, parallel builds often exec
      hundreds of thousands of sh's and make's.
    
      +50% to +100% nominal improved performance under these conditions.
      +200% to +300% improved poudriere performance during the depend
      stage.
    
    * Formalize the shared VM object lock with a new API function,
      vm_object_lock_maybe_shared(), which determines whether a VM
      object meets the requirements for obtaining a shared lock.
    
    * Adjust the vm_fault*() APIs to track whether the VM object is
      locked shared or exclusive on entry.
    
    * Clarify that OBJ_ONEMAPPING is only applicable to OBJT_DEFAULT
      and OBJT_SWAP objects.
    
    * Heavy work on the exec path.  Somewhat lighter work on the exit
      path.  Tons more work could be done.

Summary of changes:
 sys/kern/imgact_aout.c |  5 +++--
 sys/kern/imgact_elf.c  | 28 ++++++++++++++++++-------
 sys/kern/lwkt_token.c  | 28 +++++++++++++++++++++++++
 sys/vm/swap_pager.c    |  2 +-
 sys/vm/vm_fault.c      | 57 +++++++++++++++++++++++++++++++++++++++++++++-----
 sys/vm/vm_map.c        | 24 +++++++++++++++++++--
 sys/vm/vm_map.h        |  1 +
 sys/vm/vm_object.c     | 42 +++++++++++++++++++++++++++++++------
 sys/vm/vm_object.h     | 10 ++++++++-
 sys/vm/vm_page.c       |  6 +++---
 sys/vm/vnode_pager.c   |  2 +-
 11 files changed, 177 insertions(+), 28 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/ce94514e6b38abad5c78107e3d1ac401117df5c4


-- 
DragonFly BSD source repository



More information about the Commits mailing list