Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 14 Jan 2019 07:25:44 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org
Subject:   svn commit: r343016 - in stable/11: lib/libc/sys sys/vm
Message-ID:  <201901140725.x0E7Pine064851@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kib
Date: Mon Jan 14 07:25:44 2019
New Revision: 343016
URL: https://svnweb.freebsd.org/changeset/base/343016

Log:
  MFC r342853:
  Add a tunable which changes mincore(2) algorithm to only report data
  from the local mapping.

Modified:
  stable/11/lib/libc/sys/mincore.2
  stable/11/sys/vm/vm_mmap.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/lib/libc/sys/mincore.2
==============================================================================
--- stable/11/lib/libc/sys/mincore.2	Mon Jan 14 07:24:49 2019	(r343015)
+++ stable/11/lib/libc/sys/mincore.2	Mon Jan 14 07:25:44 2019	(r343016)
@@ -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: stable/11/sys/vm/vm_mmap.c
==============================================================================
--- stable/11/sys/vm/vm_mmap.c	Mon Jan 14 07:24:49 2019	(r343015)
+++ stable/11/sys/vm/vm_mmap.c	Mon Jan 14 07:25:44 2019	(r343016)
@@ -96,6 +96,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)
@@ -814,7 +817,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?201901140725.x0E7Pine064851>