Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 23 Apr 2000 11:25:27 -0700 (PDT)
From:      Matthew Dillon <dillon@apollo.backplane.com>
To:        freebsd-stable@FreeBSD.ORG
Subject:   MFCing SMP cleanups from -current into 4.x on wednesday
Message-ID:  <200004231825.LAA62883@apollo.backplane.com>

next in thread | raw e-mail | index | archive | help
    I intend to MFC the preliminary SMP cleanups I did in current a few
    weeks ago back into 4.x. My current plan is to do this on wednesday.  
    I do not expect there to be any complains since the SMP cleanups appear
    to have been working wonderfully in -current for some time now but
    if people have problems with it I can delay the MFC while we discuss
    it.

    I also intend to MFC the changes to the write-behind heuristic on 
    wednesday (search for 'Change the write-behind' in the below -current 
    commits for a reference).  Since this is a relatively simple patch which
    solves a degenerate write-stall case in -current as well as fixes one
    of those silly contrived benchmarks, I do not expect there to be any
    complaints.

    My intention is to try to keep the 4.x and 5.x trees synchronized as
    much as makes sense in regards to my own core work so people doing
    add-on work can also MFC as much of it as makes sense.  It should be
    reasonable to do this while we are in the early stages of the release
    cycle.


dillon      2000/03/27 23:16:38 PST

  Modified files:
    sys/alpha/alpha      trap.c 
    sys/i386/i386        exception.s genassym.c globals.s 
                         mp_machdep.c mplock.s simplelock.s 
                         support.s swtch.s sys_machdep.c trap.c 
                         vm86bios.s vm_machdep.c 
    sys/i386/include     asnames.h cpu.h globaldata.h globals.h 
                         ipl.h lock.h smptests.h 
    sys/i386/isa         apic_ipl.s apic_vector.s ipl.s 
                         ipl_funcs.c 
    sys/kern             init_sysent.c kern_prot.c kern_sig.c 
                         kern_switch.c kern_synch.c subr_prof.c 
                         vfs_syscalls.c 
    sys/posix4           ksched.c 
    sys/sys              ktrace.h proc.h signalvar.h sysent.h 
  Log:
      Commit major SMP cleanups and move the BGL (big giant lock) in the
      syscall path inward.  A system call may select whether it needs the MP
      lock or not (the default being that it does need it).
  
      A great deal of conditional SMP code for various deadended experiments
      has been removed.  'cil' and 'cml' have been removed entirely, and the
      locking around the cpl has been removed.  The conditional
      separately-locked fast-interrupt code has been removed, meaning that
      interrupts must hold the CPL now (but they pretty much had to anyway).
      Another reason for doing this is that the original separate-lock for
      interrupts just doesn't apply to the interrupt thread mechanism being
      contemplated.
  
      Modifications to the cpl may now ONLY occur while holding the MP
      lock.  For example, if an otherwise MP safe syscall needs to mess with
      the cpl, it must hold the MP lock for the duration and must (as usual)
      save/restore the cpl in a nested fashion.
  
      This is precursor work for the real meat coming later: avoiding having
      to hold the MP lock for common syscalls and I/O's and interrupt threads.
      It is expected that the spl mechanisms and new interrupt threading
      mechanisms will be able to run in tandem, allowing a slow piecemeal
      transition to occur.
  
      This patch should result in a moderate performance improvement due to
      the considerable amount of code that has been removed from the critical
      path, especially the simplification of the spl*() calls.  The real
      performance gains will come later.
  
  Approved by: jkh
  Reviewed by: current, bde (exception.s)
  Some work taken from: luoqi's patch
  
  Revision  Changes    Path
  1.27      +4 -4      src/sys/alpha/alpha/trap.c
  1.66      +79 -54    src/sys/i386/i386/exception.s
  1.88      +2 -1      src/sys/i386/i386/genassym.c
  1.14      +5 -3      src/sys/i386/i386/globals.s
  1.116     +3 -1      src/sys/i386/i386/mp_machdep.c
  1.30      +39 -249   src/sys/i386/i386/mplock.s
  1.12      +6 -1      src/sys/i386/i386/simplelock.s
  1.68      +14 -2     src/sys/i386/i386/support.s
  1.90      +17 -10    src/sys/i386/i386/swtch.s
  1.48      +2 -1      src/sys/i386/i386/sys_machdep.c
  1.148     +114 -39   src/sys/i386/i386/trap.c
  1.16      +2 -7      src/sys/i386/i386/vm86bios.s
  1.134     +7 -7      src/sys/i386/i386/vm_machdep.c
  1.45      +3 -4      src/sys/i386/include/asnames.h
  1.44      +13 -7     src/sys/i386/include/cpu.h
  1.12      +2 -1      src/sys/i386/include/globaldata.h
  1.6       +3 -1      src/sys/i386/include/globals.h
  1.18      +7 -1      src/sys/i386/include/ipl.h
  1.12      +6 -74     src/sys/i386/include/lock.h
  1.34      +22 -81    src/sys/i386/include/smptests.h
  1.28      +20 -30    src/sys/i386/isa/apic_ipl.s
  1.48      +11 -265   src/sys/i386/isa/apic_vector.s
  1.33      +29 -92    src/sys/i386/isa/ipl.s
  1.34      +64 -179   src/sys/i386/isa/ipl_funcs.c
  1.80      +5 -5      src/sys/kern/init_sysent.c
  1.54      +15 -2     src/sys/kern/kern_prot.c
  1.74      +2 -1      src/sys/kern/kern_sig.c
  1.4       +3 -1      src/sys/kern/kern_switch.c
  1.88      +2 -1      src/sys/kern/kern_synch.c
  1.33      +2 -1      src/sys/kern/subr_prof.c
  1.152     +3 -1      src/sys/kern/vfs_syscalls.c
  1.8       +2 -1      src/sys/posix4/ksched.c
  1.20      +2 -2      src/sys/sys/ktrace.h
  1.100     +12 -3     src/sys/sys/proc.h
  1.35      +15 -4     src/sys/sys/signalvar.h
  1.28      +5 -1      src/sys/sys/sysent.h


dillon      2000/03/28 10:06:50 PST

  Modified files:
    sys/i386/i386        mplock.s 
    sys/i386/include     smp.h 
    sys/kern             kern_clock.c kern_mib.c kern_shutdown.c 
                         kern_sig.c kern_synch.c 
    sys/sys              proc.h signalvar.h 
  Log:
      The SMP cleanup commit broke UP compiles.  Make UP compiles work again.
  
  Revision  Changes    Path
  1.31      +9 -1      src/sys/i386/i386/mplock.s
  1.51      +19 -2     src/sys/i386/include/smp.h
  1.107     +2 -4      src/sys/kern/kern_clock.c
  1.30      +1 -4      src/sys/kern/kern_mib.c
  1.73      +1 -3      src/sys/kern/kern_shutdown.c
  1.75      +1 -3      src/sys/kern/kern_sig.c
  1.89      +1 -3      src/sys/kern/kern_synch.c
  1.101     +2 -1      src/sys/sys/proc.h
  1.36      +1 -3      src/sys/sys/signalvar.h



dillon      2000/03/28 22:15:44 PST

  Modified files:
    sys/i386/i386        exception.s swtch.s vm86bios.s 
    sys/i386/isa         apic_vector.s ipl.s 
  Log:
      The SMP cleanup commit broke need_resched, this fixes that and also
      removed unncessary MPLOCKED and 'lock' prefixes from the interrupt
      nesting level, since (A) the MP lock is held at the time, and (B) since
      the neting level is restored prior to return any interrupted code
      will see a consistent value.
  
  Revision  Changes    Path
  1.67      +2 -2      src/sys/i386/i386/exception.s
  1.91      +2 -2      src/sys/i386/i386/swtch.s
  1.17      +2 -2      src/sys/i386/i386/vm86bios.s
  1.49      +3 -5      src/sys/i386/isa/apic_vector.s
  1.34      +4 -4      src/sys/i386/isa/ipl.s



dillon      2000/03/29 01:07:47 PST

  Modified files:
    sys/i386/isa         ipl.s 
  Log:
      This should fix the lockups people have been experiencing.  I muffed up
      giving astpending two flag bits.  A cmpl $0 had to turn into a bit test.
  
  Many thanks to: Alain Thivillon <Alain.Thivillon@hsc.fr>
  
  Revision  Changes    Path
  1.35      +2 -2      src/sys/i386/isa/ipl.s



dillon      2000/04/01 16:55:31 PST

  Modified files:
    sys/gnu/ext2fs       ext2_readwrite.c 
    sys/kern             vfs_cluster.c vfs_vnops.c 
    sys/sys              buf.h file.h vnode.h 
    sys/ufs/ufs          ufs_readwrite.c 
  Log:
      Change the write-behind code to take more care when starting
      async I/O's.  The sequential read heuristic has been extended to
      cover writes as well.  We continue to call cluster_write() normally,
      thus blocks in the file will still be reallocated for large (but still
      random) I/O's, but I/O will only be initiated for truely sequential
      writes.
  
      This solves a number of annoying situations, especially with DBM (hash
      method) writes, and also has the side effect of fixing a number of
      (stupid) benchmarks.
  
  Reviewed-by: mckusick
  
  Revision  Changes    Path
  1.19      +4 -2      src/sys/gnu/ext2fs/ext2_readwrite.c
  1.94      +30 -9     src/sys/kern/vfs_cluster.c
  1.88      +37 -28    src/sys/kern/vfs_vnops.c
  1.91      +2 -2      src/sys/sys/buf.h
  1.23      +3 -3      src/sys/sys/file.h
  1.112     +3 -2      src/sys/sys/vnode.h
  1.66      +4 -2      src/sys/ufs/ufs/ufs_readwrite.c



dillon      2000/04/02 10:52:44 PDT

  Modified files:
    sys/i386/i386        support.s 
    sys/kern             init_sysent.c kern_prot.c kern_sig.c 
  Log:
      Make the sigprocmask() and geteuid() system calls MP SAFE.  Expand
      commentary for copyin/copyout to indicate that they are MP SAFE as
      well.
  
  Reviewed by: msmith
  
  Revision  Changes    Path
  1.69      +37 -12    src/sys/i386/i386/support.s
  1.81      +4 -4      src/sys/kern/init_sysent.c
  1.55      +10 -7     src/sys/kern/kern_prot.c
  1.76      +14 -7     src/sys/kern/kern_sig.c





To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-stable" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200004231825.LAA62883>