Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 7 Jan 2019 22:10:48 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r342853 - in head: lib/libc/sys sys/vm
Message-ID:  <201901072210.x07MAm67096060@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kib
Date: Mon Jan  7 22:10:48 2019
New Revision: 342853
URL: https://svnweb.freebsd.org/changeset/base/342853

Log:
  Add a tunable which changes mincore(2) algorithm to only report data
  from the local mapping.
  
  Enable the setting by default.
  The article behind the change: https://arxiv.org/abs/1901.01161
  
  Reviewed by:	markj
  Discussed with:	emaste
  Sponsored by:	The FreeBSD Foundation
  MFC after:	1 week
  Differential revision:	https://reviews.freebsd.org/D18764

Modified:
  head/lib/libc/sys/mincore.2
  head/sys/vm/vm_mmap.c

Modified: head/lib/libc/sys/mincore.2
==============================================================================
--- head/lib/libc/sys/mincore.2	Mon Jan  7 19:39:31 2019	(r342852)
+++ head/lib/libc/sys/mincore.2	Mon Jan  7 22:10:48 2019	(r342853)
@@ -28,7 +28,7 @@
 .\"	@(#)mincore.2	8.1 (Berkeley) 6/9/93
 .\" $FreeBSD$
 .\"
-.Dd June 1, 2018
+.Dd January 7, 2019
 .Dt MINCORE 2
 .Os
 .Sh NAME
@@ -47,7 +47,8 @@ system call determines whether each of the pages in th
 .Fa addr
 and continuing for
 .Fa len
-bytes is resident.
+bytes is resident or mapped, depending on the value of sysctl
+.Va vm.mincore_mapped .
 .\"The beginning address,
 .\".Fa addr ,
 .\"is first rounded down to a multiple of the page size (see
@@ -85,6 +86,18 @@ The only way to ensure that a page is resident is to l
 with the
 .Xr mlock 2
 system call.
+.Pp
+If the
+.Va vm.mincore_mapped
+sysctl is set to a non-zero value (default), only the current process'
+mappings of the pages in the specified virtual address range are examined.
+This does not preclude the system from returning
+.Dv MINCORE_REFERENCED_OTHER
+and
+.Dv MINCORE_MODIFIED_OTHER
+statuses.
+Otherwise, if the sysctl value is zero, all resident pages backing the
+specified address range are examined, regardless of the mapping state.
 .Sh RETURN VALUES
 .Rv -std mincore
 .Sh ERRORS

Modified: head/sys/vm/vm_mmap.c
==============================================================================
--- head/sys/vm/vm_mmap.c	Mon Jan  7 19:39:31 2019	(r342852)
+++ head/sys/vm/vm_mmap.c	Mon Jan  7 22:10:48 2019	(r342853)
@@ -97,6 +97,9 @@ __FBSDID("$FreeBSD$");
 int old_mlock = 0;
 SYSCTL_INT(_vm, OID_AUTO, old_mlock, CTLFLAG_RWTUN, &old_mlock, 0,
     "Do not apply RLIMIT_MEMLOCK on mlockall");
+static int mincore_mapped = 1;
+SYSCTL_INT(_vm, OID_AUTO, mincore_mapped, CTLFLAG_RWTUN, &mincore_mapped, 0,
+    "mincore reports mappings, not residency");
 
 #ifdef MAP_32BIT
 #define	MAP_32BIT_MAX_ADDR	((vm_offset_t)1 << 31)
@@ -808,7 +811,16 @@ RestartScan:
 		retry:
 			m = NULL;
 			mincoreinfo = pmap_mincore(pmap, addr, &locked_pa);
-			if (locked_pa != 0) {
+			if (mincore_mapped) {
+				/*
+				 * We only care about this pmap's
+				 * mapping of the page, if any.
+				 */
+				if (locked_pa != 0) {
+					vm_page_unlock(PHYS_TO_VM_PAGE(
+					    locked_pa));
+				}
+			} else if (locked_pa != 0) {
 				/*
 				 * The page is mapped by this process but not
 				 * both accessed and modified.  It is also



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