Managing node labeling for obsolete CPU models

You can schedule a virtual machine (VM) on a node as long as the VM CPU model and policy are supported by the node.

About node labeling for obsolete CPU models

The OKD Virtualization Operator uses a predefined list of obsolete CPU models to ensure that a node supports only valid CPU models for scheduled VMs.

By default, the following CPU models are eliminated from the list of labels generated for the node:

Obsolete CPU models

  1. "486"
  2. Conroe
  3. athlon
  4. core2duo
  5. coreduo
  6. kvm32
  7. kvm64
  8. n270
  9. pentium
  10. pentium2
  11. pentium3
  12. pentiumpro
  13. phenom
  14. qemu32
  15. qemu64

This predefined list is not visible in the HyperConverged CR. You cannot remove CPU models from this list, but you can add to the list by editing the spec.obsoleteCPUs.cpuModels field of the HyperConverged CR.

About node labeling for CPU features

Through the process of iteration, the base CPU features in the minimum CPU model are eliminated from the list of labels generated for the node.

For example:

  • An environment might have two supported CPU models: Penryn and Haswell.

  • If Penryn is specified as the CPU model for minCPU, each base CPU feature for Penryn is compared to the list of CPU features supported by Haswell.

    CPU features supported by Penryn

    1. apic
    2. clflush
    3. cmov
    4. cx16
    5. cx8
    6. de
    7. fpu
    8. fxsr
    9. lahf_lm
    10. lm
    11. mca
    12. mce
    13. mmx
    14. msr
    15. mtrr
    16. nx
    17. pae
    18. pat
    19. pge
    20. pni
    21. pse
    22. pse36
    23. sep
    24. sse
    25. sse2
    26. sse4.1
    27. ssse3
    28. syscall
    29. tsc

    CPU features supported by Haswell

    1. aes
    2. apic
    3. avx
    4. avx2
    5. bmi1
    6. bmi2
    7. clflush
    8. cmov
    9. cx16
    10. cx8
    11. de
    12. erms
    13. fma
    14. fpu
    15. fsgsbase
    16. fxsr
    17. hle
    18. invpcid
    19. lahf_lm
    20. lm
    21. mca
    22. mce
    23. mmx
    24. movbe
    25. msr
    26. mtrr
    27. nx
    28. pae
    29. pat
    30. pcid
    31. pclmuldq
    32. pge
    33. pni
    34. popcnt
    35. pse
    36. pse36
    37. rdtscp
    38. rtm
    39. sep
    40. smep
    41. sse
    42. sse2
    43. sse4.1
    44. sse4.2
    45. ssse3
    46. syscall
    47. tsc
    48. tsc-deadline
    49. x2apic
    50. xsave
  • If both Penryn and Haswell support a specific CPU feature, a label is not created for that feature. Labels are generated for CPU features that are supported only by Haswell and not by Penryn.

    Node labels created for CPU features after iteration

    1. aes
    2. avx
    3. avx2
    4. bmi1
    5. bmi2
    6. erms
    7. fma
    8. fsgsbase
    9. hle
    10. invpcid
    11. movbe
    12. pcid
    13. pclmuldq
    14. popcnt
    15. rdtscp
    16. rtm
    17. sse4.2
    18. tsc-deadline
    19. x2apic
    20. xsave

Configuring obsolete CPU models

You can configure a list of obsolete CPU models by editing the HyperConverged custom resource (CR).

Procedure

  • Edit the HyperConverged custom resource, specifying the obsolete CPU models in the obsoleteCPUs array. For example:

    1. apiVersion: hco.kubevirt.io/v1beta1
    2. kind: HyperConverged
    3. metadata:
    4. name: kubevirt-hyperconverged
    5. namespace: kubevirt-hyperconverged
    6. spec:
    7. obsoleteCPUs:
    8. cpuModels: (1)
    9. - "<obsolete_cpu_1>"
    10. - "<obsolete_cpu_2>"
    11. minCPUModel: "<minimum_cpu_model>" (2)
    1Replace the example values in the cpuModels array with obsolete CPU models. Any value that you specify is added to a predefined list of obsolete CPU models. The predefined list is not visible in the CR.
    2Replace this value with the minimum CPU model that you want to use for basic CPU features. If you do not specify a value, Penryn is used by default.