freebsd-dev/sys
Mark Johnston f31695cc64 Implement sparse core dumps
Currently we allocate and map zero-filled anonymous pages when dumping
core.  This can result in lots of needless disk I/O and page
allocations.  This change tries to make the core dumper more clever and
represent unbacked ranges of virtual memory by holes in the core dump
file.

Add a new page fault type, VM_FAULT_NOFILL, which causes vm_fault() to
clean up and return an error when it would otherwise map a zero-filled
page.  Then, in the core dumper code, prefault all user pages and handle
errors by simply extending the size of the core file.  This also fixes a
bug related to the fact that vn_io_fault1() does not attempt partial I/O
in the face of errors from vm_fault_quick_hold_pages(): if a truncated
file is mapped into a user process, an attempt to dump beyond the end of
the file results in an error, but this means that valid pages
immediately preceding the end of the file might not have been dumped
either.

The change reduces the core dump size of trivial programs by a factor of
ten simply by excluding unaccessed libc.so pages.

PR:		249067
Reviewed by:	kib
Tested by:	pho
MFC after:	1 month
Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D26590
2020-10-02 17:50:22 +00:00
..
amd64 Remove svn:executable from a couple of vmm(4) source files. 2020-10-01 22:20:29 +00:00
arm Get rid of sa->narg. It serves no purpose; use sa->callp->sy_narg instead. 2020-09-27 18:47:06 +00:00
arm64 Add cd device to arm64 GENERIC 2020-10-01 13:29:29 +00:00
bsm bsm: add AUE_CLOSERANGE 2020-04-24 01:27:25 +00:00
cam Revert most of r360179. 2020-09-25 21:19:56 +00:00
cddl loader: zfs should support bootonce an nextboot 2020-09-21 09:01:10 +00:00
compat Regen after r366145. 2020-09-25 10:05:38 +00:00
conf Rename kernel option ACPI_DMAR to IOMMU. 2020-09-29 20:29:07 +00:00
contrib OpenZFS: don't call fpu_kern_thread on i386 2020-10-02 01:25:08 +00:00
crypto libmd: fix assembly optimized skein implementation 2020-10-01 21:05:50 +00:00
ddb ddb: clean up empty lines in .c and .h files 2020-09-01 22:14:30 +00:00
dev flash: Add support for SPI flash s25fl512s 2020-10-02 17:33:56 +00:00
dts Remove licenses 2020-06-04 17:20:58 +00:00
fs Modify the NFSv4.2 VOP_COPY_FILE_RANGE() client call to return after one 2020-10-01 00:47:35 +00:00
gdb gdb(4): Don't escape GDB special characters at application layer 2020-09-30 14:55:54 +00:00
geom geom_part: make it possible recovering broken GPT after some LBAs cut off 2020-09-17 04:39:39 +00:00
gnu Import DTS files for arm, arm64, riscv from Linux 5.8 2020-08-04 19:44:43 +00:00
i386 Rename kernel option ACPI_DMAR to IOMMU. 2020-09-29 20:29:07 +00:00
isa
kern Implement sparse core dumps 2020-10-02 17:50:22 +00:00
kgssapi State kgssapi dependency on xdr. 2020-09-17 22:29:38 +00:00
libkern arm64: check for CRC32 support via HWCAP 2020-09-08 15:39:19 +00:00
mips Get rid of sa->narg. It serves no purpose; use sa->callp->sy_narg instead. 2020-09-27 18:47:06 +00:00
modules Don't define _STANDALONE when building kernel modules. 2020-09-24 07:10:34 +00:00
net add SIOCGIFDATA ioctl 2020-09-28 16:54:39 +00:00
net80211 Provide MS() and SM() macros for 80211 and wireless drivers. 2020-09-24 10:57:39 +00:00
netgraph ng_l2tp: Fix callout synchronization in the rexmit timeout handler 2020-09-25 18:55:50 +00:00
netinet Improve the input validation and processing of cookies. 2020-09-29 09:36:06 +00:00
netinet6 Rework part of routing code to reduce difference to D26449. 2020-09-21 20:02:26 +00:00
netipsec net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
netpfil net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
netsmb net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
nfs nfs: clean up empty lines in .c and .h files 2020-09-01 21:25:39 +00:00
nfsclient nfs: clean up empty lines in .c and .h files 2020-09-01 21:25:39 +00:00
nfsserver nfs: clean up empty lines in .c and .h files 2020-09-01 21:25:39 +00:00
nlm nlm: clean up empty lines in .c and .h files 2020-09-01 22:14:52 +00:00
ofed infiniband: Appease Coverty 2020-08-31 16:17:28 +00:00
opencrypto Include sys/types.h here 2020-09-15 15:21:29 +00:00
powerpc Get rid of sa->narg. It serves no purpose; use sa->callp->sy_narg instead. 2020-09-27 18:47:06 +00:00
riscv riscv: handle access faults in user mode 2020-10-02 07:30:11 +00:00
rpc Fix a potential memory leak in the NFS over TLS handling code. 2020-09-05 00:50:52 +00:00
security mac_framework.h: fix build with DEBUG_VFS_LOCKS and !MAC 2020-09-03 20:30:52 +00:00
sys Standalone SX shims 2020-09-29 18:06:02 +00:00
teken Do a sweep and remove most WARNS=6 settings 2020-10-01 01:10:51 +00:00
tests Add small tool to invoke kernel test framework tests. 2020-09-02 09:20:40 +00:00
tools Make makesyscalls.lua initialize 'struct sysent' entries using c99 2020-09-25 09:34:00 +00:00
ufs Convert page cache read to VOP. 2020-09-15 22:06:36 +00:00
vm Implement sparse core dumps 2020-10-02 17:50:22 +00:00
x86 Rename kernel option ACPI_DMAR to IOMMU. 2020-09-29 20:29:07 +00:00
xdr xdr: clean up empty lines in .c and .h files 2020-09-01 22:13:28 +00:00
xen xen: clean up empty lines in .c and .h files 2020-09-01 21:21:55 +00:00
Makefile