1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-12-18 10:35:55 +00:00
freebsd/lib/libc
Mark Johnston 54a3a11421 Provide separate accounting for user-wired pages.
Historically we have not distinguished between kernel wirings and user
wirings for accounting purposes.  User wirings (via mlock(2)) were
subject to a global limit on the number of wired pages, so if large
swaths of physical memory were wired by the kernel, as happens with
the ZFS ARC among other things, the limit could be exceeded, causing
user wirings to fail.

The change adds a new counter, v_user_wire_count, which counts the
number of virtual pages wired by user processes via mlock(2) and
mlockall(2).  Only user-wired pages are subject to the system-wide
limit which helps provide some safety against deadlocks.  In
particular, while sources of kernel wirings typically support some
backpressure mechanism, there is no way to reclaim user-wired pages
shorting of killing the wiring process.  The limit is exported as
vm.max_user_wired, renamed from vm.max_wired, and changed from u_int
to u_long.

The choice to count virtual user-wired pages rather than physical
pages was done for simplicity.  There are mechanisms that can cause
user-wired mappings to be destroyed while maintaining a wiring of
the backing physical page; these make it difficult to accurately
track user wirings at the physical page layer.

The change also closes some holes which allowed user wirings to succeed
even when they would cause the system limit to be exceeded.  For
instance, mmap() may now fail with ENOMEM in a process that has called
mlockall(MCL_FUTURE) if the new mapping would cause the user wiring
limit to be exceeded.

Note that bhyve -S is subject to the user wiring limit, which defaults
to 1/3 of physical RAM.  Users that wish to exceed the limit must tune
vm.max_user_wired.

Reviewed by:	kib, ngie (mlock() test changes)
Tested by:	pho (earlier version)
MFC after:	45 days
Sponsored by:	Netflix
Differential Revision:	https://reviews.freebsd.org/D19908
2019-05-13 16:38:48 +00:00
..
aarch64 Fix initial exec TLS mode for dynamically loaded shared objects. 2019-03-29 17:52:57 +00:00
amd64 Fix initial exec TLS mode for dynamically loaded shared objects. 2019-03-29 17:52:57 +00:00
arm Fix initial exec TLS mode for dynamically loaded shared objects. 2019-03-29 17:52:57 +00:00
capability
compat-43
db
gdtoa
gen directory.3: add a STANDARDS section 2019-05-02 19:59:37 +00:00
gmon
i386 Fix initial exec TLS mode for dynamically loaded shared objects. 2019-03-29 17:52:57 +00:00
iconv
include Fix initial exec TLS mode for dynamically loaded shared objects. 2019-03-29 17:52:57 +00:00
inet
isc
locale
md
mips Fix initial exec TLS mode for dynamically loaded shared objects. 2019-03-29 17:52:57 +00:00
nameser
net Use IN_foo() macros from sys/netinet/in.h inplace of handcrafted code 2019-04-04 19:01:13 +00:00
nls Create new EINTEGRITY error with message "Integrity check failed". 2019-01-17 06:35:45 +00:00
posix1e Remove some redundant code in _posix1e_acl_strip_np 2019-02-19 19:15:15 +00:00
powerpc Fix initial exec TLS mode for dynamically loaded shared objects. 2019-03-29 17:52:57 +00:00
powerpc64 revert r346588 for now 2019-05-11 15:17:42 +00:00
powerpcspe
quad
regex regcomp: revert part of r341838 which turned out to be unrelated 2018-12-19 23:28:56 +00:00
resolv
riscv Fix initial exec TLS mode for dynamically loaded shared objects. 2019-03-29 17:52:57 +00:00
rpc
secure
softfloat
sparc64 Fix initial exec TLS mode for dynamically loaded shared objects. 2019-03-29 17:52:57 +00:00
stdio GC a historical artifact. 2019-02-07 23:17:44 +00:00
stdlib random.3: Remove obsolete BUGS section 2019-04-22 16:29:34 +00:00
stdtime
string libc: update strstr implementation to match musl 2019-04-09 15:52:18 +00:00
sys Provide separate accounting for user-wired pages. 2019-05-13 16:38:48 +00:00
tests Provide separate accounting for user-wired pages. 2019-05-13 16:38:48 +00:00
uuid
x86 pkru(3) man page. 2019-02-20 10:03:03 +00:00
xdr
yp
libc_nossp.ldscript
libc.ldscript
Makefile revert r341429 "disable BIND_NOW in libc, libthr, and rtld" 2019-03-28 02:12:32 +00:00
Makefile.depend
Versions.def