You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
this materializes RFD 314 and in some respects, 505.
builds on #8725 for CPU
family information, which is a stand-in for the notion of sled families
and generations described in RFD 314. There are a few important details
here where CPU platforms differ from the sled CPU family and I've
refreshed RFD 314 (and 505) as appropriate.
## hardware CPU families are less linear than Oxide CPU platforms.
We can (and do, in RFD 314) define Milan restrictively enough that we
can present Turin (and probably later!) CPUs to guests "as if" they were
Milan. Similarly I'd expect that Turin would be defined as roughly
"Milan-plus-some-AVX-512-features" and pretty forward-compatible.
Importantly these are related to but not directly representative of real
CPUs; as an example I'd expect "Turin"-the-instance-CPU-platform to be
able to run on a Turin Dense CPU. Conversely, there's probably not a
reason _to_ define a "Turin Dense" CPU platform since from a guest
perspective they'd look about the same.
But at the same time the lineage through the AMD server part family
splits at Zen 4 kind of, with Zen 4 vs Zen 4c-based parts and similar
with Zen 5/c. It's somewhat hard (I think) to predict what workloads
would be sensitive to this. And as
#8730 gets into a bit,
the details of a processor's packaging (core topology, frequency, cache
size) can vary substantially even inside one CPU family. The important
part here is that we do not expect CPU platforms to cover these
details and it would probably be cumbersome to try; if the instance's
constraint is "I want AVX256, and I want to be on high-frequency-capable
processors only", then it doesn't actually matter if it's run on a Turin
or a Milan and to tie it to that CPU platform may be overly restrictive.
On instance CPU platforms, the hope is that by focusing on CPU features
we're able to present a more linear path as the microarchitectures grow.
## instance platforms aren't "minimum"
I've walked back the initial description of an instance's CPU platform
as the "minimum CPU platform". As present in other systems, "minimum CPU
platform" would more analogously mean "can we put you on a Rome Gimlet
or must we put you on a Milan Gimlet?", or "Genoa Cosmo vs Turin Cosmo?"
- it doesn't seem _possible_ to say "this instance must have AVX 512,
but otherwise I don't care what kind of hardware it runs on.", but
that's more what _we mean_ by CPU platform.
In a "minimum CPU platform" interpretation, we _could_ provide a bunch
of Turin CPUID bits to a VM that said it wanted Milan. But since there's
no upper bound here, if an OS has an issue with a future "Zen 14" or
whatever, a user would discover that by their "minimum-Milan" instance
getting scheduled on the new space-age processor and exploding on boot
or something. OSes _shouldn't_ do that, but...
Implementation-wise, this is really just about the names right now. You
always get Milan CPUID leaves for the time being. When there are Turin
CPUID leaves defined for the instance CPU platform, and Cosmos on which
they make sense, this becomes more concrete.
## "are these CPU platforms compatible?"
RFD 314 has a section now, and I've added a stub function, covering
some more obvious ways that CPU platforms would be *incompatible*.
This is particularly fraught if we consider being incorrect about
topology an incompatibility, but even setting that aside several bits in
CPUID are descriptive of architectural behaviors and are not easily (or
at all) able to be emulated.
`functionally_same()` and the CPUID profiles here may be fated to move
out of Omicron and into another crate which can be shared with Propolis,
where it can ensure that a requested profile is consistent with the
hardware on which Propolis would create a VM (not to mention test uses)
---------
Co-authored-by: Greg Colombo <[email protected]>
0 commit comments