freebsd-dev/usr.bin
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
..
addr2line
alias
apply
ar ar: shuffle symbol offsets during conversion for 32-bit ar archives 2019-04-22 19:55:47 +00:00
asa
at
atm
awk
banner
basename
bc Sync with OpenBSD. 2019-01-12 12:35:02 +00:00
biff
bluetooth
bmake Merge bmake-20181221 2018-12-23 01:05:52 +00:00
brandelf cap_fileargs: chase r346315, update fileargs_init in consumers 2019-04-17 16:18:14 +00:00
bsdcat
bsdiff bspatch: simplify capsicumization 2018-11-07 21:01:14 +00:00
bzip2
bzip2recover
c89
c99
caesar
calendar Update the spelling of my name 2019-04-22 17:52:46 +00:00
cap_mkdb
chat
chkey
chpass
cksum
clang Merge ^/head r344178 through r344512. 2019-02-25 11:59:29 +00:00
cmp Drop "All rights reserved" from the files I own 2019-03-11 22:23:56 +00:00
col
colldef
colrm
column
comm
compile_et
compress Fix descriptor/memory leak in compress(1) code 2019-01-18 00:26:25 +00:00
cpio
cpuset
csplit
ctags
ctlstat Flush stdout after each iteration. 2019-03-06 15:19:04 +00:00
cut
cxxfilt
dc Drop "All rights reserved" from the files I own 2019-03-11 22:23:56 +00:00
diff capsicum: use a new capsicum helpers in tools 2018-11-04 19:24:49 +00:00
diff3 capsicum: use a new capsicum helpers in tools 2018-11-04 19:24:49 +00:00
dirname
dpv
drill
dtc Fix build issue with clang 8.0.1 2019-05-10 17:05:40 +00:00
du Update the spelling of my name 2019-04-22 17:52:46 +00:00
ee
elf2aout
elfdump elfdump: use designated array initialization for note types 2019-01-31 16:49:06 +00:00
enigma
env
etdump
expand
factor
false
fetch
file
file2c
find Fix whiteout support in find(1) 2019-01-28 02:00:39 +00:00
finger
fmt
fold
fortune A few corrections and clarifications to r343406. 2019-01-28 19:54:58 +00:00
from
fstat Print type designator 'D' for the KF_TYPE_DEV files. 2018-12-03 23:42:04 +00:00
fsync
ftp
gcore
gencat
getaddrinfo
getconf Update the spelling of my name 2019-04-22 17:52:46 +00:00
getent
getopt
gprof
grdc
grep Fix bsdgrep manpage clobbering grep(1) with default build options 2019-01-09 02:47:07 +00:00
gzip Correct documentation year. 2019-01-07 08:29:27 +00:00
head cap_fileargs: chase r346315, update fileargs_init in consumers 2019-04-17 16:18:14 +00:00
hesinfo
hexdump hexdump(1): Exit gracefully on format strings missing conversion 2019-04-13 16:51:48 +00:00
host
iconv
id
ident
indent capsicum: use a new capsicum helpers in tools 2018-11-04 19:24:49 +00:00
ipcrm
ipcs ipcs(1): drop obsolete error checking 2019-02-07 14:29:45 +00:00
iscsictl iscsictl.8: Add missing flag parameters 2018-12-27 14:44:01 +00:00
join
jot Fix 'jot -r 0 start end' to work. 2019-04-16 00:41:22 +00:00
kdump kdump: expand comment on reasons for CAPFAIL_LOOKUP 2019-02-18 03:49:16 +00:00
keylogin
keylogout
killall
ktrace
ktrdump capsicum: use a new capsicum helpers in tools 2018-11-04 19:24:49 +00:00
lam The lam(1) man page is unclear about the uppercase versions of the flags 2019-01-04 02:48:43 +00:00
last A single comma was missing to separate the "see also" items in 2018-10-20 17:22:04 +00:00
lastcomm
ldd Add an IMPLEMENTATION NOTES section to ldd.1. 2018-10-23 13:49:53 +00:00
leave
less
lessecho
lesskey
lex
limits
locale
localedef localedef: define characters in "space" class also as "print", except 2018-10-27 23:31:42 +00:00
locate
lock
lockf lockf(1): return EX_UNAVAILABLE if -n is used and the lock file does not 2019-03-20 07:40:38 +00:00
logger
login
logins
logname
look
lorder
lsvfs
lzmainfo
m4
mail
man Teach man(1) about C.UTF-8. 2018-11-04 16:58:55 +00:00
mandoc Suppress old gcc warning about null format string 2019-04-12 18:35:14 +00:00
mesg
minigzip Move contrib/zlib to sys/contrib/zlib so that we can use it in kernel. 2019-05-08 08:43:15 +00:00
ministat
mkcsmapper
mkcsmapper_static
mkdep
mkesdb
mkesdb_static
mkfifo
mkimg Don't compress and uuencode the "hexdump -C" output files. Just 2019-03-09 02:03:07 +00:00
mklocale
mkstr
mktemp
mkuzip Minor cleanup for mkuzip(8) man page. 2019-02-19 20:26:03 +00:00
morse
msgs
mt Add IBM TS1160 density codes to libmt and the mt(1) man page. 2019-03-04 14:30:37 +00:00
nc
ncal Do not reference deskutils/cal from cal.1. 2019-03-07 11:09:25 +00:00
netstat Add stat counter for ipv6 atomic fragments 2019-04-19 17:06:43 +00:00
newgrp
newkey newkey(8): fix 'tmpname' memory leak (always) and input file descriptor leak 2019-02-08 14:31:44 +00:00
nfsstat Fix printing of the line that starts with "LocalOpen...". 2019-04-13 23:26:02 +00:00
nice
nl
nm
nohup Cross-reference nohup(1) and daemon(8). 2018-11-09 13:47:06 +00:00
number
objcopy
ofed
opieinfo
opiekey
opiepasswd
pagesize
pamtest
passwd
paste
patch patch(1): Exit successfully if we're fed a 0-length patch 2019-03-01 01:20:21 +00:00
pathchk
perror
pom pom: Fix fencepost bugs. 2018-11-20 00:06:53 +00:00
pr Drop "All rights reserved" from the files I own 2019-03-11 22:23:56 +00:00
primes Remove unneeded assert.h (there is no assertion in this file). 2019-01-06 20:42:09 +00:00
printenv
printf
proccontrol proccontrol(1): Add kpti control mode. 2019-03-16 11:46:48 +00:00
procstat Update the spelling of my name 2019-04-22 17:52:46 +00:00
protect
quota
random
rctl rctl: fix sysctl kern.racct.enable use after r341182 2019-04-03 20:37:14 +00:00
readelf
renice
resizewin
rev
revoke
rpcgen
rpcinfo
rs
rup
ruptime Fix indentation in ruptime command output for hosts in the "down" state. 2019-01-12 12:57:32 +00:00
rusers
rwall
rwho capsicum: use a new capsicum helpers in tools 2018-11-04 19:24:49 +00:00
script
sdiff
sdiotool
sed usr.bin/sed/tests: fix one of the regression test cases by adding its 2018-10-31 15:04:41 +00:00
seq seq(1): Require user-provided format strings to contain a conversion 2019-03-07 18:24:16 +00:00
setchannel
shar Shar files may be seen as binary by grep. 2019-01-31 23:21:18 +00:00
showmount
size
smbutil
sockstat
soelim
sort sort(1): Memoize MD5 computation to reduce repeated computation 2019-04-13 04:42:17 +00:00
split
ssh-copy-id
stat Unbreak the tests after r347002. 2019-05-01 19:35:45 +00:00
stdbuf
strings strings: disable Casper support while building native-xtools 2019-04-08 03:35:47 +00:00
su
svn svn: support building with WITH_PIE 2019-02-21 15:08:25 +00:00
systat Add stat counter for ipv6 atomic fragments 2019-04-19 17:06:43 +00:00
tabs
tail Drop "All rights reserved" from the files I own 2019-03-11 22:23:56 +00:00
talk Use a private definition of osockaddr rather then relying on type 2019-01-18 21:30:06 +00:00
tar
tcopy
tee capsicum: use a new capsicum helpers in tools 2018-11-04 19:24:49 +00:00
telnet
tests
tftp
time
timeout
tip
top Fix regression in top(1) after r344381, causing informational messages 2019-04-02 18:01:54 +00:00
touch
tput
tr
true
truncate
truss truss: Add support for fsync(2) and fdatasync(2). 2019-02-28 09:13:41 +00:00
tset
tsort
tty
ul
uname
unexpand
unifdef
uniq capsicum: use a new capsicum helpers in tools 2018-11-04 19:24:49 +00:00
units Correct a typo: was -> way. 2019-01-21 15:27:58 +00:00
unvis
unzip
usbhidaction
usbhidctl
users
uudecode
uuencode Make outfile constant. 2018-11-12 07:14:34 +00:00
vacation
vgrind
vi
vis
vmstat Provide separate accounting for user-wired pages. 2019-05-13 16:38:48 +00:00
vtfontcvt vtfontcvt: whitespace cleanup 2019-02-06 18:50:48 +00:00
w
wall
wc cap_fileargs: chase r346315, update fileargs_init in consumers 2019-04-17 16:18:14 +00:00
what
whereis Silence Clang Scan warnings regarding the use of strcp(). 2019-01-24 18:39:45 +00:00
which
who
whois
write Remove extraneous setutxent() calls in write(1). 2019-01-23 20:02:17 +00:00
xargs
xinstall install(1): Fix relative path calculation with partial common dest/src 2019-01-31 05:20:11 +00:00
xo
xohtml Import libxo-1.0.4: 2019-05-06 20:20:21 +00:00
xolint
xopo
xstr
xz
xzdec
yacc
yes
ypcat
ypmatch
ypwhich
zstd Update to Zstandard 1.4.0 2019-04-19 02:54:13 +00:00
Makefile Move trim(1) from usr.bin to usr.sbin to become trim(8). 2018-11-29 16:08:16 +00:00
Makefile.amd64
Makefile.arm
Makefile.i386
Makefile.inc
Makefile.powerpc
Makefile.sparc64