SovereignCloudStack/gx-credential-generator

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
Loading

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 = 1
smtEnabled = false
T cpu is set N time` defaultOvesrubscriptionRatio = 1
smtEnabled = 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 = 16
smtEnabled = 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 defaultOvesubscriptionRatioand 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"
}
Loading

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 for defaultOversubscription.

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 an r is intentional?

No, of course not. It's a typo...