134 lines
7.1 KiB
Diff
134 lines
7.1 KiB
Diff
From d3ebc990ba65801fbed2aaf1dce8329698667d1c Mon Sep 17 00:00:00 2001
|
|
From: Michal Hecko <mhecko@redhat.com>
|
|
Date: Wed, 28 Aug 2024 12:18:40 +0200
|
|
Subject: [PATCH 13/40] check_microarch: add rhel10 requirements
|
|
|
|
---
|
|
.../actors/checkmicroarchitecture/actor.py | 13 ++++++++++--
|
|
.../libraries/checkmicroarchitecture.py | 8 +++++--
|
|
.../tests/test_checkmicroarchitecture.py | 21 ++++++++++++++-----
|
|
3 files changed, 33 insertions(+), 9 deletions(-)
|
|
|
|
diff --git a/repos/system_upgrade/common/actors/checkmicroarchitecture/actor.py b/repos/system_upgrade/common/actors/checkmicroarchitecture/actor.py
|
|
index 98ffea80..bb342f2f 100644
|
|
--- a/repos/system_upgrade/common/actors/checkmicroarchitecture/actor.py
|
|
+++ b/repos/system_upgrade/common/actors/checkmicroarchitecture/actor.py
|
|
@@ -17,7 +17,8 @@ class CheckMicroarchitecture(Actor):
|
|
levels.
|
|
|
|
RHEL9 has a higher CPU requirement than older versions, it now requires a
|
|
- CPU compatible with ``x86-64-v2`` instruction set or higher.
|
|
+ CPU compatible with ``x86-64-v2`` instruction set or higher. Similarly,
|
|
+ RHEL10 requires at least ``x86-64-v3`` instruction set.
|
|
|
|
.. table:: Required CPU features by microarchitecure level with a
|
|
corresponding flag as shown by ``lscpu``.
|
|
@@ -43,7 +44,15 @@ class CheckMicroarchitecture(Actor):
|
|
| | SSE4_2 | sse4_2 |
|
|
| | SSSE3 | ssse3 |
|
|
+------------+-------------+--------------------+
|
|
- | ... | | |
|
|
+ | x86-64-v3 | AVX | avx |
|
|
+ | | AVX2 | avx2 |
|
|
+ | | BMI1 | bmi1 |
|
|
+ | | BMI2 | bmi2 |
|
|
+ | | F16C | f16c |
|
|
+ | | FMA | fma |
|
|
+ | | LZCNT | abm |
|
|
+ | | MOVBE | movbe |
|
|
+ | | OSXSAVE | xsave |
|
|
+------------+-------------+--------------------+
|
|
|
|
Note: To get the corresponding flag for the CPU feature consult the file
|
|
diff --git a/repos/system_upgrade/common/actors/checkmicroarchitecture/libraries/checkmicroarchitecture.py b/repos/system_upgrade/common/actors/checkmicroarchitecture/libraries/checkmicroarchitecture.py
|
|
index cc617203..94e85e3e 100644
|
|
--- a/repos/system_upgrade/common/actors/checkmicroarchitecture/libraries/checkmicroarchitecture.py
|
|
+++ b/repos/system_upgrade/common/actors/checkmicroarchitecture/libraries/checkmicroarchitecture.py
|
|
@@ -8,6 +8,7 @@ from leapp.models import CPUInfo
|
|
|
|
X86_64_BASELINE_FLAGS = ['cmov', 'cx8', 'fpu', 'fxsr', 'mmx', 'syscall', 'sse', 'sse2']
|
|
X86_64_V2_FLAGS = ['cx16', 'lahf_lm', 'popcnt', 'pni', 'sse4_1', 'sse4_2', 'ssse3']
|
|
+X86_64_V3_FLAGS = ['avx2', 'bmi1', 'bmi2', 'f16c', 'fma', 'abm', 'movbe', 'xsave']
|
|
|
|
MicroarchInfo = namedtuple('MicroarchInfo', ('required_flags', 'extra_report_fields', 'microarch_ver'))
|
|
|
|
@@ -16,7 +17,7 @@ def _inhibit_upgrade(missing_flags, target_rhel, microarch_ver, extra_report_fie
|
|
title = 'Current x86-64 microarchitecture is unsupported in {0}'.format(target_rhel)
|
|
summary = ('{0} has a higher CPU requirement than older versions, it now requires a CPU '
|
|
'compatible with {1} instruction set or higher.\n\n'
|
|
- 'Missings flags detected are: {2}\n'.format(target_rhel, microarch_ver, ', '.join(missing_flags)))
|
|
+ 'Missings flags detected are: {2}\n').format(target_rhel, microarch_ver, ', '.join(missing_flags))
|
|
|
|
report_fields = [
|
|
reporting.Title(title),
|
|
@@ -24,7 +25,7 @@ def _inhibit_upgrade(missing_flags, target_rhel, microarch_ver, extra_report_fie
|
|
reporting.Severity(reporting.Severity.HIGH),
|
|
reporting.Groups([reporting.Groups.INHIBITOR]),
|
|
reporting.Groups([reporting.Groups.SANITY]),
|
|
- reporting.Remediation(hint=('If case of using virtualization, virtualization platforms often allow '
|
|
+ reporting.Remediation(hint=('If a case of using virtualization, virtualization platforms often allow '
|
|
'configuring a minimum denominator CPU model for compatibility when migrating '
|
|
'between different CPU models. Ensure that minimum requirements are not below '
|
|
'that of {0}\n').format(target_rhel)),
|
|
@@ -56,6 +57,9 @@ def process():
|
|
'9': MicroarchInfo(microarch_ver='x86-64-v2',
|
|
required_flags=(X86_64_BASELINE_FLAGS + X86_64_V2_FLAGS),
|
|
extra_report_fields=[rhel9_microarch_article]),
|
|
+ '10': MicroarchInfo(microarch_ver='x86-64-v3',
|
|
+ required_flags=(X86_64_BASELINE_FLAGS + X86_64_V2_FLAGS + X86_64_V3_FLAGS),
|
|
+ extra_report_fields=[]),
|
|
}
|
|
|
|
microarch_info = rhel_major_to_microarch_reqs.get(get_target_major_version())
|
|
diff --git a/repos/system_upgrade/common/actors/checkmicroarchitecture/tests/test_checkmicroarchitecture.py b/repos/system_upgrade/common/actors/checkmicroarchitecture/tests/test_checkmicroarchitecture.py
|
|
index b0624f2b..eeca8be0 100644
|
|
--- a/repos/system_upgrade/common/actors/checkmicroarchitecture/tests/test_checkmicroarchitecture.py
|
|
+++ b/repos/system_upgrade/common/actors/checkmicroarchitecture/tests/test_checkmicroarchitecture.py
|
|
@@ -25,10 +25,15 @@ def test_not_x86_64_passes(monkeypatch, arch):
|
|
assert not reporting.create_report.called
|
|
|
|
|
|
+ENTIRE_V2_FLAG_SET = checkmicroarchitecture.X86_64_BASELINE_FLAGS + checkmicroarchitecture.X86_64_V2_FLAGS
|
|
+ENTIRE_V3_FLAG_SET = ENTIRE_V2_FLAG_SET + checkmicroarchitecture.X86_64_V3_FLAGS
|
|
+
|
|
+
|
|
@pytest.mark.parametrize(
|
|
('target_ver', 'cpu_flags'),
|
|
[
|
|
- ('9.0', checkmicroarchitecture.X86_64_BASELINE_FLAGS + checkmicroarchitecture.X86_64_V2_FLAGS)
|
|
+ ('9.0', ENTIRE_V2_FLAG_SET),
|
|
+ ('10.0', ENTIRE_V3_FLAG_SET)
|
|
]
|
|
)
|
|
def test_valid_microarchitecture(monkeypatch, target_ver, cpu_flags):
|
|
@@ -48,16 +53,22 @@ def test_valid_microarchitecture(monkeypatch, target_ver, cpu_flags):
|
|
assert not reporting.create_report.called
|
|
|
|
|
|
-@pytest.mark.parametrize('target_ver', ['9.0'])
|
|
-def test_invalid_microarchitecture(monkeypatch, target_ver):
|
|
+@pytest.mark.parametrize(
|
|
+ ('target_ver', 'cpu_flags'),
|
|
+ (
|
|
+ ('9.0', checkmicroarchitecture.X86_64_BASELINE_FLAGS),
|
|
+ ('10.0', ENTIRE_V2_FLAG_SET),
|
|
+ )
|
|
+)
|
|
+def test_invalid_microarchitecture(monkeypatch, target_ver, cpu_flags):
|
|
"""
|
|
Test report is generated on x86-64 architecture with invalid microarchitecture and the upgrade is inhibited
|
|
"""
|
|
-
|
|
+ cpu_info = CPUInfo(flags=cpu_flags)
|
|
monkeypatch.setattr(reporting, "create_report", create_report_mocked())
|
|
monkeypatch.setattr(api, 'current_logger', logger_mocked())
|
|
monkeypatch.setattr(api, 'current_actor',
|
|
- CurrentActorMocked(arch=ARCH_X86_64, msgs=[CPUInfo()], dst_ver=target_ver))
|
|
+ CurrentActorMocked(arch=ARCH_X86_64, msgs=[cpu_info], dst_ver=target_ver))
|
|
|
|
checkmicroarchitecture.process()
|
|
|
|
--
|
|
2.47.0
|
|
|