support for asymmetric CPUs

From: Mike Karels <mike_at_karels.net>
Date: Tue, 01 Mar 2022 19:04:34 UTC
Has anyone been looking at scheduling issues for asymmetric CPUs like
those with performance cores and efficiency cores?  I've been looking
at this a little, with Intel's Alder Lake as an example.  E.g. the
i7-12700 has 8 performance cores with SMT (hyperthreading) and 4
efficiency cores without SMT.  The E-cores are supposedly better for
threaded processes.  Intel also has a hardware/firmware facility to
advise the OS about process behavior to guide placement.  I don't know
much about this yet, but there is supposedly support pending for Linux.
Looking ahead, the Apple M1 also has asymmetric CPUs with P-cores and
E-cores.  (Does FreeBSD support any ARM chips with asymmetric CPUs yet?)

It seems clear that there should be a generalized interface that supports
machine-dependent configuration, even if the hooks mostly end up pointing
to machine-independent routines in the scheduler in common cases.  I'd
envision initial support that just looked at CPU usage and adjusted the
cpusets for threads that were using the default cpuset.  I was also
thinking about exposing cpusets of P-cores and E-cores for use by
knowledgeable user processes.  I'm not sure whether it makes sense to
try to generalize beyond one dimension, higher-performance and lower-
performance cores, e.g. for vector-heavy processes or other potential
asymmetric capabilities.  I'm not sure how to generalize more, so that
could be a future exercise if there was a reason for it.

If anyone has thought about this or has done any work on it, I'd be
interested to hear about it.

		Mike