* [pve-devel] [PATCH-SERIES v2 qemu-server/manager] add and set x86-64-v2 as default model for new vms
@ 2023-05-17 16:14 Alexandre Derumier
2023-05-17 16:14 ` [pve-devel] [PATCH v2 qemu-server 1/1] cpuconfig: add new x86-64-vX models Alexandre Derumier
2023-05-17 16:14 ` [pve-devel] [PATCH v2 pve-manager 1/1] qemu: processor : set x86-64-v2 as default cputype for create wizard Alexandre Derumier
0 siblings, 2 replies; 4+ messages in thread
From: Alexandre Derumier @ 2023-05-17 16:14 UTC (permalink / raw)
To: pve-devel
Hi,
we used kvm64 as default cpumodel since the begin of proxmox. (basically, it's like a pentium4 cpu flags).
New distros like rhel9 are compiled to use more modern cpu flags.
(and windows already use new flags since year, and we already add some extra cpu flags)
"
In 2020, AMD, Intel, Red Hat, and SUSE worked together to define
three microarchitecture levels on top of the historical x86-64
baseline:
* x86-64-v1: original x86_64 baseline instruction set
* x86-64-v2: vector instructions up to Streaming SIMD
Extensions 4.2 (SSE4.2) and Supplemental
Streaming SIMD Extensions 3 (SSSE3), the
POPCNT instruction, and CMPXCHG16B
* x86-64-v3: vector instructions up to AVX2, MOVBE,
and additional bit-manipulation instructions.
* x86-64-v4: vector instructions from some of the
AVX-512 variants.
"
This patch series add new models inspired from a patch was found on qemu mailing, but never appplied
https://lore.kernel.org/all/20210526144038.278899-1-berrange@redhat.com/T/
In addition to theses model, I have enabled aes too.
I think it's really important, because a lot of users use default values and have
bad performance with ssl and other crypto stuffs.
This was discussed on the qemu mailing
"
Crypto accelerator caveats
==========================
Similarly I'm not a huge fan of leaving out the "aes"
instruction for accelerated crypto, as missing "aes" is
also one of the key factors in making qemu64 a bad choice.
If we include 'aes' in x86-64-v2, then we loose support
for Nehalem hosts.
If we include 'aes' in x86-64-v3 then we further loose
support for Dhyana hosts (an EPYC derived CPU).
"
Nahelemn is a 2008 cpu, so I think it's ok, we are in 2013 ;)
(and user can disable aes flag in gui too)
That mean than the minimum compatible cpu for v2 is Intel Westmere (2010)
and Amd Bulldozer (2011).
This patch series add new models, and set x86-64-abi2 model as default in pve-manager
wizard only.
(to not break current vm, where kvm64 is the default when cputype is not defined
in configuration)
changelog v2:
- remove qemu patch and implement new models in qemu-server
- use x86-64-vX instead x86-64-abiX (less confusing for user)
- don't expose v4 model for now (need epyc v4 for testing)
- use add and set x86-64-v2 as default model for new vms
qemu-server:
Alexandre Derumier (1):
cpuconfig: add new x86-64-vX models
PVE/QemuServer/CPUConfig.pm | 33 +++++++++++++++++++++++++++++++--
1 file changed, 31 insertions(+), 2 deletions(-)
pve-manager:
Alexandre Derumier (1):
qemu: processor : set x86-64-v2 as default cputype for create wizard
www/manager6/qemu/OSDefaults.js | 1 +
www/manager6/qemu/ProcessorEdit.js | 13 +++++++++++++
2 files changed, 14 insertions(+)
--
2.30.2
^ permalink raw reply [flat|nested] 4+ messages in thread
* [pve-devel] [PATCH v2 qemu-server 1/1] cpuconfig: add new x86-64-vX models
2023-05-17 16:14 [pve-devel] [PATCH-SERIES v2 qemu-server/manager] add and set x86-64-v2 as default model for new vms Alexandre Derumier
@ 2023-05-17 16:14 ` Alexandre Derumier
2023-05-17 16:14 ` [pve-devel] [PATCH v2 pve-manager 1/1] qemu: processor : set x86-64-v2 as default cputype for create wizard Alexandre Derumier
1 sibling, 0 replies; 4+ messages in thread
From: Alexandre Derumier @ 2023-05-17 16:14 UTC (permalink / raw)
To: pve-devel
https://lore.kernel.org/all/20210526144038.278899-1-berrange@redhat.com/T/
"
In 2020, AMD, Intel, Red Hat, and SUSE worked together to define
three microarchitecture levels on top of the historical x86-64
baseline:
* x86-64: original x86_64 baseline instruction set
* x86-64-v2: vector instructions up to Streaming SIMD
Extensions 4.2 (SSE4.2) and Supplemental
Streaming SIMD Extensions 3 (SSSE3), the
POPCNT instruction, and CMPXCHG16B
* x86-64-v3: vector instructions up to AVX2, MOVBE,
and additional bit-manipulation instructions.
* x86-64-v4: vector instructions from some of the
AVX-512 variants.
"
This patch add new builtin model derivated from original models,
to be compatible between intel/amd.
x86-64-v1 : Derived from Opteron_G1, minus vme
x86-64-v2 : Derived from Nehalem, -vme,+aes
min intel: Westmere (because of aes)
min amd : Opteron_G3
x86-64-v3 : Derived from Haswell-noTSX, -pcid,-erms,-invpcid,-tsc-deadline,-x2apic,-pclmulqdq,+aes
min intel: Haswell
min amd : EPYC_v1
x86-64-v4 : Derived from Skylake-Server-noTSX-IBRS, -spec-ctrl
min intel: Skylake
min amd : EPYC_v4
(v4 model not yet exposed, because not yet tested, other models have been tested)
Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
---
PVE/QemuServer/CPUConfig.pm | 33 +++++++++++++++++++++++++++++++--
1 file changed, 31 insertions(+), 2 deletions(-)
diff --git a/PVE/QemuServer/CPUConfig.pm b/PVE/QemuServer/CPUConfig.pm
index fb0861b..54bbd55 100644
--- a/PVE/QemuServer/CPUConfig.pm
+++ b/PVE/QemuServer/CPUConfig.pm
@@ -31,6 +31,25 @@ sub load_custom_model_conf {
return cfs_read_file($default_filename);
}
+my $builtin_models = {
+ 'x86-64-v1' => {
+ 'reported-model' => 'Opteron_G1',
+ flags => "-vme;-svm;-vmx",
+ },
+ 'x86-64-v2' => {
+ 'reported-model' => 'Nehalem',
+ flags => "+aes;-svm;-vmx",
+ },
+ 'x86-64-v3' => {
+ 'reported-model' => 'Haswell-noTSX',
+ flags => "+aes;-pcid;-erms;-invpcid;-tsc-deadline;-x2apic;-pclmulqdq;-svm;-vmx",
+ },
+# 'x86-64-v4' => {
+# 'reported-model' => 'Skylake-Server-noTSX-IBRS',
+# flags => "+aes;-spec-ctrl;-svm;-vmx",
+# },
+};
+
my $depreacated_cpu_map = {
# there never was such a client CPU, so map it to the server one for backward compat
'Icelake-Client' => 'Icelake-Server',
@@ -96,6 +115,9 @@ my $cpu_vendor_list = {
kvm64 => 'default',
qemu32 => 'default',
qemu64 => 'default',
+ 'x86-64-v1' => 'default',
+ 'x86-64-v2' => 'default',
+ 'x86-64-v3' => 'default',
max => 'default',
};
@@ -359,7 +381,10 @@ sub print_cpu_device {
or die "Cannot parse cpu description: $cputype\n";
$cpu = $cpuconf->{cputype};
- if (is_custom_model($cpu)) {
+ if (my $model = $builtin_models->{$cpu}) {
+ $cpu = $model->{'reported-model'} // $cpu_fmt->{'reported-model'}->{default};
+ }
+ if (is_custom_model($cputype)) {
my $custom_cpu = get_custom_model($cpu);
$cpu = $custom_cpu->{'reported-model'} // $cpu_fmt->{'reported-model'}->{default};
@@ -474,7 +499,11 @@ sub get_cpu_options {
or die "Cannot parse cpu description: $cpu_prop_str\n";
$cputype = $cpu->{cputype};
-
+ if (my $model = $builtin_models->{$cputype}) {
+ my $model = $builtin_models->{$cputype};
+ $cputype = $model->{'reported-model'} // $cpu_fmt->{'reported-model'}->{default};
+ $custom_cpu->{flags} = $model->{'flags'};
+ }
if (is_custom_model($cputype)) {
$custom_cpu = get_custom_model($cputype);
--
2.30.2
^ permalink raw reply [flat|nested] 4+ messages in thread
* [pve-devel] [PATCH v2 pve-manager 1/1] qemu: processor : set x86-64-v2 as default cputype for create wizard
2023-05-17 16:14 [pve-devel] [PATCH-SERIES v2 qemu-server/manager] add and set x86-64-v2 as default model for new vms Alexandre Derumier
2023-05-17 16:14 ` [pve-devel] [PATCH v2 qemu-server 1/1] cpuconfig: add new x86-64-vX models Alexandre Derumier
@ 2023-05-17 16:14 ` Alexandre Derumier
1 sibling, 0 replies; 4+ messages in thread
From: Alexandre Derumier @ 2023-05-17 16:14 UTC (permalink / raw)
To: pve-devel
Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
---
www/manager6/qemu/OSDefaults.js | 1 +
www/manager6/qemu/ProcessorEdit.js | 13 +++++++++++++
2 files changed, 14 insertions(+)
diff --git a/www/manager6/qemu/OSDefaults.js b/www/manager6/qemu/OSDefaults.js
index 5e588a58..fe3ed2c2 100644
--- a/www/manager6/qemu/OSDefaults.js
+++ b/www/manager6/qemu/OSDefaults.js
@@ -43,6 +43,7 @@ Ext.define('PVE.qemu.OSDefaults', {
virtio: 1,
},
scsihw: 'virtio-scsi-single',
+ cputype: 'x86-64-v2',
};
// virtio-net is in kernel since 2.6.25
diff --git a/www/manager6/qemu/ProcessorEdit.js b/www/manager6/qemu/ProcessorEdit.js
index b845ff66..727d1679 100644
--- a/www/manager6/qemu/ProcessorEdit.js
+++ b/www/manager6/qemu/ProcessorEdit.js
@@ -29,6 +29,19 @@ Ext.define('PVE.qemu.ProcessorInputPanel', {
viewModel.set('userIsRoot', Proxmox.UserName === 'root@pam');
},
+ control: {
+ '#': {
+ afterrender: 'setCputype',
+ },
+ },
+ setCputype: function() {
+ let me = this;
+ let view = me.getView();
+ let cputype = view.down('CPUModelSelector[name=cputype]');
+ if (view.insideWizard) {
+ cputype.setValue(PVE.qemu.OSDefaults.generic.cputype);
+ }
+ },
},
onGetValues: function(values) {
--
2.30.2
^ permalink raw reply [flat|nested] 4+ messages in thread
* [pve-devel] [PATCH-SERIES v3 qemu-server/manager/common] add and set x86-64-v2 as default model for new vms and detect best cpumodel
@ 2023-05-22 10:25 Alexandre Derumier
2023-05-22 10:25 ` [pve-devel] [PATCH v2 pve-manager 1/1] qemu: processor : set x86-64-v2 as default cputype for create wizard Alexandre Derumier
0 siblings, 1 reply; 4+ messages in thread
From: Alexandre Derumier @ 2023-05-22 10:25 UTC (permalink / raw)
To: pve-devel
Hi,
we used kvm64 as default cpumodel since the begin of proxmox. (basically, it's like a pentium4 cpu flags).
New distros like rhel9 are compiled to use more modern cpu flags.
(and windows already use new flags since year, and we already add some extra cpu flags)
"
In 2020, AMD, Intel, Red Hat, and SUSE worked together to define
three microarchitecture levels on top of the historical x86-64
baseline:
* x86-64-v1: original x86_64 baseline instruction set
* x86-64-v2: vector instructions up to Streaming SIMD
Extensions 4.2 (SSE4.2) and Supplemental
Streaming SIMD Extensions 3 (SSSE3), the
POPCNT instruction, and CMPXCHG16B
* x86-64-v3: vector instructions up to AVX2, MOVBE,
and additional bit-manipulation instructions.
* x86-64-v4: vector instructions from some of the
AVX-512 variants.
"
This patch series add new models inspired from a patch was found on qemu mailing, but never appplied
https://lore.kernel.org/all/20210526144038.278899-1-berrange@redhat.com/T/
In addition to theses model, I have enabled aes too.
I think it's really important, because a lot of users use default values and have
bad performance with ssl and other crypto stuffs.
This was discussed on the qemu mailing
"
Crypto accelerator caveats
==========================
Similarly I'm not a huge fan of leaving out the "aes"
instruction for accelerated crypto, as missing "aes" is
also one of the key factors in making qemu64 a bad choice.
If we include 'aes' in x86-64-v2, then we loose support
for Nehalem hosts.
If we include 'aes' in x86-64-v3 then we further loose
support for Dhyana hosts (an EPYC derived CPU).
"
Nahelemn is a 2008 cpu, so I think it's ok, we are in 2013 ;)
(and user can disable aes flag in gui too)
That mean than the minimum compatible cpu for v2 is Intel Westmere (2010)
and Amd Bulldozer (2011).
This patch series add new models, and set x86-64-abi2 model as default in pve-manager
wizard only.
(to not break current vm, where kvm64 is the default when cputype is not defined
in configuration)
Additionnaly, it could be great to use a real cpu model when we don't have
mixed intel/amd cluster, to have spectre/meltdown/.... mitigations enabled.
I have added initial code for best model detection based on host cpuflags
vs qemu models flags.
Not yet plugged, I'm not sure what is the best way, only at vm create,
or at vm start to auto upgrade vm cpu to last version ?
I'm not sure with cluster, if user add a new older node.
(vmware have a feature called EVC, compute the best model when node join/leave)
changelog v2:
- remove qemu patch and implement new models in qemu-server
- use x86-64-vX instead x86-64-abiX (less confusing for user)
- don't expose v4 model for now (need epyc v4 for testing)
- use add and set x86-64-v2 as default model for new vms
changelog v3:
- add best cpu model detection from cpu flags && msr
- pve-common : add optionnal parsing of msr in read_cpuinfo
qemu-server :
Alexandre Derumier (7):
cpuconfig: add new x86-64-vX models
cpumodel: add cpu models with flags
cpumodel: compute qemu supported flags
cpuconfig: add get_host_cpu_flags
cpuconfig: add find_best_cpumodel
cpuconfig: add find_hosts_common_flags
add best cpu model detection tests
PVE/QemuServer/CPUConfig.pm | 253 ++-
PVE/QemuServer/CPUModels.pm | 4221 +++++++++++++++++++++++++++++++++++
PVE/QemuServer/Makefile | 1 +
test/Makefile | 5 +-
test/run_cpumodel_tests.pl | 272 +++
5 files changed, 4682 insertions(+), 70 deletions(-)
create mode 100644 PVE/QemuServer/CPUModels.pm
create mode 100755 test/run_cpumodel_tests.pl
pve-common:
Alexandre Derumier (1):
read_cpuinfo: add msr support
src/PVE/ProcFSTools.pm | 41 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 41 insertions(+)
pve-manager:
Alexandre Derumier (1):
qemu: processor : set x86-64-v2 as default cputype for create wizard
www/manager6/qemu/OSDefaults.js | 1 +
www/manager6/qemu/ProcessorEdit.js | 13 +++++++++++++
2 files changed, 14 insertions(+)
--
2.30.2
^ permalink raw reply [flat|nested] 4+ messages in thread
* [pve-devel] [PATCH v2 pve-manager 1/1] qemu: processor : set x86-64-v2 as default cputype for create wizard
2023-05-22 10:25 [pve-devel] [PATCH-SERIES v3 qemu-server/manager/common] add and set x86-64-v2 as default model for new vms and detect best cpumodel Alexandre Derumier
@ 2023-05-22 10:25 ` Alexandre Derumier
0 siblings, 0 replies; 4+ messages in thread
From: Alexandre Derumier @ 2023-05-22 10:25 UTC (permalink / raw)
To: pve-devel
Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
---
www/manager6/qemu/OSDefaults.js | 1 +
www/manager6/qemu/ProcessorEdit.js | 13 +++++++++++++
2 files changed, 14 insertions(+)
diff --git a/www/manager6/qemu/OSDefaults.js b/www/manager6/qemu/OSDefaults.js
index 5e588a58..fe3ed2c2 100644
--- a/www/manager6/qemu/OSDefaults.js
+++ b/www/manager6/qemu/OSDefaults.js
@@ -43,6 +43,7 @@ Ext.define('PVE.qemu.OSDefaults', {
virtio: 1,
},
scsihw: 'virtio-scsi-single',
+ cputype: 'x86-64-v2',
};
// virtio-net is in kernel since 2.6.25
diff --git a/www/manager6/qemu/ProcessorEdit.js b/www/manager6/qemu/ProcessorEdit.js
index b845ff66..727d1679 100644
--- a/www/manager6/qemu/ProcessorEdit.js
+++ b/www/manager6/qemu/ProcessorEdit.js
@@ -29,6 +29,19 @@ Ext.define('PVE.qemu.ProcessorInputPanel', {
viewModel.set('userIsRoot', Proxmox.UserName === 'root@pam');
},
+ control: {
+ '#': {
+ afterrender: 'setCputype',
+ },
+ },
+ setCputype: function() {
+ let me = this;
+ let view = me.getView();
+ let cputype = view.down('CPUModelSelector[name=cputype]');
+ if (view.insideWizard) {
+ cputype.setValue(PVE.qemu.OSDefaults.generic.cputype);
+ }
+ },
},
onGetValues: function(values) {
--
2.30.2
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2023-05-22 10:25 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-05-17 16:14 [pve-devel] [PATCH-SERIES v2 qemu-server/manager] add and set x86-64-v2 as default model for new vms Alexandre Derumier
2023-05-17 16:14 ` [pve-devel] [PATCH v2 qemu-server 1/1] cpuconfig: add new x86-64-vX models Alexandre Derumier
2023-05-17 16:14 ` [pve-devel] [PATCH v2 pve-manager 1/1] qemu: processor : set x86-64-v2 as default cputype for create wizard Alexandre Derumier
2023-05-22 10:25 [pve-devel] [PATCH-SERIES v3 qemu-server/manager/common] add and set x86-64-v2 as default model for new vms and detect best cpumodel Alexandre Derumier
2023-05-22 10:25 ` [pve-devel] [PATCH v2 pve-manager 1/1] qemu: processor : set x86-64-v2 as default cputype for create wizard Alexandre Derumier
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox