all lists on lists.proxmox.com
 help / color / mirror / Atom feed
From: Alexandre Derumier <aderumier@odiso.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH v3 qemu-server 4/7] cpuconfig: add get_host_cpu_flags
Date: Mon, 22 May 2023 12:25:25 +0200	[thread overview]
Message-ID: <20230522102528.186955-7-aderumier@odiso.com> (raw)
In-Reply-To: <20230522102528.186955-1-aderumier@odiso.com>

parse cpuinfo flags && msr and create an hash with all flags

convert to qemu naming if needed

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
---
 PVE/QemuServer/CPUConfig.pm | 70 +++++++++++++++++++++++++++++++++++++
 1 file changed, 70 insertions(+)

diff --git a/PVE/QemuServer/CPUConfig.pm b/PVE/QemuServer/CPUConfig.pm
index 64be1f4..45bf26f 100644
--- a/PVE/QemuServer/CPUConfig.pm
+++ b/PVE/QemuServer/CPUConfig.pm
@@ -13,6 +13,7 @@ use base qw(PVE::SectionConfig Exporter);
 our @EXPORT_OK = qw(
 print_cpu_device
 get_cpu_options
+get_host_cpu_flags
 );
 
 # under certain race-conditions, this module might be loaded before pve-cluster
@@ -626,6 +627,75 @@ sub get_cpu_from_running_vm {
     return $1;
 }
 
+sub get_host_cpu_flags {
+    my ($cpuinfo) = @_;
+
+    my $res = {};
+
+    #some qemu flag have different name than cpuinfo
+    my $map = {
+	'sse4_1' => 'sse4.1',
+	'sse4_2' => 'sse4.2',
+	'tsc_deadline_timer' => 'tsc-deadline',
+	'pclmulqdq' => 'pclmuldq',
+	'arch_capabilities' => 'arch-capabilities',
+	'avx512_vnni' => 'avx512vnni',
+	'avx512_bf16' => 'avx512-bf16',
+	'avx512_vpopcntdq' => 'avx512-vpopcntdq',
+	'avx512_vbmi2' => 'avx512vbmi2',
+	'avx512_bitalg' => 'avx512bitalg',
+	'avx512_fp16' => 'avx512-fp16',
+	'sha_ni' => 'sha-ni',
+	'cr8_legacy' => 'cr8legacy',
+	'nrip_save' => 'nrip-save',
+	'amx_bf16' => 'amx-bf16',
+	'avx_vnni' => 'avx-vnni',
+	'amx_int8' => 'amx-int8',
+	'amx_tile' => 'amx-tile',
+	'bus_lock_detect' => 'bus-lock-detect',
+	'tsxldtrk' => 'tsx-ldtrk',
+    };
+
+    if ($cpuinfo->{vendor} eq 'AuthenticAMD') {
+	$map->{ssbd} = 'amd-ssbd';
+	$map->{stibp} = 'amd-stibp';
+    }
+
+    my @flags = split ' ', $cpuinfo->{'flags'};
+    foreach my $flag (@flags) {
+	$flag = $map->{$flag} if $map->{$flag};
+	next if !$qemu_supported_flags->{$flag};
+        $res->{$flag} = 1;
+    }
+
+    #spec-ctrl msr
+    my $spectre_msr = $cpuinfo->{msr}->{'spec-ctrl'};
+    $res->{'spec-ctrl'} = 1 if defined($spectre_msr) && $spectre_msr == 0;
+
+    #arch-capabilities msr
+    my $capabilities = {
+	'rdctl-no' => 0,
+	'ibrs-all' => 1,
+	'rsba' => 2,
+	'skip-l1dfl-vmentry' => 3,
+	'ssb-no' => 4,
+	'mds-no' => 5,
+	'pschange-mc-no' => 6,
+	'tsx-ctrl' => 7,
+	'taa-no' => 8,
+	'fb-clear' => 17
+    };
+
+    if ($cpuinfo->{msr}->{'arch-capabilities'}) {
+	foreach my $capabilitie (keys %$capabilities) {
+	    my $value = $capabilities->{$capabilitie};
+	    $res->{$capabilitie} = 1 if $cpuinfo->{msr}->{'arch-capabilities'} >> $value & 1;
+	}
+    }
+
+    return $res;
+}
+
 __PACKAGE__->register();
 __PACKAGE__->init();
 
-- 
2.30.2




  parent reply	other threads:[~2023-05-22 10:26 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
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 v3 qemu-server 1/7] cpuconfig: add new x86-64-vX models Alexandre Derumier
2023-05-31 11:08   ` Fiona Ebner
2023-05-31 15:08     ` DERUMIER, Alexandre
2023-06-01  9:17       ` Fiona Ebner
2023-06-01 11:27         ` DERUMIER, Alexandre
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
2023-05-22 10:25 ` [pve-devel] [PATCH pve-common 1/1] read_cpuinfo: add msr support Alexandre Derumier
2023-05-22 10:25 ` [pve-devel] [PATCH v3 qemu-server 2/7] cpumodel: add cpu models with flags Alexandre Derumier
2023-05-22 10:25 ` [pve-devel] [PATCH v3 qemu-server 3/7] cpumodel: compute qemu supported flags Alexandre Derumier
2023-05-22 10:25 ` Alexandre Derumier [this message]
2023-05-22 10:25 ` [pve-devel] [PATCH v3 qemu-server 5/7] cpuconfig: add find_best_cpumodel Alexandre Derumier
2023-05-22 10:25 ` [pve-devel] [PATCH v3 qemu-server 6/7] cpuconfig: add find_hosts_common_flags Alexandre Derumier
2023-05-22 10:25 ` [pve-devel] [PATCH v3 qemu-server 7/7] add best cpu model detection tests Alexandre Derumier
2023-05-31 11:36 ` [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 Fiona Ebner
2023-05-31 14:34   ` DERUMIER, Alexandre
2023-06-01  8:34     ` Fiona Ebner
2023-06-01  9:06       ` DERUMIER, Alexandre
2023-06-03 14:14         ` Thomas Lamprecht
2023-06-04  6:29           ` DERUMIER, Alexandre
2023-06-03 14:05       ` Thomas Lamprecht
2023-06-01  9:34 ` Fiona Ebner
2023-06-01 11:37   ` DERUMIER, Alexandre
2023-06-01 13:53     ` DERUMIER, Alexandre
2023-06-01 15:56       ` Fiona Ebner
2023-06-01 21:15         ` DERUMIER, Alexandre
2023-06-02  7:28           ` Fiona Ebner
2023-06-02  9:13             ` DERUMIER, Alexandre
2023-06-02 11:13               ` Fiona Ebner
2023-06-02 11:44                 ` DERUMIER, Alexandre
2023-06-03 14:21               ` Thomas Lamprecht
     [not found]     ` <8277a27b-a70f-b731-69f7-fc9ae69b2da2@binovo.es>
2023-06-01 16:00       ` Fiona Ebner
2023-06-02 12:41         ` Aaron Lauterer
2023-06-02 14:15           ` DERUMIER, Alexandre
2023-06-02 16:09             ` Aaron Lauterer
2023-06-02 16:27               ` DERUMIER, Alexandre
     [not found]         ` <fa3565e5-3a9c-9348-f291-554a0e0d6628@binovo.es>
2023-06-06  9:15           ` Fiona Ebner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230522102528.186955-7-aderumier@odiso.com \
    --to=aderumier@odiso.com \
    --cc=pve-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal