Is 12.0-CURRENT "slower" compaired to say 11.0-CURRENT?

Hi All,

Have a number of nodes using a mix of run(4) in a bridge with an em0(4) interfaces. All is functionally well.

However, I have found that releng/11.0 has a higher throughput than a snapshot of head (12-CURRENT) on an arm processor, in a controlled RF environment.

The difference is about 23% less throughput when using a snapshot of head (r308737) compared to releng/11.0 (r306211).

The only optimisation I have made is set in /boot/loader.conf to twiddle WITNESS off.

Is this to be expected for a snapshot of head, or is something up? As a punt I am guessing that head has a load of additional debug overhead that could account for this?

The wisdom of the forum would be greatly received!

FreeBSD 12.x has many debugging features turned on, in both the kernel
and userland. These features attempt to detect incorrect use of
system primitives, and encourage loud failure through extra sanity
checking and fail stop semantics. They also substantially impact
system performance. If you want to do performance measurement,
benchmarking, and optimization, you'll want to turn them off. This
includes various WITNESS- related kernel options, INVARIANTS, malloc
debugging flags in userland, and various verbose features in the
kernel. Many developers choose to disable these features on build
machines to maximize performance. (To completely disable malloc
debugging, define MALLOC_PRODUCTION in /etc/make.conf, or to merely
disable the most expensive debugging functionality run
"ln -s 'abort:false,junk:false' /etc/malloc.conf".)
Just to point out that there is a GENERIC-NODEBUG kernel that makes it pretty easy. If you run make kernel KERNCONF=GENERIC-NODEBUG and reboot, things will be faster.
Short answer, yes, HEAD, by default, has debugging code, the easy way to get rid of it is to use the nodebug kernel.