From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 5689F9AAD9 for ; Mon, 22 May 2023 12:25:44 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id BD8F02FC97 for ; Mon, 22 May 2023 12:25:43 +0200 (CEST) Received: from bastionodiso.odiso.net (bastionodiso.odiso.net [IPv6:2a0a:1580:2000::2d]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS for ; Mon, 22 May 2023 12:25:40 +0200 (CEST) Received: from kvmformation3.odiso.net (formationkvm3.odiso.net [10.3.94.12]) by bastionodiso.odiso.net (Postfix) with ESMTP id 241428B6E; Mon, 22 May 2023 12:25:30 +0200 (CEST) Received: by kvmformation3.odiso.net (Postfix, from userid 0) id 22D672E8387; Mon, 22 May 2023 12:25:30 +0200 (CEST) From: Alexandre Derumier To: pve-devel@lists.proxmox.com Date: Mon, 22 May 2023 12:25:28 +0200 Message-Id: <20230522102528.186955-10-aderumier@odiso.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230522102528.186955-1-aderumier@odiso.com> References: <20230522102528.186955-1-aderumier@odiso.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SPAM-LEVEL: Spam detection results: 0 AWL -1.515 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy HEADER_FROM_DIFFERENT_DOMAINS 0.25 From and EnvelopeFrom 2nd level mail domains are different KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment KAM_LAZY_DOMAIN_SECURITY 1 Sending domain does not have any anti-forgery methods SCC_10_SHORT_WORD_LINES 1 10 lines with many short words SCC_20_SHORT_WORD_LINES 1 20 lines with many short words SCC_5_SHORT_WORD_LINES 1 5 lines with many short words SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_NONE 0.001 SPF: sender does not publish an SPF Record T_SCC_BODY_TEXT_LINE -0.01 - Subject: [pve-devel] [PATCH v3 qemu-server 7/7] add best cpu model detection tests X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 22 May 2023 10:25:44 -0000 Signed-off-by: Alexandre Derumier --- test/Makefile | 5 +- test/run_cpumodel_tests.pl | 272 +++++++++++++++++++++++++++++++++++++ 2 files changed, 276 insertions(+), 1 deletion(-) create mode 100755 test/run_cpumodel_tests.pl diff --git a/test/Makefile b/test/Makefile index 7a8487c..390b332 100644 --- a/test/Makefile +++ b/test/Makefile @@ -3,7 +3,7 @@ MIGRATION_TEST_TARGETS :=3D $(addprefix test_migration_,$(M= IGRATION_TEST_NAMES)) =20 all: test =20 -test: test_snapshot test_ovf test_cfg_to_cmd test_pci_addr_conflicts test_= qemu_img_convert test_migration test_restore_config +test: test_snapshot test_ovf test_cfg_to_cmd test_pci_addr_conflicts test_= qemu_img_convert test_migration test_restore_config test_cpumodel =20 test_snapshot: run_snapshot_tests.pl ./run_snapshot_tests.pl @@ -12,6 +12,9 @@ test_snapshot: run_snapshot_tests.pl test_ovf: run_ovf_tests.pl ./run_ovf_tests.pl =20 +test_cpumodel: run_cpumodel_tests.pl + ./run_cpumodel_tests.pl + test_cfg_to_cmd: run_config2command_tests.pl cfg2cmd/*.conf perl -I../ ./run_config2command_tests.pl =20 diff --git a/test/run_cpumodel_tests.pl b/test/run_cpumodel_tests.pl new file mode 100755 index 0000000..76d8ce4 --- /dev/null +++ b/test/run_cpumodel_tests.pl @@ -0,0 +1,272 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use lib qw(..); # prepend .. to @INC so we use the local version of PVE pa= ckages + +use PVE::QemuServer::CPUConfig; +use Test::More; + +use Data::Dumper; + + +print "test parsing cpumodel\n"; + +my $cpus =3D [ + { + expected_model =3D> 'IvyBridge', + name =3D> 'Intel(R) Xeon(R) CPU E5-2603 v2 @ 1.80GHz', + vendor =3D> 'GenuineIntel', + model =3D> 1, + flags =3D> "fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov= pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1= gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology non= stop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est t= m2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_t= imer aes xsave avx f16c rdrand lahf_lm cpuid_fault pti ssbd ibrs ibpb stibp= tpr_shadow vnmi flexpriority ept vpid fsgsbase smep erms xsaveopt dtherm a= rat pln pts md_clear flush_l1d" + }, + { + expected_model =3D> 'Haswell-noTSX-IBRS', + name =3D> 'Intel(R) Xeon(R) CPU E5-2687W v3 @ 3.10GHz', + vendor =3D> 'GenuineIntel', + model =3D> 1, + msr =3D> { + 'spec-ctrl' =3D> 0, + }, + flags =3D> "fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov= pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1= gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology non= stop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est t= m2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt= tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm cpuid_fault epb i= nvpcid_single pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpi= d ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm xsaveopt = cqm_llc cqm_occup_llc dtherm ida arat pln pts md_clear flush_l1d", + }, + { + expected_model =3D> 'Haswell-noTSX', + name =3D> 'Intel(R) Xeon(R) CPU E5-2687W v3 @ 3.10GHz', + vendor =3D> 'GenuineIntel', + model =3D> 1, + flags =3D> "fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov= pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1= gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology non= stop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est t= m2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt= tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm cpuid_fault epb i= nvpcid_single pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpi= d ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm xsaveopt = cqm_llc cqm_occup_llc dtherm ida arat pln pts md_clear flush_l1d", + }, + { + expected_model =3D> 'Broadwell-noTSX', #model is Broadwell, but best com= patible version is notsx + name =3D> 'Intel(R) Xeon(R) CPU E5-2687W v4 @ 3.00GHz', + vendor =3D> 'GenuineIntel', + model =3D> 1, + flags =3D> "fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov= pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1= gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology non= stop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est t= m2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt= tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpu= id_fault epb cat_l3 cdp_l3 invpcid_single pti ssbd ibrs ibpb stibp tpr_shad= ow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 hle avx2 smep= bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap intel_pt xsaveopt cqm_llc = cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts md_clear = flush_l1d" + }, + { + expected_model =3D> 'Broadwell-noTSX-IBRS', + name =3D> 'Intel(R) Xeon(R) CPU E5-2687W v4 @ 3.00GHz', + vendor =3D> 'GenuineIntel', + model =3D> 1, + msr =3D> { + 'spec-ctrl' =3D> 0, + 'arch-capabilities' =3D> 511, + }, + flags =3D> "fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov= pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1= gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology non= stop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est t= m2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt= tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpu= id_fault epb cat_l3 cdp_l3 invpcid_single pti ssbd ibrs ibpb stibp tpr_shad= ow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 hle avx2 smep= bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap intel_pt xsaveopt cqm_llc = cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts md_clear = flush_l1d" + }, + { + expected_model =3D> 'Broadwell-noTSX-IBRS', + name =3D> 'Intel(R) Core(TM) i7-9700K CPU @ 3.60GHz', + vendor =3D> 'GenuineIntel', + model =3D> 1, + msr =3D> { + 'spec-ctrl' =3D> 0, + }, + flags =3D> "fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov= pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1= gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology= nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx sm= x est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe pop= cnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch = ida arat epb invpcid_single pln pts dtherm hwp hwp_notify hwp_act_window hw= p_epp intel_pt rsb_ctxsw spec_ctrl retpoline kaiser tpr_shadow vnmi flexpri= ority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm= mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1" + }, + { + expected_model =3D> 'Skylake-Server', + name =3D> 'Intel(R) Xeon(R) Gold 6136 CPU @ 3.00GHz', + vendor =3D> 'GenuineIntel', + model =3D> 1, + flags =3D> "fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov= pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1= gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology= nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx e= st tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe po= pcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch= cpuid_fault epb cat_l3 cdp_l3 invpcid_single pti intel_ppin ssbd mba ibrs = ibpb stibp tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust= bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm mpx rdt_a avx512f avx512dq rd= seed adx smap clflushopt clwb intel_pt avx512cd avx512bw avx512vl xsaveopt = xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dth= erm ida arat pln pts pku ospke md_clear flush_l1d arch_capabilities" + }, + { + expected_model =3D> 'Skylake-Server-v5', + name =3D> 'Intel(R) Xeon(R) Gold 6136 CPU @ 3.00GHz', + vendor =3D> 'GenuineIntel', + model =3D> 1, + msr =3D> { + 'spec-ctrl' =3D> 0, + }, + flags =3D> "fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov= pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1= gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology= nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx e= st tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe po= pcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch= cpuid_fault epb cat_l3 cdp_l3 invpcid_single pti intel_ppin ssbd mba ibrs = ibpb stibp tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust= bmi1 avx2 smep bmi2 erms invpcid cqm mpx rdt_a avx512f avx512dq rdseed adx= smap clflushopt clwb intel_pt avx512cd avx512bw avx512vl xsaveopt xsavec x= getbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida = arat pln pts pku ospke md_clear flush_l1d arch_capabilities" + }, + { + expected_model =3D> 'Cascadelake-Server', + name =3D> 'Intel(R) Xeon(R) Gold 6240R CPU @ 2.40GHz', + vendor =3D> 'GenuineIntel', + model =3D> 1, + msr =3D> { + 'spec-ctrl' =3D> 0, + }, + flags =3D> "fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov= pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1= gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology= nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx e= st tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe po= pcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch= cpuid_fault epb cat_l3 cdp_l3 invpcid_single intel_ppin ssbd mba ibrs ibpb= stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adj= ust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm mpx rdt_a avx512f avx512dq= rdseed adx smap clflushopt clwb intel_pt avx512cd avx512bw avx512vl xsaveo= pt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local = dtherm ida arat pln pts pku ospke avx512_vnni md_clear flush_l1d arch_capab= ilities" + }, + { + expected_model =3D> 'Cascadelake-Server-v5', + name =3D> 'Intel(R) Xeon(R) Gold 6240R CPU @ 2.40GHz', + vendor =3D> 'GenuineIntel', + model =3D> 1, + msr =3D> { + 'spec-ctrl' =3D> 0, + 'arch-capabilities' =3D> 511, + }, + flags =3D> "fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov= pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1= gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology= nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx e= st tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe po= pcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch= cpuid_fault epb cat_l3 cdp_l3 invpcid_single intel_ppin ssbd mba ibrs ibpb= stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adj= ust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm mpx rdt_a avx512f avx512dq= rdseed adx smap clflushopt clwb intel_pt avx512cd avx512bw avx512vl xsaveo= pt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local = dtherm ida arat pln pts pku ospke avx512_vnni md_clear flush_l1d arch_capab= ilities" + }, + { + expected_model =3D> 'Cooperlake-v2', + name =3D> 'Intel(R) Xeon(R) Gold 5318H CPU @ 2.50GHz', + vendor =3D> 'GenuineIntel', + model =3D> 1, + msr =3D> { + 'spec-ctrl' =3D> 0, + 'arch-capabilities' =3D> 511, + }, + flags =3D> "fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov= pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1= gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology= nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx e= st tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe po= pcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch= cpuid_fault epb cat_l3 cdp_l3 invpcid_single intel_ppin ssbd mba ibrs ibpb= stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adj= ust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm mpx rdt_a avx512f avx512dq= rdseed adx smap clflushopt clwb intel_pt avx512cd avx512bw avx512vl xsaveo= pt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local = avx512_bf16 dtherm ida arat pln pts pku ospke avx512_vnni md_clear flush_l1= d arch_capabilities" + }, + { + expected_model =3D> 'Icelake-Server-v3', + name =3D> 'Intel(R) Xeon(R) Gold 6354 CPU @ 3.00GHz', + vendor =3D> 'GenuineIntel', + model =3D> 1, + msr =3D> { + 'spec-ctrl' =3D> 0, + 'arch-capabilities' =3D> 511, + }, + flags =3D> "fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov= pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1= gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology= nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx e= st tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe po= pcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch= cpuid_fault epb cat_l3 invpcid_single ssbd mba ibrs ibpb stibp ibrs_enhanc= ed tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 = smep bmi2 erms invpcid rtm cqm rdt_a avx512f avx512dq rdseed adx smap avx51= 2ifma clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt x= savec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local wbno= invd dtherm ida arat pln pts avx512vbmi umip pku ospke avx512_vbmi2 gfni va= es vpclmulqdq avx512_vnni avx512_bitalg tme avx512_vpopcntdq la57 rdpid md_= clear pconfig flush_l1d arch_capabilities" + }, + { + expected_model =3D> 'SapphireRapids', + name =3D> 'Intel(R) Xeon(R) Gold 6430', + vendor =3D> 'GenuineIntel', + model =3D> 1, + msr =3D> { + 'spec-ctrl' =3D> 0, + 'arch-capabilities' =3D> 511, + }, + flags =3D> "fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov= pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1= gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology= nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor h= le rtm ds_cpl smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse= 4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_l= m abm 3dnowprefetch cpuid_fault epb cat_l3 cat_l2 cdp_l3 invpcid_single cdp= _l2 ssbd mba ibrs ibpb stibp ibrs_enhanced fsgsbase tsc_adjust bmi1 avx2 sm= ep bmi2 erms invpcid cqm rdt_a avx512f avx512dq rdseed adx smap avx512ifma = clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt xsavec = xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local split_lock= _detect avx_vnni avx512_bf16 wbnoinvd dtherm ida arat pln pts avx512vbmi um= ip pku ospke waitpkg avx512_vbmi2 gfni vaes vpclmulqdq avx512_vnni avx512_b= italg tme avx512_vpopcntdq la57 rdpid bus_lock_detect cldemote movdiri movd= ir64b enqcmd fsrm md_clear serialize tsxldtrk pconfig arch_lbr amx_bf16 avx= 512_fp16 amx_tile amx_int8 flush_l1d arch_capabilities" + }, + { + expected_model =3D> 'EPYC-v3', + name =3D> 'AMD EPYC 7251 8-Core Processor', + vendor =3D> 'AuthenticAMD', + model =3D> 1, + flags =3D> "fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov= pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb = rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid amd_dcm = aperfmperf pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt = aes xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm sse= 4a misalignsse 3dnowprefetch osvw skinit wdt tce topoext perfctr_core perfc= tr_nb bpext perfctr_llc mwaitx cpb hw_pstate sme ssbd ibpb vmmcall fsgsbase= bmi1 avx2 smep bmi2 rdseed adx smap clflushopt sha_ni xsaveopt xsavec xget= bv1 xsaves clzero irperf xsaveerptr arat npt lbrv svm_lock nrip_save tsc_sc= ale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold avic v_vms= ave_vmload vgif overflow_recov succor smca" + }, + { + expected_model =3D> 'EPYC-Rome-v2', + name =3D> 'AMD EPYC 7542 32-Core Processor', + vendor =3D> 'AuthenticAMD', + model =3D> 1, + flags =3D> "fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov= pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb = rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid aperfmpe= rf pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt aes xsav= e avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misal= ignsse 3dnowprefetch osvw ibs skinit wdt tce topoext perfctr_core perfctr_n= b bpext perfctr_llc mwaitx cpb cat_l3 cdp_l3 hw_pstate ssbd mba ibrs ibpb s= tibp vmmcall fsgsbase bmi1 avx2 smep bmi2 cqm rdt_a rdseed adx smap clflush= opt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mb= m_total cqm_mbm_local clzero irperf xsaveerptr rdpru wbnoinvd amd_ppin arat= npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists= pausefilter pfthreshold avic v_vmsave_vmload vgif v_spec_ctrl umip rdpid o= verflow_recov succor smca sme sev sev_es" + }, + { + expected_model =3D> 'EPYC-Rome-v2', + name =3D> 'AMD Ryzen 7 PRO 6850U', + vendor =3D> 'AuthenticAMD', + model =3D> 1, + flags =3D> "fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov= pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb = rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid aperfmpe= rf rapl pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe pop= cnt aes xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm= sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt tce topoext perfctr_co= re perfctr_nb bpext perfctr_llc mwaitx cpb cat_l3 cdp_l3 hw_pstate ssbd mba= ibrs ibpb stibp vmmcall fsgsbase bmi1 avx2 smep bmi2 erms invpcid cqm rdt_= a rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves cqm= _llc cqm_occup_llc cqm_mbm_total cqm_mbm_local clzero irperf xsaveerptr rdp= ru wbnoinvd cppc arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flus= hbyasid decodeassists pausefilter pfthreshold avic v_vmsave_vmload vgif v_s= pec_ctrl umip pku ospke vaes vpclmulqdq rdpid overflow_recov succor smca fs= rm" + }, + { + expected_model =3D> 'EPYC-Milan', + name =3D> 'AMD EPYC 7543 32-Core Processor', + vendor =3D> 'AuthenticAMD', + model =3D> 1, + flags =3D> "fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov= pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb = rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid aperfmpe= rf rapl pni pclmulqdq monitor ssse3 fma cx16 pcid sse4_1 sse4_2 movbe popcn= t aes xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm s= se4a misalignsse 3dnowprefetch osvw ibs skinit wdt tce topoext perfctr_core= perfctr_nb bpext perfctr_llc mwaitx cpb cat_l3 cdp_l3 invpcid_single hw_ps= tate ssbd mba ibrs ibpb stibp vmmcall fsgsbase bmi1 avx2 smep bmi2 erms inv= pcid cqm rdt_a rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetb= v1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local clzero irperf x= saveerptr rdpru wbnoinvd amd_ppin arat npt lbrv svm_lock nrip_save tsc_scal= e vmcb_clean flushbyasid decodeassists pausefilter pfthreshold v_vmsave_vml= oad vgif v_spec_ctrl umip pku ospke vaes vpclmulqdq rdpid overflow_recov su= ccor smca fsrm" + }, +]; + + +foreach my $cpuinfo (@$cpus) { + my $host_flags =3D PVE::QemuServer::CPUConfig::get_host_cpu_flags($cpu= info); + my $model =3D PVE::QemuServer::CPUConfig::find_best_cpumodel($host_fla= gs, $cpuinfo->{vendor}); + my $expected_model =3D $cpuinfo->{expected_model}; + is($model, $expected_model, $expected_model); +} + + +my $cpus_groups =3D [ + { + expected_model =3D> 'IvyBridge', + group =3D> [ + { + qemu_model =3D> 'IvyBridge', + name =3D> 'Intel(R) Xeon(R) CPU E5-2603 v2 @ 1.80GHz', + vendor =3D> 'GenuineIntel', + model =3D> 1, + flags =3D> "fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmo= v pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe= 1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology no= nstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est = tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_= timer aes xsave avx f16c rdrand lahf_lm cpuid_fault pti ssbd ibrs ibpb stib= p tpr_shadow vnmi flexpriority ept vpid fsgsbase smep erms xsaveopt dtherm = arat pln pts md_clear flush_l1d" + }, + { + qemu_model =3D> 'Haswell-noTSX-IBRS', + name =3D> 'Intel(R) Xeon(R) CPU E5-2687W v3 @ 3.10GHz', + vendor =3D> 'GenuineIntel', + model =3D> 1, + msr =3D> { + 'spec-ctrl' =3D> 0, + }, + flags =3D> "fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmo= v pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe= 1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology no= nstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est = tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcn= t tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm cpuid_fault epb = invpcid_single pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vp= id ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm xsaveopt= cqm_llc cqm_occup_llc dtherm ida arat pln pts md_clear flush_l1d", + }, + ] + }, + { + expected_model =3D> 'EPYC-v3', + group =3D> [ + { + expected_model =3D> 'EPYC-v3', + name =3D> 'AMD EPYC 7251 8-Core Processor', + vendor =3D> 'AuthenticAMD', + model =3D> 1, + flags =3D> "fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmo= v pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb= rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid amd_dcm= aperfmperf pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt= aes xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm ss= e4a misalignsse 3dnowprefetch osvw skinit wdt tce topoext perfctr_core perf= ctr_nb bpext perfctr_llc mwaitx cpb hw_pstate sme ssbd ibpb vmmcall fsgsbas= e bmi1 avx2 smep bmi2 rdseed adx smap clflushopt sha_ni xsaveopt xsavec xge= tbv1 xsaves clzero irperf xsaveerptr arat npt lbrv svm_lock nrip_save tsc_s= cale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold avic v_vm= save_vmload vgif overflow_recov succor smca" + }, + { + qemu_model =3D> 'EPYC-Rome-v2', + name =3D> 'AMD Ryzen 7 PRO 6850U', + vendor =3D> 'AuthenticAMD', + model =3D> 1, + flags =3D> "fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmo= v pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb= rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid aperfmp= erf rapl pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe po= pcnt aes xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy ab= m sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt tce topoext perfctr_c= ore perfctr_nb bpext perfctr_llc mwaitx cpb cat_l3 cdp_l3 hw_pstate ssbd mb= a ibrs ibpb stibp vmmcall fsgsbase bmi1 avx2 smep bmi2 erms invpcid cqm rdt= _a rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves cq= m_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local clzero irperf xsaveerptr rd= pru wbnoinvd cppc arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flu= shbyasid decodeassists pausefilter pfthreshold avic v_vmsave_vmload vgif v_= spec_ctrl umip pku ospke vaes vpclmulqdq rdpid overflow_recov succor smca f= srm" + }, + ] + }, + { + expected_model =3D> 'x86-64-v2', + group =3D> [ + { + qemu_model =3D> 'IvyBridge', + name =3D> 'Intel(R) Xeon(R) CPU E5-2603 v2 @ 1.80GHz', + vendor =3D> 'GenuineIntel', + model =3D> 1, + flags =3D> "fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmo= v pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe= 1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology no= nstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est = tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_= timer aes xsave avx f16c rdrand lahf_lm cpuid_fault pti ssbd ibrs ibpb stib= p tpr_shadow vnmi flexpriority ept vpid fsgsbase smep erms xsaveopt dtherm = arat pln pts md_clear flush_l1d" + }, + { + qemu_model =3D> 'EPYC-Rome-v2', + name =3D> 'AMD Ryzen 7 PRO 6850U', + vendor =3D> 'AuthenticAMD', + model =3D> 1, + flags =3D> "fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmo= v pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb= rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid aperfmp= erf rapl pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe po= pcnt aes xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy ab= m sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt tce topoext perfctr_c= ore perfctr_nb bpext perfctr_llc mwaitx cpb cat_l3 cdp_l3 hw_pstate ssbd mb= a ibrs ibpb stibp vmmcall fsgsbase bmi1 avx2 smep bmi2 erms invpcid cqm rdt= _a rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves cq= m_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local clzero irperf xsaveerptr rd= pru wbnoinvd cppc arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flu= shbyasid decodeassists pausefilter pfthreshold avic v_vmsave_vmload vgif v_= spec_ctrl umip pku ospke vaes vpclmulqdq rdpid overflow_recov succor smca f= srm" + }, + ] + }, + { + expected_model =3D> 'x86-64-v3', + group =3D> [ + { + qemu_model =3D> 'Icelake-Server-v3', + name =3D> 'Intel(R) Xeon(R) Gold 6354 CPU @ 3.00GHz', + vendor =3D> 'GenuineIntel', + model =3D> 1, + msr =3D> { + 'spec-ctrl' =3D> 0, + 'arch-capabilities' =3D> 511, + }, + flags =3D> "fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmo= v pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe= 1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopolog= y nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx = est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe p= opcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetc= h cpuid_fault epb cat_l3 invpcid_single ssbd mba ibrs ibpb stibp ibrs_enhan= ced tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2= smep bmi2 erms invpcid rtm cqm rdt_a avx512f avx512dq rdseed adx smap avx5= 12ifma clflushopt clwb intel_pt avx512cd sha_ni avx512bw avx512vl xsaveopt = xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local wbn= oinvd dtherm ida arat pln pts avx512vbmi umip pku ospke avx512_vbmi2 gfni v= aes vpclmulqdq avx512_vnni avx512_bitalg tme avx512_vpopcntdq la57 rdpid md= _clear pconfig flush_l1d arch_capabilities" + }, + { + qemu_model =3D> 'EPYC-Rome-v2', + name =3D> 'AMD Ryzen 7 PRO 6850U', + vendor =3D> 'AuthenticAMD', + model =3D> 1, + flags =3D> "fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmo= v pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb= rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid aperfmp= erf rapl pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe po= pcnt aes xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy ab= m sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt tce topoext perfctr_c= ore perfctr_nb bpext perfctr_llc mwaitx cpb cat_l3 cdp_l3 hw_pstate ssbd mb= a ibrs ibpb stibp vmmcall fsgsbase bmi1 avx2 smep bmi2 erms invpcid cqm rdt= _a rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves cq= m_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local clzero irperf xsaveerptr rd= pru wbnoinvd cppc arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flu= shbyasid decodeassists pausefilter pfthreshold avic v_vmsave_vmload vgif v_= spec_ctrl umip pku ospke vaes vpclmulqdq rdpid overflow_recov succor smca f= srm" + }, + ] + } +]; + +foreach my $group (@$cpus_groups) { + + my ($common_flags, $common_vendor) =3D PVE::QemuServer::CPUConfig::fin= d_hosts_common_flags($group->{group}); + my $model =3D PVE::QemuServer::CPUConfig::find_best_cpumodel($common_f= lags, $common_vendor); + my $expected_model =3D $group->{expected_model}; + is($model, $expected_model, $expected_model); +} + +done_testing(); --=20 2.30.2