Periodic rant about SCHED_ULE

From: George Mitchell <george+freebsd_at_m5p.com>
Date: Wed, 07 Jul 2021 17:47:47 UTC
CPU: AMD Ryzen 5 2600X Six-Core Processor (3600.10-MHz K8-class CPU)
(12 threads).

FreeBSD 12.2-RELEASE-p7 r369865 GENERIC  amd64 (SCHED_ULE) vs
FreeBSD 12.2-RELEASE-p7 r369865 M5P  amd64 (SCHED_4BSD).

Comparing "make buildworld" time with misc/dnetc running vs not running.
(misc/dnetc is your basic 100% compute-bound task, running at nice 20.)

Three out of the four combinations build in roughly four hours, but
SCHED_ULE with dnetc running takes close to twelve!  (And that was
overnight with basically nothing else running.)  This is an even
worse disparity than I have seen in previous releases.

Based on my total lack of an exact understanding of how loadable
kernel modules work, I nevertheless hypothesize that it should be
possible for the scheduler to be a loadable kernel module, given that
the interface to the schedule seems to have been carefully thought out
and scrupulously observed by both ULE and 4BSD.  Perhaps the system
could start with a dummy scheduler that is just barely functional
enough to get the appropriate module loaded and have it supersede the
dummy scheduler?  Then switching between the schedulers would become
much less of a hassle than it is currently.  Why, if it is configurable,
it could even be compatible with freebsd-update!

I've been ranting about this for years now, and I've had my say -- but
no one has ever answered my question about what workload SCHED_ULE is
best for, though numerous people have claimed that it's better than
SCHED_4BSD for -- some rumored workload or other.          -- George