[libvirt] [PATCH v2 00/30] cpu_x86: Add multiple signatures for CPU models

Jiri Denemark jdenemar at redhat.com
Tue Mar 5 09:40:16 UTC 2019


CPU signatures in the cpu_map serve as a hint for CPUID to CPU model
matching algorithm. If the CPU signatures matches any CPU model in the
cpu_map, this model will be the preferred one.

This works out well and solved several mismatches, but in real world
CPUs which should match a single CPU model may be produced with several
different signatures. For example, low voltage Broadwell CPUs for
laptops and Broadwell CPUs for servers differ in CPU model numbers while
we should detect them all as Broadwell CPU model.

This patch adds support for storing several signatures for a single CPU
model to make this hint useful for more CPUs. Later commits will provide
additional signatures for existing CPU models, which will correct some
results in our CPU test suite.

The list of signatures corresponding to each CPU model were generated by
consulting the following sites:

    https://en.wikichip.org/wiki/intel/cpuid
    http://www.cpu-world.com/cgi-bin/CPUID.pl
    https://ark.intel.com/content/www/us/en/ark.html

Jiri Denemark (30):
  cputest: Make sure generated files pass syntax-check
  cputest: Add data for Intel(R) Xeon(R) CPU E5-2630 v4
  cputest: Add data for Intel(R) Core(TM) i7-7600U
  cputest: Add data for Intel(R) Xeon(R) CPU E7540
  cputest: Add data for Intel(R) Xeon(R) CPU E5-2650
  cputest: Add data for Intel(R) Core(TM) i7-8700
  cpu_x86: Separate ancestor model parsing from x86ModelParse
  cpu_x86: Separate signature parsing from x86ModelParse
  cpu_x86: Separate vendor parsing from x86ModelParse
  cpu_x86: Separate feature list parsing from x86ModelParse
  cpu_x86: Make sure CPU model names are unique in cpu_map
  cpu_x86: Add x86ModelCopySignatures helper
  cpu_x86: Store CPU signature in an array
  cpu_x86: Allow multiple signatures for a CPU model
  cpu_x86: Log decoded CPU model and signatures
  qemu_capabilities: Inroduce virQEMUCapsGetCPUModelX86Data
  qemu_capabilities: Introduce virQEMUCapsGetCPUModelInfo
  qemu_capabilities: Use virQEMUCapsGetCPUModelInfo
  cpu_x86: Add virCPUx86DataGetSignature for tests
  cpu_map: Add hex representation of signatures
  cputest: Test CPU signatures
  cpu_map: Add more signatures for Conroe CPU model
  cpu_map: Add more signatures for Penryn CPU model
  cpu_map: Add more signatures for Nehalem CPU models
  cpu_map: Add more signatures for Westmere CPU model
  cpu_map: Add more signatures for SandyBridge CPU models
  cpu_map: Add more signatures for IvyBridge CPU models
  cpu_map: Add more signatures for Haswell CPU models
  cpu_map: Add more signatures for Broadwell CPU models
  cpu_map: Add more signatures for Skylake-Client CPU models

 src/cpu/cpu_x86.c                             |  357 ++++--
 src/cpu/cpu_x86.h                             |    5 +
 src/cpu_map/x86_Broadwell-IBRS.xml            |    5 +-
 src/cpu_map/x86_Broadwell-noTSX-IBRS.xml      |    5 +-
 src/cpu_map/x86_Broadwell-noTSX.xml           |    5 +-
 src/cpu_map/x86_Broadwell.xml                 |    5 +-
 src/cpu_map/x86_Conroe.xml                    |    3 +-
 src/cpu_map/x86_EPYC-IBRS.xml                 |    2 +-
 src/cpu_map/x86_EPYC.xml                      |    2 +-
 src/cpu_map/x86_Haswell-IBRS.xml              |    5 +-
 src/cpu_map/x86_Haswell-noTSX-IBRS.xml        |    5 +-
 src/cpu_map/x86_Haswell-noTSX.xml             |    5 +-
 src/cpu_map/x86_Haswell.xml                   |    5 +-
 src/cpu_map/x86_Icelake-Client.xml            |    2 +-
 src/cpu_map/x86_Icelake-Server.xml            |    2 +-
 src/cpu_map/x86_IvyBridge-IBRS.xml            |    3 +-
 src/cpu_map/x86_IvyBridge.xml                 |    3 +-
 src/cpu_map/x86_Nehalem-IBRS.xml              |    5 +-
 src/cpu_map/x86_Nehalem.xml                   |    5 +-
 src/cpu_map/x86_Opteron_G1.xml                |    2 +-
 src/cpu_map/x86_Opteron_G2.xml                |    2 +-
 src/cpu_map/x86_Opteron_G3.xml                |    2 +-
 src/cpu_map/x86_Opteron_G4.xml                |    2 +-
 src/cpu_map/x86_Opteron_G5.xml                |    2 +-
 src/cpu_map/x86_Penryn.xml                    |    3 +-
 src/cpu_map/x86_SandyBridge-IBRS.xml          |    3 +-
 src/cpu_map/x86_SandyBridge.xml               |    3 +-
 src/cpu_map/x86_Skylake-Client-IBRS.xml       |    7 +-
 src/cpu_map/x86_Skylake-Client.xml            |    7 +-
 src/cpu_map/x86_Skylake-Server-IBRS.xml       |    2 +-
 src/cpu_map/x86_Skylake-Server.xml            |    2 +-
 src/cpu_map/x86_Westmere-IBRS.xml             |    2 +-
 src/cpu_map/x86_Westmere.xml                  |    4 +-
 src/libvirt_private.syms                      |    1 +
 src/qemu/qemu_capabilities.c                  |   91 +-
 src/qemu/qemu_capspriv.h                      |    8 +
 tests/cputest.c                               |   91 ++
 tests/cputestdata/cpu-reformat.py             |    2 +-
 tests/cputestdata/x86_64-cpuid-A10-5800K.sig  |    4 +
 tests/cputestdata/x86_64-cpuid-Atom-D510.sig  |    4 +
 tests/cputestdata/x86_64-cpuid-Atom-N450.sig  |    4 +
 .../cputestdata/x86_64-cpuid-Core-i5-2500.sig |    4 +
 .../x86_64-cpuid-Core-i5-2540M.sig            |    4 +
 .../x86_64-cpuid-Core-i5-4670T.sig            |    4 +
 .../x86_64-cpuid-Core-i5-650-json.xml         |    9 +-
 .../cputestdata/x86_64-cpuid-Core-i5-650.sig  |    4 +
 .../cputestdata/x86_64-cpuid-Core-i5-6600.sig |    4 +
 .../x86_64-cpuid-Core-i7-2600-xsaveopt.sig    |    4 +
 .../cputestdata/x86_64-cpuid-Core-i7-2600.sig |    4 +
 .../x86_64-cpuid-Core-i7-3520M.sig            |    4 +
 .../x86_64-cpuid-Core-i7-3740QM.sig           |    4 +
 .../cputestdata/x86_64-cpuid-Core-i7-3770.sig |    4 +
 .../x86_64-cpuid-Core-i7-4510U.sig            |    4 +
 .../x86_64-cpuid-Core-i7-4600U.sig            |    4 +
 .../x86_64-cpuid-Core-i7-5600U-arat.sig       |    4 +
 .../x86_64-cpuid-Core-i7-5600U-ibrs.sig       |    4 +
 .../x86_64-cpuid-Core-i7-5600U.sig            |    4 +
 .../x86_64-cpuid-Core-i7-7600U-disabled.xml   |    6 +
 .../x86_64-cpuid-Core-i7-7600U-enabled.xml    |    8 +
 .../x86_64-cpuid-Core-i7-7600U-guest.xml      |   28 +
 .../x86_64-cpuid-Core-i7-7600U-host.xml       |   29 +
 .../x86_64-cpuid-Core-i7-7600U-json.xml       |   13 +
 .../x86_64-cpuid-Core-i7-7600U.json           |  755 +++++++++++
 .../x86_64-cpuid-Core-i7-7600U.sig            |    4 +
 .../x86_64-cpuid-Core-i7-7600U.xml            |   47 +
 .../cputestdata/x86_64-cpuid-Core-i7-7700.sig |    4 +
 .../x86_64-cpuid-Core-i7-8700-disabled.xml    |    6 +
 .../x86_64-cpuid-Core-i7-8700-enabled.xml     |    8 +
 .../x86_64-cpuid-Core-i7-8700-guest.xml       |   28 +
 .../x86_64-cpuid-Core-i7-8700-host.xml        |   29 +
 .../x86_64-cpuid-Core-i7-8700-json.xml        |   12 +
 .../x86_64-cpuid-Core-i7-8700.json            |  650 ++++++++++
 .../cputestdata/x86_64-cpuid-Core-i7-8700.sig |    4 +
 .../cputestdata/x86_64-cpuid-Core-i7-8700.xml |   47 +
 .../cputestdata/x86_64-cpuid-Core2-E6850.sig  |    4 +
 .../cputestdata/x86_64-cpuid-Core2-Q9500.sig  |    4 +
 .../x86_64-cpuid-EPYC-7601-32-Core-ibpb.sig   |    4 +
 .../x86_64-cpuid-EPYC-7601-32-Core.sig        |    4 +
 tests/cputestdata/x86_64-cpuid-FX-8150.sig    |    4 +
 .../cputestdata/x86_64-cpuid-Opteron-1352.sig |    4 +
 .../cputestdata/x86_64-cpuid-Opteron-2350.sig |    4 +
 .../cputestdata/x86_64-cpuid-Opteron-6234.sig |    4 +
 .../cputestdata/x86_64-cpuid-Opteron-6282.sig |    4 +
 .../x86_64-cpuid-Pentium-P6100-guest.xml      |   10 +-
 .../x86_64-cpuid-Pentium-P6100.sig            |    4 +
 tests/cputestdata/x86_64-cpuid-Phenom-B95.sig |    4 +
 .../x86_64-cpuid-Ryzen-7-1800X-Eight-Core.sig |    4 +
 tests/cputestdata/x86_64-cpuid-Xeon-5110.sig  |    4 +
 .../x86_64-cpuid-Xeon-E3-1245-v5.sig          |    4 +
 .../x86_64-cpuid-Xeon-E5-2609-v3.sig          |    4 +
 .../x86_64-cpuid-Xeon-E5-2623-v4-guest.xml    |   11 +-
 .../x86_64-cpuid-Xeon-E5-2623-v4-json.xml     |   11 +-
 .../x86_64-cpuid-Xeon-E5-2623-v4.sig          |    4 +
 .../x86_64-cpuid-Xeon-E5-2630-v3.sig          |    4 +
 .../x86_64-cpuid-Xeon-E5-2630-v4-disabled.xml |    7 +
 .../x86_64-cpuid-Xeon-E5-2630-v4-enabled.xml  |    8 +
 .../x86_64-cpuid-Xeon-E5-2630-v4-guest.xml    |   34 +
 .../x86_64-cpuid-Xeon-E5-2630-v4-host.xml     |   35 +
 .../x86_64-cpuid-Xeon-E5-2630-v4-json.xml     |   14 +
 .../x86_64-cpuid-Xeon-E5-2630-v4.json         |  596 +++++++++
 .../x86_64-cpuid-Xeon-E5-2630-v4.sig          |    4 +
 .../x86_64-cpuid-Xeon-E5-2630-v4.xml          |   43 +
 .../x86_64-cpuid-Xeon-E5-2650-disabled.xml    |    5 +
 .../x86_64-cpuid-Xeon-E5-2650-enabled.xml     |    8 +
 .../x86_64-cpuid-Xeon-E5-2650-guest.xml       |   29 +
 .../x86_64-cpuid-Xeon-E5-2650-host.xml        |   30 +
 .../x86_64-cpuid-Xeon-E5-2650-json.xml        |   14 +
 .../x86_64-cpuid-Xeon-E5-2650-v3.sig          |    4 +
 .../x86_64-cpuid-Xeon-E5-2650-v4-guest.xml    |   11 +-
 .../x86_64-cpuid-Xeon-E5-2650-v4-json.xml     |   11 +-
 .../x86_64-cpuid-Xeon-E5-2650-v4.sig          |    4 +
 .../x86_64-cpuid-Xeon-E5-2650.json            |  931 ++++++++++++++
 .../cputestdata/x86_64-cpuid-Xeon-E5-2650.sig |    4 +
 .../cputestdata/x86_64-cpuid-Xeon-E5-2650.xml |   34 +
 .../x86_64-cpuid-Xeon-E7-4820-guest.xml       |    8 +-
 .../x86_64-cpuid-Xeon-E7-4820-json.xml        |    8 +-
 .../cputestdata/x86_64-cpuid-Xeon-E7-4820.sig |    4 +
 .../x86_64-cpuid-Xeon-E7-4830-json.xml        |    9 +-
 .../cputestdata/x86_64-cpuid-Xeon-E7-4830.sig |    4 +
 .../x86_64-cpuid-Xeon-E7-8890-v3.sig          |    4 +
 .../x86_64-cpuid-Xeon-E7540-disabled.xml      |    5 +
 .../x86_64-cpuid-Xeon-E7540-enabled.xml       |    7 +
 .../x86_64-cpuid-Xeon-E7540-guest.xml         |   25 +
 .../x86_64-cpuid-Xeon-E7540-host.xml          |   26 +
 .../x86_64-cpuid-Xeon-E7540-json.xml          |   14 +
 .../cputestdata/x86_64-cpuid-Xeon-E7540.json  | 1117 +++++++++++++++++
 tests/cputestdata/x86_64-cpuid-Xeon-E7540.sig |    4 +
 tests/cputestdata/x86_64-cpuid-Xeon-E7540.xml |   30 +
 .../x86_64-cpuid-Xeon-Gold-5115.sig           |    4 +
 .../x86_64-cpuid-Xeon-Gold-6148.sig           |    4 +
 tests/cputestdata/x86_64-cpuid-Xeon-W3520.sig |    4 +
 tests/cputestdata/x86_64-cpuid-Xeon-X5460.sig |    4 +
 132 files changed, 5425 insertions(+), 206 deletions(-)
 create mode 100644 tests/cputestdata/x86_64-cpuid-A10-5800K.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Atom-D510.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Atom-N450.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i5-2500.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i5-2540M.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i5-4670T.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i5-650.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i5-6600.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-2600-xsaveopt.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-2600.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-3520M.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-3740QM.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-3770.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-4510U.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-4600U.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-5600U-arat.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-5600U-ibrs.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-5600U.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-7600U-disabled.xml
 create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-7600U-enabled.xml
 create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-7600U-guest.xml
 create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-7600U-host.xml
 create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-7600U-json.xml
 create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-7600U.json
 create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-7600U.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-7600U.xml
 create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-7700.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-8700-disabled.xml
 create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-8700-enabled.xml
 create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-8700-guest.xml
 create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-8700-host.xml
 create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-8700-json.xml
 create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-8700.json
 create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-8700.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-8700.xml
 create mode 100644 tests/cputestdata/x86_64-cpuid-Core2-E6850.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Core2-Q9500.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core-ibpb.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-EPYC-7601-32-Core.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-FX-8150.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Opteron-1352.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Opteron-2350.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Opteron-6234.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Opteron-6282.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Pentium-P6100.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Phenom-B95.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Ryzen-7-1800X-Eight-Core.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-5110.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E3-1245-v5.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E5-2609-v3.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E5-2623-v4.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E5-2630-v3.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E5-2630-v4-disabled.xml
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E5-2630-v4-enabled.xml
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E5-2630-v4-guest.xml
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E5-2630-v4-host.xml
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E5-2630-v4-json.xml
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E5-2630-v4.json
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E5-2630-v4.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E5-2630-v4.xml
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E5-2650-disabled.xml
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E5-2650-enabled.xml
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E5-2650-guest.xml
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E5-2650-host.xml
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E5-2650-json.xml
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E5-2650-v3.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E5-2650-v4.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E5-2650.json
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E5-2650.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E5-2650.xml
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E7-4820.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E7-4830.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E7-8890-v3.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E7540-disabled.xml
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E7540-enabled.xml
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E7540-guest.xml
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E7540-host.xml
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E7540-json.xml
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E7540.json
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E7540.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E7540.xml
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-Gold-5115.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-Gold-6148.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-W3520.sig
 create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-X5460.sig

-- 
2.21.0




More information about the libvir-list mailing list