From 16ebeb7d216e056f94c7ab7ecc2db0435a764d41 Mon Sep 17 00:00:00 2001 From: Abhijeet Kasurde Date: Tue, 4 Jun 2024 13:35:07 -0700 Subject: [PATCH] facts: add facts about x86_64 flags to detect microarchitecture (#83356) Fixes: #83331 Signed-off-by: Abhijeet Kasurde --- changelogs/fragments/83331.yml | 3 ++ .../module_utils/facts/hardware/linux.py | 3 ++ .../fixtures/cpuinfo/x86_64-2cpu-cpuinfo | 8 ++--- .../fixtures/cpuinfo/x86_64-4cpu-cpuinfo | 12 +++---- .../module_utils/facts/hardware/linux_data.py | 34 +++++++++++++++++++ 5 files changed, 46 insertions(+), 14 deletions(-) create mode 100644 changelogs/fragments/83331.yml diff --git a/changelogs/fragments/83331.yml b/changelogs/fragments/83331.yml new file mode 100644 index 00000000000..9de98f282ba --- /dev/null +++ b/changelogs/fragments/83331.yml @@ -0,0 +1,3 @@ +--- +bugfixes: + - facts - add facts about x86_64 flags to detect microarchitecture (https://github.com/ansible/ansible/issues/83331). diff --git a/lib/ansible/module_utils/facts/hardware/linux.py b/lib/ansible/module_utils/facts/hardware/linux.py index 55d48c224f0..af1fd426a52 100644 --- a/lib/ansible/module_utils/facts/hardware/linux.py +++ b/lib/ansible/module_utils/facts/hardware/linux.py @@ -209,6 +209,9 @@ class LinuxHardware(Hardware): if 'vme' not in val: xen_paravirt = True + if key == "flags": + cpu_facts['flags'] = val.split() + # model name is for Intel arch, Processor (mind the uppercase P) # works for some ARM devices, like the Sheevaplug. if key in ['model name', 'Processor', 'vendor_id', 'cpu', 'Vendor', 'processor']: diff --git a/test/units/module_utils/facts/fixtures/cpuinfo/x86_64-2cpu-cpuinfo b/test/units/module_utils/facts/fixtures/cpuinfo/x86_64-2cpu-cpuinfo index 1d233f8dc8a..1b569a34a44 100644 --- a/test/units/module_utils/facts/fixtures/cpuinfo/x86_64-2cpu-cpuinfo +++ b/test/units/module_utils/facts/fixtures/cpuinfo/x86_64-2cpu-cpuinfo @@ -17,9 +17,7 @@ fpu : yes fpu_exception : yes cpuid level : 13 wp : yes -flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp l' -m constant_tsc arch_perfmon rep_good nopl xtopology cpuid tsc_known_freq pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadlin' -e_timer aes xsave avx f16c rdrand hypervisor lahf_lm pti fsgsbase tsc_adjust smep erms xsaveopt arat +flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl xtopology cpuid tsc_known_freq pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm pti fsgsbase tsc_adjust smep erms xsaveopt arat bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf bogomips : 5602.32 clflush size : 64 @@ -45,9 +43,7 @@ fpu : yes fpu_exception : yes cpuid level : 13 wp : yes -flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp l' -m constant_tsc arch_perfmon rep_good nopl xtopology cpuid tsc_known_freq pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadlin' -e_timer aes xsave avx f16c rdrand hypervisor lahf_lm pti fsgsbase tsc_adjust smep erms xsaveopt arat +flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl xtopology cpuid tsc_known_freq pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm pti fsgsbase tsc_adjust smep erms xsaveopt arat bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf bogomips : 5602.32 clflush size : 64 diff --git a/test/units/module_utils/facts/fixtures/cpuinfo/x86_64-4cpu-cpuinfo b/test/units/module_utils/facts/fixtures/cpuinfo/x86_64-4cpu-cpuinfo index fcc396db8d9..981ecaef326 100644 --- a/test/units/module_utils/facts/fixtures/cpuinfo/x86_64-4cpu-cpuinfo +++ b/test/units/module_utils/facts/fixtures/cpuinfo/x86_64-4cpu-cpuinfo @@ -16,8 +16,7 @@ fpu : yes fpu_exception : yes cpuid level : 1 wp : yes -flags : 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 ' -rdtscp lm 3dnowext 3dnow art rep_good nopl extd_apicid pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy retpoline_amd vmmcall +flags : 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 rdtscp lm 3dnowext 3dnow art rep_good nopl extd_apicid pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy retpoline_amd vmmcall bogomips : 1994.60 TLB size : 1024 4K pages clflush size : 64 @@ -42,8 +41,7 @@ fpu : yes fpu_exception : yes cpuid level : 1 wp : yes -flags : 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 ' -rdtscp lm 3dnowext 3dnow art rep_good nopl extd_apicid pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy retpoline_amd vmmcall +flags : 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 rdtscp lm 3dnowext 3dnow art rep_good nopl extd_apicid pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy retpoline_amd vmmcall bogomips : 1994.60 TLB size : 1024 4K pages clflush size : 64 @@ -68,8 +66,7 @@ fpu : yes fpu_exception : yes cpuid level : 1 wp : yes -flags : 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 ' -rdtscp lm 3dnowext 3dnow art rep_good nopl extd_apicid pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy retpoline_amd vmmcall +flags : 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 rdtscp lm 3dnowext 3dnow art rep_good nopl extd_apicid pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy retpoline_amd vmmcall bogomips : 1994.60 TLB size : 1024 4K pages clflush size : 64 @@ -94,8 +91,7 @@ fpu : yes fpu_exception : yes cpuid level : 1 wp : yes -flags : 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 ' -rdtscp lm 3dnowext 3dnow art rep_good nopl extd_apicid pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy retpoline_amd vmmcall +flags : 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 rdtscp lm 3dnowext 3dnow art rep_good nopl extd_apicid pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy retpoline_amd vmmcall bogomips : 1994.60 TLB size : 1024 4K pages clflush size : 64 diff --git a/test/units/module_utils/facts/hardware/linux_data.py b/test/units/module_utils/facts/hardware/linux_data.py index 1598e34f193..d526ebcca99 100644 --- a/test/units/module_utils/facts/hardware/linux_data.py +++ b/test/units/module_utils/facts/hardware/linux_data.py @@ -434,6 +434,15 @@ CPU_INFO_TEST_SCENARIOS = [ 'processor_count': 2, 'processor_nproc': 4, 'processor_threads_per_core': 1, + 'flags': [ + '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', 'rdtscp', 'lm', + '3dnowext', '3dnow', 'art', 'rep_good', 'nopl', 'extd_apicid', + 'pni', 'cx16', 'lahf_lm', 'cmp_legacy', 'svm', 'extapic', + 'cr8_legacy', 'retpoline_amd', 'vmmcall' + ], 'processor_vcpus': 4}, }, { @@ -456,6 +465,21 @@ CPU_INFO_TEST_SCENARIOS = [ 'processor_count': 1, 'processor_nproc': 4, 'processor_threads_per_core': 2, + 'flags': [ + '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', + 'pdpe1gb', 'rdtscp', 'lm', 'constant_tsc', 'arch_perfmon', + 'pebs', 'bts', 'rep_good', 'nopl', 'xtopology', 'nonstop_tsc', + 'aperfmperf', 'eagerfpu', 'pni', 'pclmulqdq', 'dtes64', 'monitor', + 'ds_cpl', 'vmx', 'smx', 'est', 'tm2', 'ssse3', 'sdbg', 'fma', 'cx16', + 'xtpr', 'pdcm', 'pcid', 'sse4_1', 'sse4_2', 'x2apic', 'movbe', + 'popcnt', 'tsc_deadline_timer', 'aes', 'xsave', 'avx', 'f16c', + 'rdrand', 'lahf_lm', 'abm', 'epb', 'tpr_shadow', 'vnmi', 'flexpriority', + 'ept', 'vpid', 'fsgsbase', 'tsc_adjust', 'bmi1', 'avx2', 'smep', 'bmi2', + 'erms', 'invpcid', 'xsaveopt', 'dtherm', 'ida', 'arat', 'pln', 'pts' + ], 'processor_vcpus': 8}, }, { @@ -507,6 +531,16 @@ CPU_INFO_TEST_SCENARIOS = [ 'processor_count': 2, 'processor_nproc': 2, 'processor_threads_per_core': 1, + 'flags': [ + 'fpu', 'vme', 'de', 'pse', 'tsc', 'msr', 'pae', 'mce', 'cx8', 'apic', + 'sep', 'mtrr', 'pge', 'mca', 'cmov', 'pat', 'pse36', 'clflush', 'mmx', + 'fxsr', 'sse', 'sse2', 'ss', 'syscall', 'nx', 'pdpe1gb', 'rdtscp', 'lm', + 'constant_tsc', 'arch_perfmon', 'rep_good', 'nopl', 'xtopology', + 'cpuid', 'tsc_known_freq', 'pni', 'pclmulqdq', 'ssse3', 'cx16', + 'pcid', 'sse4_1', 'sse4_2', 'x2apic', 'popcnt', 'tsc_deadline_timer', + 'aes', 'xsave', 'avx', 'f16c', 'rdrand', 'hypervisor', 'lahf_lm', + 'pti', 'fsgsbase', 'tsc_adjust', 'smep', 'erms', 'xsaveopt', 'arat' + ], 'processor_vcpus': 2}, }, {