---
title: Configure CPU models
---

# Configure CPU models {#virt-configuring-default-cpu-model}

You can configure CPU models for your virtual machines at both the cluster level and individual VM level. Set a cluster-wide default CPU model to automatically apply to all new VMs, or configure a specific CPU model for individual VMs to override the cluster default.

## Configure the default CPU model {#virt-configuring-default-cpu-model_virt-configuring-default-cpu-model}

Use the `defaultCPUModel` setting in the `HyperConverged` custom resource (CR) to define a cluster-wide default CPU model.

When you set a cluster-wide default CPU model:

- Every new virtual machine (VM) that does not have an explicit CPU model defined receives a node selector for the chosen CPU model.
- Only nodes labeled with `cpu-model.node.kubevirt.io/<cpuModel>` are eligible to run VMs using the default model.
- Nodes that do not support the selected CPU model are not considered during VM scheduling.

> [!NOTE]
> The `defaultCPUModel` is case sensitive and must match a CPU model supported by nodes in your cluster.

A CPU model configured at the VM level always takes precedence over the cluster-wide default CPU model.

**Prerequisites**

- Install the OpenShift CLI (`oc`).

**Procedure**

1. Open the `HyperConverged` CR by running the following command:

   ```terminal
   $ oc edit hyperconvergeds.v1beta1.hco.kubevirt.io kubevirt-hyperconverged -n openshift-cnv
   ```
2. Add the `defaultCPUModel` field to the CR and set the value to the name of a CPU model that exists in the cluster:

   ```yaml
   apiVersion: hco.kubevirt.io/v1beta1
   kind: HyperConverged
   metadata:
    name: kubevirt-hyperconverged
    namespace: openshift-cnv
   spec:
     defaultCPUModel: "EPYC-IBPB"
   ```

   where:

   `EPYC-IBPB`
   :   Specifies a CPU model that is supported by nodes in your cluster.
3. Apply the YAML file to your cluster.

## Configure a CPU model per-VM {#virt-per-vm-cpu-model-configuration_virt-configuring-default-cpu-model}

You can specify a named CPU model in the virtual machine (VM) specification. This per-VM configuration takes precedence over any cluster-wide default CPU model.

The VM CPU model depends on the availability of CPU models within the VM and the cluster.

- If the VM does not have a defined CPU model, the `defaultCPUModel` is automatically set using the CPU model defined at the cluster-wide level.
- If both the VM and the cluster have a defined CPU model, the VM’s CPU model takes precedence.
- If neither the VM nor the cluster have a defined CPU model, the host-model is automatically set using the CPU model defined at the host level.

**Prerequisites**

- Install the OpenShift CLI (`oc`).

**Procedure**

1. To configure a named CPU model for a specific VM, edit the `VirtualMachine` custom resource (CR):

   ```yaml
   apiVersion: kubevirt.io/v1
   kind: VirtualMachine
   metadata:
     name: myvm
   spec:
     template:
       spec:
         domain:
           cpu:
             model: Conroe
   ```

   - `spec.template.spec.domain.cpu.model` defines the named CPU model for the VM.
2. Apply the CR to your cluster.
