freebsd-dev/sys/conf
John Baldwin 82334850ea Add an external mbuf buffer type that holds multiple unmapped pages.
Unmapped mbufs allow sendfile to carry multiple pages of data in a
single mbuf, without mapping those pages.  It is a requirement for
Netflix's in-kernel TLS, and provides a 5-10% CPU savings on heavy web
serving workloads when used by sendfile, due to effectively
compressing socket buffers by an order of magnitude, and hence
reducing cache misses.

For this new external mbuf buffer type (EXT_PGS), the ext_buf pointer
now points to a struct mbuf_ext_pgs structure instead of a data
buffer.  This structure contains an array of physical addresses (this
reduces cache misses compared to an earlier version that stored an
array of vm_page_t pointers).  It also stores additional fields needed
for in-kernel TLS such as the TLS header and trailer data that are
currently unused.  To more easily detect these mbufs, the M_NOMAP flag
is set in m_flags in addition to M_EXT.

Various functions like m_copydata() have been updated to safely access
packet contents (using uiomove_fromphys()), to make things like BPF
safe.

NIC drivers advertise support for unmapped mbufs on transmit via a new
IFCAP_NOMAP capability.  This capability can be toggled via the new
'nomap' and '-nomap' ifconfig(8) commands.  For NIC drivers that only
transmit packet contents via DMA and use bus_dma, adding the
capability to if_capabilities and if_capenable should be all that is
required.

If a NIC does not support unmapped mbufs, they are converted to a
chain of mapped mbufs (using sf_bufs to provide the mapping) in
ip_output or ip6_output.  If an unmapped mbuf requires software
checksums, it is also converted to a chain of mapped mbufs before
computing the checksum.

Submitted by:	gallatin (earlier version)
Reviewed by:	gallatin, hselasky, rrs
Discussed with:	ae, kp (firewalls)
Relnotes:	yes
Sponsored by:	Netflix
Differential Revision:	https://reviews.freebsd.org/D20616
2019-06-29 00:48:33 +00:00
..
config.mk Remove IEEE80211_AMPDU_AGE config option. 2019-01-20 15:17:56 +00:00
dtb.build.mk fdt: Fix installation of aarch64 dtb 2019-05-02 16:56:03 +00:00
dtb.mk Allow kernel config to specify DTS/DTSO to build, and out-of-tree support 2019-03-26 02:45:23 +00:00
files Add an external mbuf buffer type that holds multiple unmapped pages. 2019-06-29 00:48:33 +00:00
files.amd64 Fix qlxgbe(4) static build. 2019-06-26 16:23:24 +00:00
files.arm Allow compiling ukbdmap.h on arm, since it appears to work fine. 2019-06-23 21:17:41 +00:00
files.arm64 sys: Remove DEV_RANDOM device option 2019-06-21 00:16:30 +00:00
files.i386 random(4): Fix RANDOM_LOADABLE build 2019-06-01 01:22:21 +00:00
files.mips Move scterm_teken.c from 6 MD files lists to the MI files list so that it 2019-02-21 17:31:33 +00:00
files.powerpc Remove NAND and NANDFS support 2019-06-25 04:50:09 +00:00
files.riscv Connect Xilinx AXI drivers and Cadence Ethernet MAC to the RISC-V build. 2019-05-08 16:06:54 +00:00
files.sparc64 Move scterm_teken.c from 6 MD files lists to the MI files list so that it 2019-02-21 17:31:33 +00:00
kern.mk Add an external mbuf buffer type that holds multiple unmapped pages. 2019-06-29 00:48:33 +00:00
kern.opts.mk Remove NAND and NANDFS support 2019-06-25 04:50:09 +00:00
kern.post.mk Fix build race with machine links and genoffset.o. 2019-05-10 18:09:27 +00:00
kern.pre.mk Specify -z notext when building with -z ifunc-noplt. 2019-05-14 18:26:39 +00:00
kmod_syms_prefix.awk
kmod_syms.awk
kmod.mk Restore genassym.o to CLEANFILES. 2019-06-11 23:35:34 +00:00
ldscript.amd64 Expose the kernel's build-ID through sysctl 2019-06-04 13:07:10 +00:00
ldscript.arm Expose the kernel's build-ID through sysctl 2019-06-04 13:07:10 +00:00
ldscript.arm64 Expose the kernel's build-ID through sysctl 2019-06-04 13:07:10 +00:00
ldscript.i386 Expose the kernel's build-ID through sysctl 2019-06-04 13:07:10 +00:00
ldscript.mips Expose the kernel's build-ID through sysctl 2019-06-04 13:07:10 +00:00
ldscript.mips.cfe Expose the kernel's build-ID through sysctl 2019-06-04 13:07:10 +00:00
ldscript.mips.mips64 Expose the kernel's build-ID through sysctl 2019-06-04 13:07:10 +00:00
ldscript.mips.octeon1 Expose the kernel's build-ID through sysctl 2019-06-04 13:07:10 +00:00
ldscript.powerpc Expose the kernel's build-ID through sysctl 2019-06-04 13:07:10 +00:00
ldscript.powerpc64 Expose the kernel's build-ID through sysctl 2019-06-04 13:07:10 +00:00
ldscript.powerpcspe Expose the kernel's build-ID through sysctl 2019-06-04 13:07:10 +00:00
ldscript.riscv Fix global pointer relaxations in the RISC-V kernel 2019-06-09 15:43:38 +00:00
ldscript.set_padding Fix dpcpu and vnet panics with complex types at the end of the section. 2019-06-08 17:44:42 +00:00
ldscript.sparc64 Expose the kernel's build-ID through sysctl 2019-06-04 13:07:10 +00:00
Makefile.amd64 Retire CLANG_NO_IAS34 2018-11-01 23:11:47 +00:00
Makefile.arm Only build the cache handling code we need when building the arm ELF 2018-07-28 12:50:09 +00:00
Makefile.arm64 Revert r336353 completely based on protest; compatibility shims incoming 2018-07-17 14:11:30 +00:00
Makefile.i386 Retire CLANG_NO_IAS34 2018-11-01 23:11:47 +00:00
Makefile.mips Revert r336353 completely based on protest; compatibility shims incoming 2018-07-17 14:11:30 +00:00
Makefile.powerpc Revert r336353 completely based on protest; compatibility shims incoming 2018-07-17 14:11:30 +00:00
Makefile.riscv Revert r336353 completely based on protest; compatibility shims incoming 2018-07-17 14:11:30 +00:00
Makefile.sparc64 Revert r336353 completely based on protest; compatibility shims incoming 2018-07-17 14:11:30 +00:00
makeLINT.mk Build an armv7 LINT kernel in addition to armv5 LINT. You might think this 2019-06-24 01:42:09 +00:00
makeLINT.sed
newvers.sh Defer evaluation of modified until after it's set 2019-05-31 22:57:20 +00:00
NOTES Add pwm devices to NOTES. 2019-06-24 02:39:56 +00:00
options Add support for extended descriptor format to Altera mSGDMA driver. 2019-06-27 18:08:18 +00:00
options.amd64 Remove iBCS2, part2: general kernel 2018-12-19 21:57:58 +00:00
options.arm Remove now the cow unused CPU_ARM9 and CPU_FA526 options. These are for 2018-07-28 11:00:45 +00:00
options.arm64 arm64: Add new SoC type MARVELL_8K 2018-12-12 21:58:30 +00:00
options.i386 i386: Merge PAE and non-PAE pmaps into same kernel. 2019-01-30 02:07:13 +00:00
options.mips Add SMP support for BERI CPU. 2018-04-12 17:43:19 +00:00
options.powerpc Move most of the contents of opt_compat.h to opt_global.h. 2018-04-06 17:35:35 +00:00
options.riscv o Add driver for PLIC (Platform-Level Interrupt Controller) device. 2018-06-12 17:45:15 +00:00
options.sparc64
systags.sh sys: further adoption of SPDX licensing ID tags. 2017-11-20 19:43:44 +00:00
WITHOUT_SOURCELESS
WITHOUT_SOURCELESS_HOST
WITHOUT_SOURCELESS_UCODE Remove adv(4) and adw(4) 2018-10-22 02:34:47 +00:00