Align IaaS Flavor description between SCS and Gaia-X
Closed this issue · 15 comments
OpenStack flavors come with a variety of properties, from which the following (according to Flavor Naming Standard V3 are the most important ones:
- CPU Generation
- Number of virtual CPUs
- Amount of memory available for the VM
- Ability to label high-performance CPUs, disks, network
- CPU Type (X86-intel, X86-amd, ARM, RISC-V, Generic)
- Bare Metal System (no virtualization/hypervisor)
As a provider, I want to publish my flavor properties within a Gaia-X Credential. Gaia-X Credential schema has to provide appropriate vocabulary to describe flavor properties from above.
Gaia-X models Flavors as ServerFlavor
with dedicates attributes for cpu, gpu, memory and disk properties.
classDiagram
InstantiationRequirement <|-- ServerFlavor
ServerFlavor --> CPU
ServerFlavor --> GPU
ServerFlavor --> Disk
ServerFlavor --> Memory
The following table shows have SCS Flavor properties can be expressed with Gaia-X Server Flavor Property
SCS Flavor Properties | Gaia-X Server Flavor property |
---|---|
CPU Generation | ServerFlavor.cpuReq.cpuGeneration |
Number of virtual CPUs | ServerFlavor.cpuReq.numberOfCores |
Amount of memory available for the VM | ServerFlavor.memoryReq.size |
Ability to label high-performance CPUs, disks, network | not supported |
CPU Type | ServerFlavor.cpuReq.cpuTypes |
Bare Metal System | Modelled as separate Service Offering, called "BareMetalServiceOffering" |
The values for "cpuGeneration" and "cpuType" are not in sync with SCS and will be updated during Gaia-X transition from old yaml format to linkml (See #262. I will also add support for high-performance CPU, network and disks, in this context.
I do alignment of SCS and Gaia-X flavor description directly at Gaia-X GitLab. See issue #262
Systematic flavor naming is defined in Flavor Naming Standard is as follows:
Prefix | CPUs & Suffix | RAM[GiB] | optional: Disk[GB]&type | opt: extensions |
---|---|---|---|---|
SCS- |
NL/V/T/C [i ] |
- N[u ][o ] |
[- [Mx ]N[n/h/s/p ]] |
[_ EXT] |
Note that N and M are placeholders for numbers here. The optional fields are denoted in brackets (and have opt: in the header.
See below for extensions.
I will explain mapping from SCS to Gaia-X and vice versa in the following.
CPUs & Suffix:
Number of virtual (Virtual Machine) or physical (Bare Metal Machines) CPUs - N:
Gaia-X Credential Schema contains a class, called ServerFlavor, which specifies number of CPUs and their properties via attribute cpu
. The attribute is required and can be set several time. The count of attribute cpu
correspond to N in SCS Flavor naming standard.
CPU suffix - L/V/T/C:
CPU suffixes are related to oversubscription of CPU. Gaia-X Credential Schema provides a class, called CPU with several attributes to define CPUs properties and capabilities more precisely. There is neither an attribute to define dedicated Core nor dedicated Thread, as intended with SCS CPU suffix C
and T
.
Gaia-X Credential Schema supports oversubscription of CPU, via two attributes: defaultOversubscriptionRatio
and supportedOversubscriptionRatio
. I do not understand the difference between default and supported oversubscription. The description does not explain the difference. I will use defaultOversubscriptionRatio
, only.
The attribute smtEnabled
in Gaia-X class CPU
describe usage of SMT.
Mapping SCS to Gaia-X:
Taking available attributes, as described above, into account, SCS CPU suffixes can be mapped to Gaia-X credentials as follows. Note N is a placeholder for number of virtual CPUs. As there is no information, neither in flavor's name nor in flavor's properties, number of cores per vCPU can not be set. Furhermore, all vCPUs are identical.
SCS CPUs Suffix | Gaia-X class ServerFlavor |
Gaia-X class CPU |
comments |
---|---|---|---|
C | cpu is set N time`. |
defaultOversubscriptionRatio = 1smtEnabled = false |
|
T | cpu is set N time` |
defaultOvesrubscriptionRatio = 1smtEnabled = true |
|
V | cpu is set N time,` |
defaultOversubscriptionRatio = 5 smtEnabled = false OR defaultOvesubscriptionRatio = 2 smtEnabled = true |
As SCS does not support explicit values for oversubstription, maximum values as defined in SCS Flavor Standard are set for defaultOversubscription . |
L | cpu is set N time, with cpu.cores=1 |
defaultOversubscriptionRatio = 16smtEnabled = false OR defaultOversubscriptionRatio = 4 smtEnabled = true |
As SCS does not support explicit values for over-subscription, maximum values +1 as defined in SCS Flavor Standard are set for defaultOversubscription . |
Memory:
Size of virtual (Virtual Machine) or physical (Bare Metal Machines) RAM - N:
Gaia-X Credential Schema contains a class, called ServerFlavor, which specifies memory properties via attribute ram
. The attribute is required and can be set once.
There is a special class, called Memory to define properties of RAM. Attribute ram
in ServerFlavor must be of kind of Memory. Class Memory owns attribute memorySize
, which models size of memory N as instance of MemorySize with a value and a unit.
In contrast to SCS, Gaia-X supports all units of memory, such as MB or GB and does not make any restriction with respect to value of size.
Memory suffix - u/o:
Suffix u - ECC support:
Currently Gaia-X does not allow to define ECC support of RAM (suffix u). I extended schema with an appropriate attributes, see !190.
Suffix o - oversibscription:
Supported in Gaia-X by attribute defaultOvesubscriptionRatio
and supportedOvesubscriptionRatio
. However, there us no clear explanation of difference between both attributes.
Mapping SCS to Gaia-X:
Taking available attributes, as described above, into account, SCS Memory suffixes can be mapped to Gaia-X credentials as follows. Note N is a placeholder for size of memory:
SCS Memory Suffix | Gaia-X class ServerFlavor |
Gaia-X class Memory |
|
---|---|---|---|
N | memory is set once. |
defaultOversubscriptionRatio =1 eccEnabled = true memorySize.value = N memorySize.unit = https://qudt.org/vocab:unit/GigaBYTE |
|
No | memory is set once. |
defaultOversubscriptionRatio =2 eccEnabled = true memorySize.value = N memorySize.unit = https://qudt.org/vocab:unit/GigaBYTE |
|
Nu | memory is set once. |
defaultOversubscriptionRatio =1 eccEnabled = false memorySize.value = N memorySize.unit = https://qudt.org/vocab:unit/GigaBYTE |
|
Nuo | memory is set once. |
defaultOversubscriptionRatio = eccEnabled = false memorySize.value = N memorySize.unit = https://qudt.org/vocab:unit/GigaBYTE |
Gaia-X models over-provisioning with absolute ratios (see attributes defaultOversubscriptionRatio
and supportedOversubscriptionRatio
. IMO, most providers will not define an absolute over-provisioning ratio. However, in Gaia.-X, there is no way to define over-provisioning implicitly. Hence Gaia-X should provide a was to do so.
Disk sizes and types:
Number of virtual (Virtual Machine) or physical (Bare Metal Machines) hard drives - N:
Gaia-X Credential Schema contains a class, called ServerFlavor, which specifies disk properties via attribute bootVolume
and additionalVolume
. bootVolume
defines boot disk and MUST appear once, where additionalVolume
is optional and can be set several times.
Size of virtual (Virtual Machine) or physical (Bare Metal Machines) RAM - M:
Both attributes, bootVolume
and additionalVolume
must be of type Disk, which specifies allows to define size of disk as instance of as instance of MemorySize.
In contrast to SCS, Gaia-X supports all units of memory, such as MB or GB and does not make any restriction with respect to value of size. Hence, also non-full GiBs are allowed.
Disk suffix n/h/s/p:
Gaia-X supports disk types via attribute Disk.diskType
, but types are not in sync with SCS. So, I updated the schema according to disk types proposes in #13. See !190.
Mapping SCS to Gaia-X:
Taking available attributes, as described above, into account, SCS Disk suffixes can be mapped to Gaia-X credentials as follows. Note M is a placeholder for number of disks and N is a placeholder for size of disk:
SCS Disk Suffix | Gaia-X class ServerFlavor |
Gaia-X class Disk |
|
---|---|---|---|
M*N | bootVolume is set once additionalVolume is set (M-1) times. |
diskSize.value = N memorySize.unit = https://qudt.org/vocab:unit/GigaBYTE |
|
M*Nn | bootVolume is set once additionalVolume is set (M-1) times. |
diskSize.value = N memorySize.unit = https://qudt.org/vocab:unit/GigaBYTE diskType = "network" |
|
M*Nh | bootVolume is set once additionalVolume is set (M-1) times. |
diskSize.value = N memorySize.unit = https://qudt.org/vocab:unit/GigaBYTE diskType = "hdd" |
|
M*Ns | bootVolume is set once additionalVolume is set (M-1) times. |
diskSize.value = N memorySize.unit = https://qudt.org/vocab:unit/GigaBYTE diskType = "ssd" |
|
M*Np | bootVolume is set once additionalVolume is set (M-1) times. |
diskSize.value = N memorySize.unit = https://qudt.org/vocab:unit/GigaBYTE diskType = "nvme" |
Hypervisor:
SCS defines used hypervisor with an additional, optional suffix. Gaia-X models hypervisors as any other software used in cloud infrastructures as Software Resource.
Currently, there is no dedicated attribute in class Server Flavor to define used hypervisor. I added one, see !190
Mapping SCS to Gaia-X
Used hypervisor has to be described as instance of class Software Resource, with the following mandatory attributes:
- copyrightOwnedBy: A set of copyright owners either as a free form string or as resolvable link to a Gaia-X credential of type Legal Person.
- license: A set of SPDX identifiers or URL to license document.
- policy: A set of policies, regarding e.g. access control, throttling, usage, retention, .... Each policy must be expressed using a DSL.
KVM may be modeled as follows:
classDiagram
class SoftwareResource{
name = "KVM"
copyrightOwnedby = "The Linux Kernel development community"
license = "GPL-2.0"
policy = "default: allow"
}
Hardware virtualization / Nested virtualization
Description of hardware virtualization is not supported by Gaia-X credentials. I extended Gaia-X Credential schema by adding a dedicated attribute called hardwareAssistedVirtualization
to class Server Flavor.
Mapping SCS to Gaia-X:
Taking available attributes, as described above, into account, SCS _hwv suffixes can be mapped to Gaia-X credentials as follows.
SCS Disk Suffix | Gaia-X class ServerFlavor |
---|---|
_hmv | hardwareAssistedVirtualization = True |
CPU Architecture Details
Vendor
Gaia-X provides an attribute called vendor
in each sub class of Device. CPU is a sub-class of Device
, see device.yaml#L50. Hence, authors of Gaia-X credentials can use avendor
to describe CPU vendors of openstack server flavors. Gaia-X restricts range of vendor
to the following strings, which match with vendors in SCS Flavor Standard.
SCS CPU Vendor Suffix | Gaia-X class CPU |
---|---|
i | vendor = Intel |
z | vendor = AMD |
a | vendor = ARM Limited |
Generation
Authors of Gaia-X credentials for openstack server flavors can use attribute generations
to describe generations of GPUs and CPU. These generations match exactly the ones in SCS Flavor Standard.
SCS CPU Vendor and Generation Suffix | Gaia-X class CPU |
---|---|
i0 | vendor = Intel generation = "pre Skylake" |
i1 | vendor = Intel generation = "Skylake" |
i2 | vendor = Intel generation = "Cascade Lake" |
i3 | vendor = Intel generation = "Ice Lake" |
i4 | vendor = Intel generation = "Sapphire Rapids" |
zi0 | vendor = AMD generation = "pre Zen" |
z1 | vendor = AMD generation = "Zen-1" |
z2 | vendor = AMD generation = "Zen-2" |
z3 | vendor = AMD generation = "Zen-3 |
z4 | vendor = AMD generation = "Zen-4" |
a0 | vendor = ARM Limited generation = "pre Cortex A76 |
a1 | vendor = ARM Limited generation = "A76" |
a2 | vendor = ARM Limited generation = "A78" |
a3 | vendor = ARM Limited generation = "A71x" |
Frequency
Gaia-X provides a dedicate attribute to define CPU's base and boost frequency. SCS CPU frequency suffix is mapped to base frequency.
However, Gaia-X defines CPU frequency not as limit, such as greater than 2.5 GHz, but as non-negative float. I suggest to use SCS lower limit as value for base frequency in Gaia-X, as depicted in the following table
SCS CPU Frequency Suffix | Gaia-X class CPU |
---|---|
h | baseFrequency = 2.75 |
hh | baseFrequency = 3.25 |
hhh | baseFrequency = 3.75 |
GPU Support
Gaia-X provides a dedicated class called GPU to define flavor's GPU capability.
Vendor - X
Similar to CPU, GPU vendor can be expressed by attribute vendor
of class GPU. Gaia-X support Nvidea, AMD, Intel and others as GPU vendors.
Generation - N
Similar to CPU, GPU generation is described by attribute generation
of class GPU. Gaia-X support Nvidea. GPU generation names offered by Gaia-X differ from ones offered by SCS Flavor Naming Standard. Furthermore, SCS flavor naming standard is not clear with respect to GPU capabilities and need further refinement. See SovereignCloudStack/standards#366
Compute units - M
Compute units are not support by GPU definition of Gaia-X. I added a dedicated attribute for this capability. See !190
Passthrough versus vGPU - G/g
Gaia-X does not support an attribute to define, whether GPU is offered via passthrough or virtualized. I added one. See !190
Mapping SCS to Gaia-X:
As GPU description in SCS flavors is described insufficiently, I will not provide any Gaia-X mapping. Points listed in SovereignCloudStack/standards#366 has to be fixed, first.
Support Infiniband - ib
Gaia-X capabilities to describe network properties are very limited. Although, there is an appropriate attribute, called network in Gaia-X Server Flavor, there is no special class, like for CPU, GPU, RAM and Disk. Data type of network
is a simple string. To map infiniband suffix to Gaia-X network description, Is suggest to set network
to infiniband
.
NL
cpu
is set n times.defaultOvesubscriptionRatio
= 6
smtEnabled
= false
OR
defaultOvesubscriptionRatio
= 4
smtEnabled
= true As SCS does not support explicit values for oversubstription, maximum values +1 as defined in SCS Flavor Standard are set fordefaultOversubscription
.
Properties in the SCS flavor standard are minimally guaranteed properties, i.e. providers promise to deliver no less than what the specification says. Providers are free to deliver more though.
I assume that Gaia-X properties work the same way. That would mean that translating SCS L
to Gaia-X defaultOvesubscriptionRatio = 6
has the risk to overpromise. I would probably set this to 16
.
(Why 16? Building extreme hardware with few cores, e.g. a 32core/64thread server and 1TiB RAM will still not allow to fit unlimited number of SCS-1L-1
instances, so it's almost guaranteed to never cross this.)
The fact that defaultOvesubscriptionRatio
lacks an r
is intentional?
I would probably set this to
16
.
I agree and changed it in above comment accordingly.
The fact that
defaultOvesubscriptionRatio
lacks anr
is intentional?
No, of course not. It's a typo...