freebsd kernel with SKQ
Go to file
Alexander V. Chernikov f5baf8bb12 Add modular fib lookup framework.
This change introduces framework that allows to dynamically
 attach or detach longest prefix match (lpm) lookup algorithms
 to speed up datapath route tables lookups.

Framework takes care of handling initial synchronisation,
 route subscription, nhop/nhop groups reference and indexing,
 dataplane attachments and fib instance algorithm setup/teardown.
Framework features automatic algorithm selection, allowing for
 picking the best matching algorithm on-the-fly based on the
 amount of routes in the routing table.

Currently framework code is guarded under FIB_ALGO config option.
An idea is to enable it by default in the next couple of weeks.

The following algorithms are provided by default:
IPv4:
* bsearch4 (lockless binary search in a special IP array), tailored for
  small-fib (<16 routes)
* radix4_lockless (lockless immutable radix, re-created on every rtable change),
  tailored for small-fib (<1000 routes)
* radix4 (base system radix backend)
* dpdk_lpm4 (DPDK DIR24-8-based lookups), lockless datastrucure, optimized
  for large-fib (D27412)
IPv6:
* radix6_lockless (lockless immutable radix, re-created on every rtable change),
  tailed for small-fib (<1000 routes)
* radix6 (base system radix backend)
* dpdk_lpm6 (DPDK DIR24-8-based lookups), lockless datastrucure, optimized
  for large-fib (D27412)

Performance changes:
Micro benchmarks (I7-7660U, single-core lookups, 2048k dst, code in D27604):
IPv4:
8 routes:
  radix4: ~20mpps
  radix4_lockless: ~24.8mpps
  bsearch4: ~69mpps
  dpdk_lpm4: ~67 mpps
700k routes:
  radix4_lockless: 3.3mpps
  dpdk_lpm4: 46mpps

IPv6:
8 routes:
  radix6_lockless: ~20mpps
  dpdk_lpm6: ~70mpps
100k routes:
  radix6_lockless: 13.9mpps
  dpdk_lpm6: 57mpps

Forwarding benchmarks:
+ 10-15% IPv4 forwarding performance (small-fib, bsearch4)
+ 25% IPv4 forwarding performance (full-view, dpdk_lpm4)
+ 20% IPv6 forwarding performance (full-view, dpdk_lpm6)

Control:
Framwork adds the following runtime sysctls:

List algos
* net.route.algo.inet.algo_list: bsearch4, radix4_lockless, radix4
* net.route.algo.inet6.algo_list: radix6_lockless, radix6, dpdk_lpm6
Debug level (7=LOG_DEBUG, per-route)
net.route.algo.debug_level: 5
Algo selection (currently only for fib 0):
net.route.algo.inet.algo: bsearch4
net.route.algo.inet6.algo: radix6_lockless

Support for manually changing algos in non-default fib will be added
soon. Some sysctl names will be changed in the near future.

Differential Revision: https://reviews.freebsd.org/D27401
2020-12-25 11:33:17 +00:00
.github/workflows GH Actions: Use pre-installed clang packages 2020-11-26 14:42:16 +00:00
bin Remove unused includes. 2020-12-22 21:04:36 -08:00
cddl dtrace: honor LC_NUMERIC for %'d and alike, and LC_TIME for %T 2020-12-03 11:59:40 +00:00
contrib Sync ippool.8 man page synopsis with reality and the rest of the 2020-12-23 17:04:34 -08:00
crypto Merge OpenSSL 1.1.1i. 2020-12-09 02:05:14 +00:00
etc Missed adding netgraph to mtree in r368443: 2020-12-08 17:44:34 +00:00
gnu Remove additional GDB leftovers missed in r368667 2020-12-15 18:12:03 +00:00
include Change POSIX compliance level for visibility of strerror_l(3). 2020-12-17 17:08:25 +00:00
kerberos5 Fix more -Wundef warnings during bootstrap 2020-10-14 12:28:54 +00:00
lib mmap(2): Update .Dd missed in the last commit 2020-12-24 14:14:56 +00:00
libexec rtld-elf: link udivmoddi4 from compiler_rt 2020-12-19 08:38:31 +00:00
release riscv: increase GENERICSD gap 2020-12-16 20:21:56 +00:00
rescue ping: add a ping6 hard link for backwards compatibility 2020-11-26 18:33:04 +00:00
sbin mount_nfs(8): add a description for the new "tlscertname" option 2020-12-24 14:20:06 -08:00
secure caroot: update bundle 2020-12-11 18:14:43 +00:00
share wmt(4): Add support for touchpads 2020-12-24 01:22:56 +03:00
stand lualoader: fix lua-lint run 2020-12-17 18:29:30 +00:00
sys Add modular fib lookup framework. 2020-12-25 11:33:17 +00:00
targets Add WITH_CLANG_FORMAT option 2020-06-24 17:03:42 +00:00
tests pf tests: Verify (tcp) checksum modification on unaligned options 2020-12-23 12:03:20 +01:00
tools make the git commit message template more compact 2020-12-23 08:58:17 -05:00
usr.bin patch(1): Fix a few mandoc related issues 2020-12-19 13:00:17 +00:00
usr.sbin Don't set more_data which is never used. 2020-12-24 18:49:12 -08:00
.arcconfig arcconfig: add callsign again 2020-11-23 04:39:29 +00:00
.arclint arc lint: ignore /tests/ in chmod 2017-12-19 03:38:06 +00:00
.cirrus.yml CI: switch to qemu42 package 2020-10-29 02:02:30 +00:00
.clang-format clang-format: Avoid breaking after the opening paren of function definitions 2020-10-28 11:54:00 +00:00
.gitattributes Add a basic clang-format configuration file 2019-06-07 15:23:52 +00:00
.gitignore Stop ignoring makeLINT generated files 2020-10-09 00:27:45 +00:00
COPYRIGHT Happy New Year 2020! 2019-12-31 16:01:36 +00:00
LOCKS LOCKS: update current locks 2018-06-09 03:08:04 +00:00
MAINTAINERS Add a pointer to csprng@ for the CSPRNG driver. This is enforced anyway by 2020-09-01 08:02:12 +00:00
Makefile Makefile: re-wordsmith the blurb about xtoolchain ports 2020-11-14 18:06:35 +00:00
Makefile.inc1 Remove additional GDB leftovers missed in r368667 2020-12-15 18:12:03 +00:00
Makefile.libcompat Race in 32-bit fixed 2020-10-08 17:30:05 +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 Retire obsolete GDB 6.1.1 2020-12-15 17:44:19 +00:00
README Mark the repository has been converted to Git 2020-12-23 12:27:27 +08:00
README.md Mark the repository has been converted to Git 2020-12-23 12:27:27 +08:00
RELNOTES Add relnote for r368667, GDB 6.1.1 removal 2020-12-15 17:52:04 +00:00
UPDATING UPDATING: Announce git transition 2020-12-23 09:40:45 -07:00

FreeBSD Source:

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

FreeBSD is an operating system used to power modern servers, desktops, and embedded platforms. A large community has continually developed it for more than thirty years. Its advanced networking, security, and storage features have made FreeBSD the platform of choice for many of the busiest web sites and most pervasive embedded networking and storage devices.

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), config(8), https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/makeworld.html, and https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig.html for more information, including setting make(1) variables.

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.

sys/<arch>/conf Kernel configuration files. GENERIC is the configuration
		used in release builds. NOTES contains documentation of
		all possible entries.

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