cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

cpu-models-x86.rst.inc (14755B)


      1Recommendations for KVM CPU model configuration on x86 hosts
      2============================================================
      3
      4The information that follows provides recommendations for configuring
      5CPU models on x86 hosts. The goals are to maximise performance, while
      6protecting guest OS against various CPU hardware flaws, and optionally
      7enabling live migration between hosts with heterogeneous CPU models.
      8
      9
     10Two ways to configure CPU models with QEMU / KVM
     11^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     12
     13(1) **Host passthrough**
     14
     15    This passes the host CPU model features, model, stepping, exactly to
     16    the guest. Note that KVM may filter out some host CPU model features
     17    if they cannot be supported with virtualization. Live migration is
     18    unsafe when this mode is used as libvirt / QEMU cannot guarantee a
     19    stable CPU is exposed to the guest across hosts. This is the
     20    recommended CPU to use, provided live migration is not required.
     21
     22(2) **Named model**
     23
     24    QEMU comes with a number of predefined named CPU models, that
     25    typically refer to specific generations of hardware released by
     26    Intel and AMD.  These allow the guest VMs to have a degree of
     27    isolation from the host CPU, allowing greater flexibility in live
     28    migrating between hosts with differing hardware.  @end table
     29
     30In both cases, it is possible to optionally add or remove individual CPU
     31features, to alter what is presented to the guest by default.
     32
     33Libvirt supports a third way to configure CPU models known as "Host
     34model".  This uses the QEMU "Named model" feature, automatically picking
     35a CPU model that is similar the host CPU, and then adding extra features
     36to approximate the host model as closely as possible. This does not
     37guarantee the CPU family, stepping, etc will precisely match the host
     38CPU, as they would with "Host passthrough", but gives much of the
     39benefit of passthrough, while making live migration safe.
     40
     41
     42ABI compatibility levels for CPU models
     43^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     44
     45The x86_64 architecture has a number of `ABI compatibility levels`_
     46defined. Traditionally most operating systems and toolchains would
     47only target the original baseline ABI. It is expected that in
     48future OS and toolchains are likely to target newer ABIs. The
     49table that follows illustrates which ABI compatibility levels
     50can be satisfied by the QEMU CPU models. Note that the table only
     51lists the long term stable CPU model versions (eg Haswell-v4).
     52In addition to whats listed, there are also many CPU model
     53aliases which resolve to a different CPU model version,
     54depending on the machine type is in use.
     55
     56.. _ABI compatibility levels: https://gitlab.com/x86-psABIs/x86-64-ABI/
     57
     58.. csv-table:: x86-64 ABI compatibility levels
     59   :file: cpu-models-x86-abi.csv
     60   :widths: 40,15,15,15,15
     61   :header-rows: 2
     62
     63
     64Preferred CPU models for Intel x86 hosts
     65^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     66
     67The following CPU models are preferred for use on Intel hosts.
     68Administrators / applications are recommended to use the CPU model that
     69matches the generation of the host CPUs in use. In a deployment with a
     70mixture of host CPU models between machines, if live migration
     71compatibility is required, use the newest CPU model that is compatible
     72across all desired hosts.
     73
     74``Cascadelake-Server``, ``Cascadelake-Server-noTSX``
     75    Intel Xeon Processor (Cascade Lake, 2019), with "stepping" levels 6
     76    or 7 only.  (The Cascade Lake Xeon processor with *stepping 5 is
     77    vulnerable to MDS variants*.)
     78
     79``Skylake-Server``, ``Skylake-Server-IBRS``, ``Skylake-Server-IBRS-noTSX``
     80    Intel Xeon Processor (Skylake, 2016)
     81
     82``Skylake-Client``, ``Skylake-Client-IBRS``, ``Skylake-Client-noTSX-IBRS}``
     83    Intel Core Processor (Skylake, 2015)
     84
     85``Broadwell``, ``Broadwell-IBRS``, ``Broadwell-noTSX``, ``Broadwell-noTSX-IBRS``
     86    Intel Core Processor (Broadwell, 2014)
     87
     88``Haswell``, ``Haswell-IBRS``, ``Haswell-noTSX``, ``Haswell-noTSX-IBRS``
     89    Intel Core Processor (Haswell, 2013)
     90
     91``IvyBridge``, ``IvyBridge-IBR``
     92    Intel Xeon E3-12xx v2 (Ivy Bridge, 2012)
     93
     94``SandyBridge``, ``SandyBridge-IBRS``
     95    Intel Xeon E312xx (Sandy Bridge, 2011)
     96
     97``Westmere``, ``Westmere-IBRS``
     98    Westmere E56xx/L56xx/X56xx (Nehalem-C, 2010)
     99
    100``Nehalem``, ``Nehalem-IBRS``
    101    Intel Core i7 9xx (Nehalem Class Core i7, 2008)
    102
    103``Penryn``
    104    Intel Core 2 Duo P9xxx (Penryn Class Core 2, 2007)
    105
    106``Conroe``
    107    Intel Celeron_4x0 (Conroe/Merom Class Core 2, 2006)
    108
    109
    110Important CPU features for Intel x86 hosts
    111^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    112
    113The following are important CPU features that should be used on Intel
    114x86 hosts, when available in the host CPU. Some of them require explicit
    115configuration to enable, as they are not included by default in some, or
    116all, of the named CPU models listed above. In general all of these
    117features are included if using "Host passthrough" or "Host model".
    118
    119``pcid``
    120  Recommended to mitigate the cost of the Meltdown (CVE-2017-5754) fix.
    121
    122  Included by default in Haswell, Broadwell & Skylake Intel CPU models.
    123
    124  Should be explicitly turned on for Westmere, SandyBridge, and
    125  IvyBridge Intel CPU models. Note that some desktop/mobile Westmere
    126  CPUs cannot support this feature.
    127
    128``spec-ctrl``
    129  Required to enable the Spectre v2 (CVE-2017-5715) fix.
    130
    131  Included by default in Intel CPU models with -IBRS suffix.
    132
    133  Must be explicitly turned on for Intel CPU models without -IBRS
    134  suffix.
    135
    136  Requires the host CPU microcode to support this feature before it
    137  can be used for guest CPUs.
    138
    139``stibp``
    140  Required to enable stronger Spectre v2 (CVE-2017-5715) fixes in some
    141  operating systems.
    142
    143  Must be explicitly turned on for all Intel CPU models.
    144
    145  Requires the host CPU microcode to support this feature before it can
    146  be used for guest CPUs.
    147
    148``ssbd``
    149  Required to enable the CVE-2018-3639 fix.
    150
    151  Not included by default in any Intel CPU model.
    152
    153  Must be explicitly turned on for all Intel CPU models.
    154
    155  Requires the host CPU microcode to support this feature before it
    156  can be used for guest CPUs.
    157
    158``pdpe1gb``
    159  Recommended to allow guest OS to use 1GB size pages.
    160
    161  Not included by default in any Intel CPU model.
    162
    163  Should be explicitly turned on for all Intel CPU models.
    164
    165  Note that not all CPU hardware will support this feature.
    166
    167``md-clear``
    168  Required to confirm the MDS (CVE-2018-12126, CVE-2018-12127,
    169  CVE-2018-12130, CVE-2019-11091) fixes.
    170
    171  Not included by default in any Intel CPU model.
    172
    173  Must be explicitly turned on for all Intel CPU models.
    174
    175  Requires the host CPU microcode to support this feature before it
    176  can be used for guest CPUs.
    177
    178``mds-no``
    179  Recommended to inform the guest OS that the host is *not* vulnerable
    180  to any of the MDS variants ([MFBDS] CVE-2018-12130, [MLPDS]
    181  CVE-2018-12127, [MSBDS] CVE-2018-12126).
    182
    183  This is an MSR (Model-Specific Register) feature rather than a CPUID feature,
    184  so it will not appear in the Linux ``/proc/cpuinfo`` in the host or
    185  guest.  Instead, the host kernel uses it to populate the MDS
    186  vulnerability file in ``sysfs``.
    187
    188  So it should only be enabled for VMs if the host reports @code{Not
    189  affected} in the ``/sys/devices/system/cpu/vulnerabilities/mds`` file.
    190
    191``taa-no``
    192  Recommended to inform that the guest that the host is ``not``
    193  vulnerable to CVE-2019-11135, TSX Asynchronous Abort (TAA).
    194
    195  This too is an MSR feature, so it does not show up in the Linux
    196  ``/proc/cpuinfo`` in the host or guest.
    197
    198  It should only be enabled for VMs if the host reports ``Not affected``
    199  in the ``/sys/devices/system/cpu/vulnerabilities/tsx_async_abort``
    200  file.
    201
    202``tsx-ctrl``
    203  Recommended to inform the guest that it can disable the Intel TSX
    204  (Transactional Synchronization Extensions) feature; or, if the
    205  processor is vulnerable, use the Intel VERW instruction (a
    206  processor-level instruction that performs checks on memory access) as
    207  a mitigation for the TAA vulnerability.  (For details, refer to
    208  Intel's `deep dive into MDS
    209  <https://software.intel.com/security-software-guidance/insights/deep-dive-intel-analysis-microarchitectural-data-sampling>`_.)
    210
    211  Expose this to the guest OS if and only if: (a) the host has TSX
    212  enabled; *and* (b) the guest has ``rtm`` CPU flag enabled.
    213
    214  By disabling TSX, KVM-based guests can avoid paying the price of
    215  mitigating TSX-based attacks.
    216
    217  Note that ``tsx-ctrl`` too is an MSR feature, so it does not show
    218  up in the Linux ``/proc/cpuinfo`` in the host or guest.
    219
    220  To validate that Intel TSX is indeed disabled for the guest, there are
    221  two ways: (a) check for the *absence* of ``rtm`` in the guest's
    222  ``/proc/cpuinfo``; or (b) the
    223  ``/sys/devices/system/cpu/vulnerabilities/tsx_async_abort`` file in
    224  the guest should report ``Mitigation: TSX disabled``.
    225
    226
    227Preferred CPU models for AMD x86 hosts
    228^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    229
    230The following CPU models are preferred for use on AMD hosts.
    231Administrators / applications are recommended to use the CPU model that
    232matches the generation of the host CPUs in use. In a deployment with a
    233mixture of host CPU models between machines, if live migration
    234compatibility is required, use the newest CPU model that is compatible
    235across all desired hosts.
    236
    237``EPYC``, ``EPYC-IBPB``
    238    AMD EPYC Processor (2017)
    239
    240``Opteron_G5``
    241    AMD Opteron 63xx class CPU (2012)
    242
    243``Opteron_G4``
    244    AMD Opteron 62xx class CPU (2011)
    245
    246``Opteron_G3``
    247    AMD Opteron 23xx (Gen 3 Class Opteron, 2009)
    248
    249``Opteron_G2``
    250    AMD Opteron 22xx (Gen 2 Class Opteron, 2006)
    251
    252``Opteron_G1``
    253    AMD Opteron 240 (Gen 1 Class Opteron, 2004)
    254
    255
    256Important CPU features for AMD x86 hosts
    257^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    258
    259The following are important CPU features that should be used on AMD x86
    260hosts, when available in the host CPU. Some of them require explicit
    261configuration to enable, as they are not included by default in some, or
    262all, of the named CPU models listed above. In general all of these
    263features are included if using "Host passthrough" or "Host model".
    264
    265``ibpb``
    266  Required to enable the Spectre v2 (CVE-2017-5715) fix.
    267
    268  Included by default in AMD CPU models with -IBPB suffix.
    269
    270  Must be explicitly turned on for AMD CPU models without -IBPB suffix.
    271
    272  Requires the host CPU microcode to support this feature before it
    273  can be used for guest CPUs.
    274
    275``stibp``
    276  Required to enable stronger Spectre v2 (CVE-2017-5715) fixes in some
    277  operating systems.
    278
    279  Must be explicitly turned on for all AMD CPU models.
    280
    281  Requires the host CPU microcode to support this feature before it
    282  can be used for guest CPUs.
    283
    284``virt-ssbd``
    285  Required to enable the CVE-2018-3639 fix
    286
    287  Not included by default in any AMD CPU model.
    288
    289  Must be explicitly turned on for all AMD CPU models.
    290
    291  This should be provided to guests, even if amd-ssbd is also provided,
    292  for maximum guest compatibility.
    293
    294  Note for some QEMU / libvirt versions, this must be force enabled when
    295  when using "Host model", because this is a virtual feature that
    296  doesn't exist in the physical host CPUs.
    297
    298``amd-ssbd``
    299  Required to enable the CVE-2018-3639 fix
    300
    301  Not included by default in any AMD CPU model.
    302
    303  Must be explicitly turned on for all AMD CPU models.
    304
    305  This provides higher performance than ``virt-ssbd`` so should be
    306  exposed to guests whenever available in the host. ``virt-ssbd`` should
    307  none the less also be exposed for maximum guest compatibility as some
    308  kernels only know about ``virt-ssbd``.
    309
    310``amd-no-ssb``
    311  Recommended to indicate the host is not vulnerable CVE-2018-3639
    312
    313  Not included by default in any AMD CPU model.
    314
    315  Future hardware generations of CPU will not be vulnerable to
    316  CVE-2018-3639, and thus the guest should be told not to enable
    317  its mitigations, by exposing amd-no-ssb. This is mutually
    318  exclusive with virt-ssbd and amd-ssbd.
    319
    320``pdpe1gb``
    321  Recommended to allow guest OS to use 1GB size pages
    322
    323  Not included by default in any AMD CPU model.
    324
    325  Should be explicitly turned on for all AMD CPU models.
    326
    327  Note that not all CPU hardware will support this feature.
    328
    329
    330Default x86 CPU models
    331^^^^^^^^^^^^^^^^^^^^^^
    332
    333The default QEMU CPU models are designed such that they can run on all
    334hosts.  If an application does not wish to do perform any host
    335compatibility checks before launching guests, the default is guaranteed
    336to work.
    337
    338The default CPU models will, however, leave the guest OS vulnerable to
    339various CPU hardware flaws, so their use is strongly discouraged.
    340Applications should follow the earlier guidance to setup a better CPU
    341configuration, with host passthrough recommended if live migration is
    342not needed.
    343
    344``qemu32``, ``qemu64``
    345    QEMU Virtual CPU version 2.5+ (32 & 64 bit variants)
    346
    347``qemu64`` is used for x86_64 guests and ``qemu32`` is used for i686
    348guests, when no ``-cpu`` argument is given to QEMU, or no ``<cpu>`` is
    349provided in libvirt XML.
    350
    351Other non-recommended x86 CPUs
    352^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    353
    354The following CPUs models are compatible with most AMD and Intel x86
    355hosts, but their usage is discouraged, as they expose a very limited
    356featureset, which prevents guests having optimal performance.
    357
    358``kvm32``, ``kvm64``
    359    Common KVM processor (32 & 64 bit variants).
    360
    361    Legacy models just for historical compatibility with ancient QEMU
    362    versions.
    363
    364``486``, ``athlon``, ``phenom``, ``coreduo``, ``core2duo``, ``n270``, ``pentium``, ``pentium2``, ``pentium3``
    365    Various very old x86 CPU models, mostly predating the introduction
    366    of hardware assisted virtualization, that should thus not be
    367    required for running virtual machines.
    368
    369
    370Syntax for configuring CPU models
    371=================================
    372
    373The examples below illustrate the approach to configuring the various
    374CPU models / features in QEMU and libvirt.
    375
    376QEMU command line
    377^^^^^^^^^^^^^^^^^
    378
    379Host passthrough:
    380
    381.. parsed-literal::
    382
    383  |qemu_system| -cpu host
    384
    385Host passthrough with feature customization:
    386
    387.. parsed-literal::
    388
    389  |qemu_system| -cpu host,vmx=off,...
    390
    391Named CPU models:
    392
    393.. parsed-literal::
    394
    395  |qemu_system| -cpu Westmere
    396
    397Named CPU models with feature customization:
    398
    399.. parsed-literal::
    400
    401  |qemu_system| -cpu Westmere,pcid=on,...
    402
    403Libvirt guest XML
    404^^^^^^^^^^^^^^^^^
    405
    406Host passthrough::
    407
    408    <cpu mode='host-passthrough'/>
    409
    410Host passthrough with feature customization::
    411
    412    <cpu mode='host-passthrough'>
    413        <feature name="vmx" policy="disable"/>
    414        ...
    415    </cpu>
    416
    417Host model::
    418
    419    <cpu mode='host-model'/>
    420
    421Host model with feature customization::
    422
    423    <cpu mode='host-model'>
    424        <feature name="vmx" policy="disable"/>
    425        ...
    426    </cpu>
    427
    428Named model::
    429
    430    <cpu mode='custom'>
    431        <model name="Westmere"/>
    432    </cpu>
    433
    434Named model with feature customization::
    435
    436    <cpu mode='custom'>
    437        <model name="Westmere"/>
    438        <feature name="pcid" policy="require"/>
    439        ...
    440    </cpu>