freebsd with flexible iflib nic queues
Go to file
Conrad Meyer 844d9543dc Add ccp(4): experimental driver for AMD Crypto Co-Processor
* Registers TRNG source for random(4)
* Finds available queues, LSBs; allocates static objects
* Allocates a shared MSI-X for all queues.  The hardware does not have
  separate interrupts per queue.  Working interrupt mode driver.
* Computes SHA hashes, HMAC.  Passes cryptotest.py, cryptocheck tests.
* Does AES-CBC, CTR mode, and XTS.  cryptotest.py and cryptocheck pass.
* Support for "authenc" (AES + HMAC).  (SHA1 seems to result in
  "unaligned" cleartext inputs from cryptocheck -- which the engine
  cannot handle.  SHA2 seems to work fine.)
* GCM passes for block-multiple AAD, input lengths

Largely based on ccr(4), part of cxgbe(4).

Rough performance averages on AMD Ryzen 1950X (4kB buffer):
aesni:      SHA1: ~8300 Mb/s    SHA256: ~8000 Mb/s
ccp:               ~630 Mb/s    SHA256:  ~660 Mb/s  SHA512:  ~700 Mb/s
cryptosoft:       ~1800 Mb/s    SHA256: ~1800 Mb/s  SHA512: ~2700 Mb/s

As you can see, performance is poor in comparison to aesni(4) and even
cryptosoft (due to high setup cost).  At a larger buffer size (128kB),
throughput is a little better (but still worse than aesni(4)):

aesni:      SHA1:~10400 Mb/s    SHA256: ~9950 Mb/s
ccp:              ~2200 Mb/s    SHA256: ~2600 Mb/s  SHA512: ~3800 Mb/s
cryptosoft:       ~1750 Mb/s    SHA256: ~1800 Mb/s  SHA512: ~2700 Mb/s

AES performance has a similar story:

aesni:      4kB: ~11250 Mb/s    128kB: ~11250 Mb/s
ccp:               ~350 Mb/s    128kB:  ~4600 Mb/s
cryptosoft:       ~1750 Mb/s    128kB:  ~1700 Mb/s

This driver is EXPERIMENTAL.  You should verify cryptographic results on
typical and corner case inputs from your application against a known- good
implementation.

Sponsored by:	Dell EMC Isilon
Differential Revision:	https://reviews.freebsd.org/D12723
2018-01-18 22:01:30 +00:00
bin Convert ls(1) to not use libxo(3) 2018-01-17 22:47:34 +00:00
cddl Remove tst.zonename.d from the list of expected failures. 2018-01-14 17:56:19 +00:00
contrib Pull in r322106 from upstream llvm trunk (by Alexey Bataev): 2018-01-18 21:46:09 +00:00
crypto Merge OpenSSL 1.0.2n. 2017-12-07 18:02:57 +00:00
etc Teach the resolv startup script to respect its enable flag. 2018-01-18 20:45:41 +00:00
gnu build-tools: De-special-case the gcc tools build. 2017-10-31 19:02:05 +00:00
include Use the __result_use_check attribute also for reallocf(3). 2018-01-09 22:48:13 +00:00
kerberos5 various: general adoption of SPDX licensing ID tags. 2017-11-27 15:37:16 +00:00
lib Correct fsck journal-recovery code to update a cylinder-group 2018-01-17 17:58:24 +00:00
libexec rpc.sprayd: Remove 3rd and 4th clauses in christos' license. 2017-12-28 17:51:53 +00:00
release After removal of loader.ps3, change petitboot configuration in release media 2018-01-01 03:33:01 +00:00
rescue Avoid referencing private lib names directly. 2017-11-10 07:53:02 +00:00
sbin gnop(8): add the ability to set a nop provider's physical path 2018-01-18 05:57:10 +00:00
secure Merge OpenSSL 1.0.2n. 2017-12-07 18:02:57 +00:00
share stand: Add /boot/overlays to allow separation of overlays from base FDT 2018-01-18 04:58:54 +00:00
stand stand: Add /boot/overlays to allow separation of overlays from base FDT 2018-01-18 04:58:54 +00:00
sys Add ccp(4): experimental driver for AMD Crypto Co-Processor 2018-01-18 22:01:30 +00:00
targets Remove a reference to burncd 2017-12-29 23:56:06 +00:00
tests Add ccp(4): experimental driver for AMD Crypto Co-Processor 2018-01-18 22:01:30 +00:00
tools Merge ^/head r327624 through r327885. 2018-01-12 18:23:35 +00:00
usr.bin Update various statements in vmstat(8) to match reality. 2018-01-18 19:43:02 +00:00
usr.sbin Adjust format string to fix build. 2018-01-18 00:24:05 +00:00
.arcconfig callsign isn't required anymore 2016-09-29 06:19:45 +00:00
.arclint arc lint: ignore /tests/ in chmod 2017-12-19 03:38:06 +00:00
.gitattributes .git*: add gitattributes and gitignore 2017-12-25 21:07:54 +00:00
.gitignore .git*: add gitattributes and gitignore 2017-12-25 21:07:54 +00:00
COPYRIGHT Happy New Year 2018 my friends! 2017-12-31 16:48:04 +00:00
LOCKS
MAINTAINERS Move sys/boot to stand. Fix all references to new location 2017-11-14 23:02:19 +00:00
Makefile Import OpenSSL 1.0.2n. 2017-12-07 17:37:15 +00:00
Makefile.inc1 Don't build share/syscons in build-tools stage if MK_SYSCONS == "no" 2018-01-16 21:43:36 +00:00
Makefile.libcompat Check for GCC first rather than clang in the MIPS lib32 rules. 2018-01-16 01:05:04 +00:00
Makefile.sys.inc AUTO_OBJ: For all top-level targets enforce using an OBJDIR. 2017-12-05 21:29:47 +00:00
ObsoleteFiles.inc Upgrade our copies of clang, llvm, lld, lldb, compiler-rt and libc++ to 2018-01-14 00:08:34 +00:00
README Import OpenSSL 1.0.2n. 2017-12-07 17:37:15 +00:00
README.md Document the sys/boot -> stand move in hier.7 and the top-level README. 2017-12-03 20:36:36 +00:00
UPDATING Upgrade our copies of clang, llvm, lld, lldb, compiler-rt and libc++ to 2018-01-14 00:08:34 +00:00

FreeBSD Source:

This is the top level of the FreeBSD source directory. This file was last revised on: FreeBSD

For copyright information, please see the file COPYRIGHT in this directory (additional copyright information also exists for some sources in this tree - please see the specific source directories for more information).

The Makefile in this directory supports a number of targets for building components (or all) of the FreeBSD source tree. See build(7) and https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/makeworld.html for more information, including setting make(1) variables.

The buildkernel and installkernel targets build and install the kernel and the modules (see below). Please see the top of the Makefile in this directory for more information on the standard build targets and compile-time flags.

Building a kernel is a somewhat more involved process. See build(7), config(8), and https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig.html for more information.

Note: If you want to build and install the kernel with the buildkernel and installkernel targets, you might need to build world before. More information is available in the handbook.

The kernel configuration files reside in the sys/<arch>/conf sub-directory. GENERIC is the default configuration used in release builds. NOTES contains entries and documentation for all possible devices, not just those commonly used.

Source Roadmap:

bin				System/user commands.

cddl			Various commands and libraries under the Common Development  
				and Distribution License.

contrib			Packages contributed by 3rd parties.

crypto			Cryptography stuff (see crypto/README).

etc				Template files for /etc.

gnu				Various commands and libraries under the GNU Public License.  
				Please see gnu/COPYING* for more information.

include			System include files.

kerberos5		Kerberos5 (Heimdal) package.

lib				System libraries.

libexec			System daemons.

release			Release building Makefile & associated tools.

rescue			Build system for statically linked /rescue utilities.

sbin			System commands.

secure			Cryptographic libraries and commands.

share			Shared resources.

stand			Boot loader sources.

sys				Kernel sources.

tests			Regression tests which can be run by Kyua.  See tests/README
				for additional information.

tools			Utilities for regression testing and miscellaneous tasks.

usr.bin			User commands.

usr.sbin		System administration commands.

For information on synchronizing your source tree with one or more of the FreeBSD Project's development branches, please see:

https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/current-stable.html