Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 17 Feb 2018 00:23:28 +0000 (UTC)
From:      Mateusz Guzik <mjg@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r329420 - head/sys/kern
Message-ID:  <201802170023.w1H0NSH0030381@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: mjg
Date: Sat Feb 17 00:23:28 2018
New Revision: 329420
URL: https://svnweb.freebsd.org/changeset/base/329420

Log:
  Postpone sx_sunlock(&proctree_lock) on fork until after allproc is dropped.
  
  There is a significant contention on the lock during -j 128 package build.
  This change drops total wait time on this lock by 60%.

Modified:
  head/sys/kern/kern_fork.c

Modified: head/sys/kern/kern_fork.c
==============================================================================
--- head/sys/kern/kern_fork.c	Sat Feb 17 00:21:50 2018	(r329419)
+++ head/sys/kern/kern_fork.c	Sat Feb 17 00:23:28 2018	(r329420)
@@ -401,8 +401,6 @@ do_fork(struct thread *td, struct fork_req *fr, struct
 
 	trypid = fork_findpid(fr->fr_flags);
 
-	sx_sunlock(&proctree_lock);
-
 	p2->p_state = PRS_NEW;		/* protect against others */
 	p2->p_pid = trypid;
 	AUDIT_ARG_PID(p2->p_pid);
@@ -414,6 +412,7 @@ do_fork(struct thread *td, struct fork_req *fr, struct
 	PROC_LOCK(p1);
 
 	sx_xunlock(&allproc_lock);
+	sx_sunlock(&proctree_lock);
 
 	bcopy(&p1->p_startcopy, &p2->p_startcopy,
 	    __rangeof(struct proc, p_startcopy, p_endcopy));
@@ -977,8 +976,8 @@ fork1(struct thread *td, struct fork_req *fr)
 	}
 
 	error = EAGAIN;
-	sx_sunlock(&proctree_lock);
 	sx_xunlock(&allproc_lock);
+	sx_sunlock(&proctree_lock);
 #ifdef MAC
 	mac_proc_destroy(newproc);
 #endif



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