freebsd-dev/sys
Alexander Motin 9a4510ac32 Implement zero-copy iSCSI target transmission/read.
Add ICL_NOCOPY flag to icl_pdu_append_data(), specifying that the method
can just reference the data buffer instead of immediately copying it.

Extend the offload KPI with optional PDU queue method, allowing to specify
completion callback, called when all the data referenced by above has been
transferred and won't be accessed any more (the buffers can be freed).

Implement the above functionality in software iSCSI driver using mbufs
with external storage and reference counter.  Note that some NICs (ixl(4))
may keep the mbuf in TX queue for a long time, so CTL has to be ready.

Add optional method to struct ctl_scsiio for buffer reference counting.
Implement it for CTL block backend, allowing to delay free of the struct
ctl_be_block_io and memory it references as needed.  In first reincarnation
of the patch I tried to delay whole I/O as it is done for FibreChannel,
that was cleaner, but due to the above callback delays I had to rewrite
it this way to not leave LUN referenced potentially for hours or more.

All together on sequential read from ZFS ARC this saves about 30% of CPU
time and memory bandwidth by avoiding one of 3 memory copies (the other
two are from ZFS ARC to DMU cache and then from DMU cache to CTL buffers).
On tests with 2x Xeon Silver 4114 this allows to reach full line rate of
100GigE NIC.  Tests with Gold CPUs and two 100GigE NICs are stil TBD,
but expectations to saturate them are pretty high. ;)

Discussed with:	Chelsio
Sponsored by:	iXsystems, Inc.
2020-06-08 20:53:57 +00:00
..
amd64 Handle getcpu() calls in vsyscall emulation on amd64. 2020-05-31 18:20:20 +00:00
arm Remove remnant of arm's ELF trampoline 2020-05-31 14:43:04 +00:00
arm64 Remove remnant of arm's ELF trampoline 2020-05-31 14:43:04 +00:00
bsm bsm: add AUE_CLOSERANGE 2020-04-24 01:27:25 +00:00
cam Implement zero-copy iSCSI target transmission/read. 2020-06-08 20:53:57 +00:00
cddl Fix entering KDB with dtrace-enabled kernel. 2020-05-26 16:44:05 +00:00
compat Ensure pci_channel_offline() actually queries the PCI register space, 2020-06-05 08:12:08 +00:00
conf powerpc: Use IFUNCs for copyin/copyout/etc 2020-06-06 03:09:12 +00:00
contrib Document upgrade procedure in FREEBSD-upgrade 2020-06-04 20:48:57 +00:00
crypto Rename skein_block_asm.s to .S and assemble using Clang IAS 2020-06-06 00:35:41 +00:00
ddb kernel: provide panicky version of __unreachable 2020-05-13 18:07:37 +00:00
dev Implement zero-copy iSCSI target transmission/read. 2020-06-08 20:53:57 +00:00
dts Remove licenses 2020-06-04 17:20:58 +00:00
fs tmpfs: Preserve alignment of struct fid fields 2020-06-03 09:38:51 +00:00
gdb Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (17 of many) 2020-02-26 14:26:36 +00:00
geom Revert r361838 2020-06-06 14:19:16 +00:00
gnu dts: patch the am33xx dts for upcoming clock support 2020-06-05 20:14:54 +00:00
i386 Fix boot on systems where NUMA domain 0 is unpopulated. 2020-05-28 19:41:00 +00:00
isa sc(4) md bits: stop setting sc->kbd entirely 2019-12-30 02:07:55 +00:00
kern Fix hang due to missing unbusy in sendfile when an async data I/O fails. 2020-06-06 00:02:50 +00:00
kgssapi Add support for optional separate output buffers to in-kernel crypto. 2020-05-25 22:12:04 +00:00
libkern libkern: Add arc4random_uniform 2020-05-23 17:51:06 +00:00
mips [mips] fix up the assembly generation of unaligned exception loads 2020-05-29 00:05:43 +00:00
modules Rename skein_block_asm.s to .S and assemble using Clang IAS 2020-06-06 00:35:41 +00:00
net Refer to AES-CBC as "aes-cbc" rather than "rijndael-cbc" for IPsec. 2020-06-04 22:58:37 +00:00
net80211 [net80211] Add a method to return the vap's ifname. 2020-06-07 04:57:48 +00:00
netgraph Fix check for wMaxPacketSize in USB bluetooth driver, 2020-05-28 08:41:18 +00:00
netinet Whitespace cleanups and removal of a stale comment. 2020-06-08 20:23:20 +00:00
netinet6 Retire SCTP_SO_LOCK_TESTING. 2020-06-07 14:39:20 +00:00
netipsec Consistently include opt_ipsec.h for consumers of <netipsec/ipsec.h>. 2020-05-29 19:22:40 +00:00
netpfil ipfw: unbreak matching with big table type flow. 2020-06-04 14:15:39 +00:00
netsmb Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (17 of many) 2020-02-26 14:26:36 +00:00
nfs Use epoch(9) for rtentries to simplify control plane operations. 2020-05-23 10:21:02 +00:00
nfsclient
nfsserver
nlm Make nfslockd depend on xdr. 2020-04-23 09:37:22 +00:00
ofed Convert OFED rtable interactions to the new routing KPI. 2020-04-15 13:06:55 +00:00
opencrypto Use separate output buffers for OCF requests in KTLS. 2020-06-04 20:12:34 +00:00
powerpc powerpc/powernv: Don't configure disabled CPUs 2020-06-08 02:28:00 +00:00
riscv riscv: Use SBI shutdown call to implement RB_POWEROFF 2020-06-08 17:57:21 +00:00
rpc Add the .h file that describes the operations for the rpctls_syscall. 2020-05-31 01:12:52 +00:00
security Deduplicate fsid comparisons 2020-05-21 01:55:35 +00:00
sys Move MPASS() macros to systm.h. They are widely used all over 2020-06-08 17:40:39 +00:00
teken
tests Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (17 of many) 2020-02-26 14:26:36 +00:00
tools vfs: stop null checking routines in vop wrappers 2020-01-26 00:41:38 +00:00
ufs Clear the IN_SIZEMOD and IN_IBLKDATA flags only when doing a 2020-06-06 20:17:56 +00:00
vm Don't mark pages as valid if reading the contents from disk fails. 2020-06-06 00:47:59 +00:00
x86 Remove unnecessary WITNESS check in x86 bus_dma 2020-06-03 00:16:36 +00:00
xdr Split XDR into separate kernel module. Make krpc depend on xdr. 2020-04-17 06:04:20 +00:00
xen Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (16 of many) 2020-02-25 19:04:39 +00:00
Makefile Remove sparc64 kernel support 2020-02-03 17:35:11 +00:00