SCS Flavor Naming Standard
Introduction
This is the standard v1.0 for SCS Release 0. Note that we intend to only extend it (so it's always backwards compatible), but try to avoid changing in incompatible ways.
Motivation
In OpenStack environments there is a need to define different flavors for instances. The flavors are pre-defined by the operator, the customer can not change these. OpenStack providers thus typically offer a large selection of flavors.
While flavors can be discovered (openstack flavor list
), it is helpful for users (DevOps teams),
to have
- A naming scheme that is used across all SCS flavors, so flavor names have the same meaning everywhere.
- Have a guaranteed set of flavors available on all SCS clouds, so these do not need to be discovered.
While not all details will be encoded in the name, the key features should be obvious: Number of vCPUs, RAM, Root Disk. Extra features are important as well: There will be flavors with GPU support, fast disks for databases, memory-heavy applications, and other useful aspects of an instance.
It may also be important to make the CPU generation clearly recognisable, as this is always a topic in discussions with customers.
Proposal
Type of information included
We believe the following characteristics are important in a flavour description:
Type | Description |
---|---|
Generation | CPU Generation |
Number of CPU | Number of vCPUs - suffixed by L,V,T,C (see below) |
Amount of RAM | Amount of memory available for the VM |
Performance Class | Ability to label high-performance CPUs, disks, network |
CPU Type | X86-intel, X86-amd, ARM, RISC-V, Generic |
"bms" | Bare Metal System (no virtualization/hypervisor) |
Complete Proposal
Prefix | CPU | Suffix | RAM[GiB] | optional: Disk[GB] | optional: Disk type | optional: extra features |
---|---|---|---|---|---|---|
SCS- | N | L/V/T/C[i] | :N[u][o] | [:[ Mx] N] | [n/s/l/p] | [- hyp][-hwv]-[ arch[ N][h][-[G/g] X[ N][: M[h]]][-ib] |
(Note that N and M are placeholders for numbers here).
Proposal Details
[REQUIRED] CPU Suffixes
Suffix | Meaning |
---|---|
C | dedicated Core |
T | dedicated Thread (SMT) |
V | vCPU (oversubscribed) |
L | vCPU (heavily oversubscribed) |
Baseline
Note that vCPU oversubscription for a V
vCPU should be implemented such, that we
can guarantee at least 20% of a core in >99% of the time
; this can be achieved by
limiting vCPU oversubscription to 5x per core (or 3x per thread when SMT/HT is enabled)
or by more advanced workload management logic. Otherwise L
(low performance) must be
used. The >99% is measured over a month (1% is 7.2h/month).
Note that CPUs must use latest microcode to protect against CPU vulnerabilities (Spectre, Meltdown, L1TF, etc.).
We expect that microcode gets updated within less than a month of a new release; for CVSS scores above 8,
we expect less than a week.
The provider must enable at least all mitigations that are enabled by default in the Linux kernel. CPUs that
are susceptible to L1TF (intel x86 pre Cascade Lake) must switch off hyperthreading OR (in the future)
use core scheduling implementations that are deemed to be secure by the SCS security team, or declare themselves
as insecure with the i
suffix (see below).
Higher oversubscription
Must be indicated with a L
vCPU type (low performance for > 5x/core or > 3x/thread oversubscription and
the lack of workload management that would prevent worst case performance < 20% in more than 7.2h per month).
Insufficient microcode
Not using these mitigations must be indicated by an additional i suffix
for insecure
(weak protection against CPU vulnerabilities through insufficient microcode, lack of disabled hyperthreading
on L1TF susceptible CPUs w/o effective core scheduling or disabled protections on the host/hypervisor).
Examples
- SCS-2C:4:10n
- SCS-2T:4:10n
- SCS-2V:4:10n
- SCS-2L:4:10n
- SCS-2Li:4:10n
SCS-2:**4:10n- CPU suffix missingSCS-2iT:4:10n- This order is forbidden
[REQUIRED] Memory
Baseline
We expect cloud providers to use ECC memory. Memory oversubscription is not recommended. It is allowed to specify half GiBs (e.g. 3.5), though this is discouraged for larger memory sizes (>= 10GiB).
No ECC
If no ECC is used, the u suffix
must indicate this.
Enabled Oversubscription
You have to expose this with the o sufffix
.
Examples
- SCS-2C:4:10n
- SCS-2C:3.5:10n
- SCS-2C:4u:10n
- SCS-2C:4o:10n
- SCS-2C:4uo:10n
SCS-2C:4ou:10n- This order is forbidden
[OPTIONAL] Disk sizes and types
Disk type | Meaning |
---|---|
n | Network shared storage (ceph/cinder) |
h | Local disk (HDD: SATA/SAS class) |
s | Local SSD disk |
p | Local high-perf NVMe |
Baseline
Note that disk type might be omitted — the user then can not take any assumptions on what storage is provided for the root disk (that the image gets provisioned to).
It does make sense for n
to be requested explicitly to allow for smooth live migration.
h
typically provides latency advantages vs n
(but not necessarily bandwidth and
also is more likely to fail), s
and p
are for applications that need low
latency (high IOPS) and bandwidth disk I/O. n
storage is expected to survive
single-disk and single-node failure.
If the disk size is left out, the cloud is expected to allocate a disk (network or local)
that is large enough to fit the root file system (min_disk
in image). This automatic
allocation is indicated with :
without a disk size.
If the :
is left out completely, the user must create a boot volume manually and
tell the instance to boot from it or use the
block_device_mapping_v2
mechanism explicitly to create the boot volume from an image.
Multi-provisioned Disk
The disk size can be prefixed with Mx prefix
, where M is an integer specifying that the disk
is provisioned M times.
Examples
- SCS-2C:4:10n
- SCS-2C:4:10s
- SCS-2C:4:10s-bms-z3
- SCS-2C:4:3x10s - Cloud creates three 10GB SSDs
- SCS-2C:4:3x10s-bms-z3
- SCS-2C:4:10 - Cloud decides disk type
- SCS-2C:4:10-bms-z3
- SCS-2C:4:n - Cloud decides disk size (min_disk from image or larger)
- SCS-2C:4:n-bms-3
- SCS-2C:4: - Cloud decides disk type and size
- SCS-2C:4:-bms-z3
- SCS-2C:4:-bms-z3h-GNa:64-ib
- SCS-2C:4:-ib
- SCS-2C:4 - You need to specify a boot volume yourself (boot from volume, or use block_device_mapping_v2)
- SCS-2C:4-bms-z3
- SCS-2C:4:3x - Cloud decides disk type and size and creates three of them (FIXME: Is this useful?)
- SCS-2C:4:3xs - Cloud decides size and creates three local SSD volumes (FIXME: useful?)
- SCS-2C:4:3x10 - Cloud decides type and creates three 10GB volumes
SCS-2C:4:1.5n- You must not specify disk sizes which are not in full GiBs
[OPTIONAL] Hypervisor
The default Hypervisor
is assumed to be KVM
. Clouds, that offer different hypervisors
or Bare Metal Systems should indicate the Hypervisor according to the following table:
hyp | Meaning |
---|---|
kvm | KVM |
xen | Xen |
vmw | VMware |
hyv | Hyper-V |
bms | Bare Metal System |