svn commit: r287606 - head/sys/kern

Adrian Chadd adrian at FreeBSD.org
Thu Sep 10 04:05:59 UTC 2015


Author: adrian
Date: Thu Sep 10 04:05:58 2015
New Revision: 287606
URL: https://svnweb.freebsd.org/changeset/base/287606

Log:
  Also make kern.maxfilesperproc a boot time tunable.
  
  Auto-tuning threshold discussions aside, it turns out that if you want
  to lower this on say, rather memory-packed machines, you either set maxusers
  or kern.maxfiles, or you set it in sysctl.  The former is a non-exact
  way to tune this; the latter doesn't actually affect anything in the
  startup scripts.
  
  This first occured because I wondered why the hell screen would take upwards
  of 10 seconds to spawn a new screen.  I then found python doing the same
  thing during fork/exec of child processes - it calls close() on each FD
  up to the current openfiles limit.  On a 1TB machine this is like, 26 million
  FDs per process.  Ugh.
  
  So:
  
  * This allows it to be set early in /boot/loader.conf;
  * It can be used to work around the ridiculous situation of
    screen, python, etc doing a close() on potentially millions of FDs
    even though you only have four open.
  
  Tested:
  
  * 4GB, 32GB, 64GB, 128GB, 384GB, 1TB systems with autotune, ensuring
    screen and python forking doesn't result in some pretty hilariously
    bad behaviour.
  
  TODO:
  
  * Note that the default login.conf sets openfiles-cur to unlimited,
    effectively obeying kern.maxfilesperproc.  Perhaps we should fix
    this.
  
  * .. and even if we do, we need to also ensure that daemons get
    a soft limit of something reasonable and capped - they can request
    more FDs themselves.
  
  MFC after:	1 week
  Sponsored by:	Norse Corp, Inc.

Modified:
  head/sys/kern/subr_param.c

Modified: head/sys/kern/subr_param.c
==============================================================================
--- head/sys/kern/subr_param.c	Wed Sep  9 23:41:24 2015	(r287605)
+++ head/sys/kern/subr_param.c	Thu Sep 10 04:05:58 2015	(r287606)
@@ -265,7 +265,8 @@ init_param2(long physpages)
 	if (maxfiles > (physpages / 4))
 		maxfiles = physpages / 4;
 	maxfilesperproc = (maxfiles / 10) * 9;
-	
+	TUNABLE_INT_FETCH("kern.maxfilesperproc", &maxfilesperproc);
+
 	/*
 	 * Cannot be changed after boot.
 	 */


More information about the svn-src-all mailing list