Bug 2114997

Summary: virt-what doesn't detect kvm for aarch64 in GCE
Product: Red Hat Enterprise Linux 9 Reporter: Craig Donnelly <cdonnell>
Component: virt-whatAssignee: Richard W.M. Jones <rjones>
Status: CLOSED ERRATA QA Contact: YongkuiGuo <yoguo>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: 9.0CC: eric.auger, qzhang, rjones, virt-maint, ymao, yoguo
Target Milestone: rcKeywords: Triaged
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: virt-what-1.22-2.el9 Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2022-11-15 11:12:59 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Craig Donnelly 2022-08-03 16:54:06 UTC
Description of problem:
subscription-manager has a requirement to offer automatic registration requirements in major cloud providers. Currently, we deliver `cloud-what` to determine which cloud a system is on to attempt a auto-registration for a given host. Our tooling also looks for input from virt-what to determine facts that are used for entitlements, and this auto-registration process (sub-man facts -> virt.{host_type,is_guest}). virt.host_type is defined with the output of `virt-what`.

In the process of testing subscription-manager auto-registration in GCE, it was found that virt-what returns nothing on ARM systems in GCE.

In my testing, there is information that indicates it is a KVM system, but not in the ways looked for by virt-what.

This issue will prevent automatic registration from working in GCE for ARM systems.

Version-Release number of selected component (if applicable):
virt-what-1.21-2.el9.2.aarch64

How reproducible:
100%

Steps to Reproduce:
1. Deploy RHEL 9 in GCE on aarch64
2. `virt-what`

Actual results:
[root@r9-arm facts]# virt-what;echo $?
0

Expected results:
$ virt-what
kvm
(if another valid new value is added, we will need to update code as well afaik)

Additional info:
Will attach dmidecode output and subscription-manager facts below:

[root@r9-arm ~]# dmidecode
# dmidecode 3.3
Getting SMBIOS data from sysfs.
SMBIOS 2.4 present.
16 structures occupying 588 bytes.
Table at 0xFFFE0000.

Handle 0x0000, DMI type 0, 24 bytes
BIOS Information
        Vendor: Google
        Version: Google
        Release Date: 06/20/2022
        Address: 0xE8000
        Runtime Size: 96 kB
        ROM Size: 64 kB
        Characteristics:
                BIOS characteristics not supported
                Targeted content distribution is supported
        BIOS Revision: 1.0

Handle 0x0097, DMI type 1, 27 bytes
System Information
        Manufacturer: Google
        Product Name: Google Compute Engine
        Version: Not Specified
        Serial Number: GoogleCloud-957EDC416C53B28F6DA35168B6F8648D
        UUID: 957edc41-6c53-b28f-6da3-5168b6f8648d
        Wake-up Type: Power Switch
        SKU Number: Not Specified
        Family: Not Specified

Handle 0x0098, DMI type 2, 15 bytes
Base Board Information
        Manufacturer: KVM
        Product Name: Google Compute Engine
        Version: Not Specified
        Serial Number: Board-GoogleCloud-957EDC416C53B28F6DA35168B6F8648D
        Asset Tag: 957EDC41-6C53-B28F-6DA3-5168B6F8648D
        Features:
                Board is a hosting board
        Location In Chassis: Not Specified
        Chassis Handle: 0x0099
        Type: Motherboard
        Contained Object Handles: 0

Handle 0x0099, DMI type 3, 20 bytes
Chassis Information
        Manufacturer: Google
        Type: Other
        Lock: Not Present
        Version: Not Specified
        Serial Number: Not Specified
        Asset Tag: Not Specified
        Boot-up State: Safe
        Power Supply State: Safe
        Thermal State: Safe
        Security Status: Unknown
        OEM Information: 0x00000000
        Height: Unspecified
        Number Of Power Cords: Unspecified

Handle 0x3001, DMI type 7, 17 bytes
Cache Information
        Socket Designation: L1 Cache
        Configuration: Disabled, Not Socketed, Level 1
        Operational Mode: Write Through
        Location: Internal
        Installed Size: 0 kB
        Maximum Size: 1 kB
        Supported SRAM Types: None
        Installed SRAM Type: None

Handle 0x3002, DMI type 7, 17 bytes
Cache Information
        Socket Designation: L2 Cache
        Configuration: Disabled, Not Socketed, Level 1
        Operational Mode: Write Back
        Location: Internal
        Installed Size: 0 kB
        Maximum Size: 0 kB
        Supported SRAM Types: None
        Installed SRAM Type: None

Handle 0x3003, DMI type 7, 17 bytes
Cache Information
        Socket Designation: L3 Cache
        Configuration: Disabled, Not Socketed, Level 1
        Operational Mode: Varies With Memory Address
        Location: Internal
        Installed Size: 256 kB
        Maximum Size: 256 kB
        Supported SRAM Types: None
        Installed SRAM Type: None

Handle 0x1000, DMI type 4, 42 bytes
Processor Information
        Socket Designation: CPU 1
        Type: Central Processor
        Family: ARMv8
        Manufacturer: Google
        ID: 00 00 00 00 00 00 00 00
        Version: Not Specified
        Voltage: Unknown
        External Clock: Unknown
        Max Speed: 3000 MHz
        Current Speed: 3000 MHz
        Status: Populated, Enabled
        Upgrade: Other
        L1 Cache Handle: 0x3001
        L2 Cache Handle: 0x3002
        L3 Cache Handle: 0x3003
        Serial Number: Not Specified
        Asset Tag: Not Specified
        Part Number: Not Specified
        Core Count: 1
        Core Enabled: 1
        Thread Count: 1
        Characteristics:
                64-bit capable

Handle 0x0200, DMI type 16, 15 bytes
Physical Memory Array
        Location: Other
        Use: System Memory
        Error Correction Type: Multi-bit ECC
        Maximum Capacity: 4 GB
        Error Information Handle: Not Provided
        Number Of Devices: 1

Handle 0x7000, DMI type 17, 21 bytes
Memory Device
        Array Handle: 0x0200
        Error Information Handle: Not Provided
        Total Width: 64 bits
        Data Width: 64 bits
        Size: 4 GB
        Form Factor: DIMM
        Set: None
        Locator: DIMM 0
        Bank Locator: Not Specified
        Type: RAM
        Type Detail: Synchronous

Handle 0x0300, DMI type 19, 15 bytes
Memory Array Mapped Address
        Starting Address: 0x00000000000
        Ending Address: 0x000BFFFFFFF
        Range Size: 3 GB
        Physical Array Handle: 0x0200
        Partition Width: 1

Handle 0x0301, DMI type 19, 15 bytes
Memory Array Mapped Address
        Starting Address: 0x00100000000
        Ending Address: 0x0013FFFFFFF
        Range Size: 1 GB
        Physical Array Handle: 0x0200
        Partition Width: 1

Handle 0x4000, DMI type 20, 19 bytes
Memory Device Mapped Address
        Starting Address: 0x00000000000
        Ending Address: 0x000BFFFFFFF
        Range Size: 3 GB
        Physical Device Handle: 0x7000
        Memory Array Mapped Address Handle: 0x0300
        Partition Row Position: 1

Handle 0x4001, DMI type 20, 19 bytes
Memory Device Mapped Address
        Starting Address: 0x00100000000
        Ending Address: 0x0013FFFFFFF
        Range Size: 1 GB
        Physical Device Handle: 0x7000
        Memory Array Mapped Address Handle: 0x0301
        Partition Row Position: 1

Handle 0x0100, DMI type 32, 11 bytes
System Boot Information
        Status: No errors detected

Handle 0xFEFF, DMI type 127, 4 bytes
End Of Table

[root@r9-arm ~]# subscription-manager facts
cpu.core(s)_per_socket: 1
cpu.cpu(s): 1
cpu.cpu_socket(s): 1
cpu.thread(s)_per_core: 1
cpu.topology_source: kernel /sys cpu sibling lists
distribution.id: Plow
distribution.name: Red Hat Enterprise Linux
distribution.version: 9.0
distribution.version.modifier: Unknown
dmi.baseboard.asset_tag: 957EDC41-6C53-B28F-6DA3-5168B6F8648D
dmi.baseboard.chassis_handle: 0x0099
dmi.baseboard.contained_object_handles: 0
dmi.baseboard.features: Board is a hosting board
dmi.baseboard.manufacturer: KVM
dmi.baseboard.product_name: Google Compute Engine
dmi.baseboard.serial_number: Board-GoogleCloud-957EDC416C53B28F6DA35168B6F8648D
dmi.baseboard.type: Motherboard
dmi.bios.address: 0xe8000
dmi.bios.bios_revision: 1.0
dmi.bios.release_date: 06/20/2022
dmi.bios.rom_size: 64 kB
dmi.bios.runtime_size: 96 kB
dmi.bios.vendor: Google
dmi.bios.version: Google
dmi.chassis.boot-up_state: Safe
dmi.chassis.lock: Not Present
dmi.chassis.manufacturer: Google
dmi.chassis.oem_information: 0x00000000
dmi.chassis.power_supply_state: Safe
dmi.chassis.thermal_state: Safe
dmi.chassis.type: Other
dmi.memory.array_handle: 0x0200
dmi.memory.data_width: 64 bits
dmi.memory.error_correction_type: Multi-bit ECC
dmi.memory.error_information_handle: Not Provided
dmi.memory.form_factor: DIMM
dmi.memory.location: Other
dmi.memory.locator: DIMM 0
dmi.memory.maximum_capacity: 4 GB
dmi.memory.number_of_devices: 1
dmi.memory.set: None
dmi.memory.size: 4 GB
dmi.memory.total_width: 64 bits
dmi.memory.type: RAM
dmi.memory.type_detail: Synchronous
dmi.memory.use: System Memory
dmi.meta.cpu_socket_count: 1
dmi.processor.characteristics: 64-bit capable
dmi.processor.core_count: 1
dmi.processor.core_enabled: 1
dmi.processor.current_speed: 3000 MHz
dmi.processor.family: ARMv8
dmi.processor.id: 00 00 00 00 00 00 00 00
dmi.processor.l1_cache_handle: 0x3001
dmi.processor.l2_cache_handle: 0x3002
dmi.processor.l3_cache_handle: 0x3003
dmi.processor.manufacturer: Google
dmi.processor.max_speed: 3000 MHz
dmi.processor.socket_designation: CPU 1
dmi.processor.status: Populated, Enabled
dmi.processor.thread_count: 1
dmi.processor.type: Central Processor
dmi.processor.upgrade: Other
dmi.system.manufacturer: Google
dmi.system.product_name: Google Compute Engine
dmi.system.serial_number: GoogleCloud-957EDC416C53B28F6DA35168B6F8648D
dmi.system.uuid: 957EDC41-6C53-B28F-6DA3-5168B6F8648D
dmi.system.wake-up_type: Power Switch
last_boot: 2022-08-03 13:58:24 UTC
lscpu.architecture: aarch64
lscpu.bios_vendor_id: Google
lscpu.bogomips: 50.00
lscpu.byte_order: Little Endian
lscpu.core(s)_per_socket: 1
lscpu.cpu(s): 1
lscpu.cpu_op-mode(s): 64-bit
lscpu.flags: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp ssbs
lscpu.model: 1
lscpu.model_name: Neoverse-N1
lscpu.numa_node(s): 1
lscpu.numa_node0_cpu(s): 0
lscpu.on-line_cpu(s)_list: 0
lscpu.socket(s): 1
lscpu.stepping: r3p1
lscpu.thread(s)_per_core: 1
lscpu.vendor_id: ARM
lscpu.vulnerability_itlb_multihit: Not affected
lscpu.vulnerability_l1tf: Not affected
lscpu.vulnerability_mds: Not affected
lscpu.vulnerability_meltdown: Not affected
lscpu.vulnerability_spec_store_bypass: Mitigation; Speculative Store Bypass disabled via prctl
lscpu.vulnerability_spectre_v1: Mitigation; __user pointer sanitization
lscpu.vulnerability_spectre_v2: Mitigation; CSV2, BHB
lscpu.vulnerability_srbds: Not affected
lscpu.vulnerability_tsx_async_abort: Not affected
memory.memtotal: 3537600
memory.swaptotal: 0
net.interface.eth0.ipv4_address: 10.128.0.2
net.interface.eth0.ipv4_address_list: 10.128.0.2
net.interface.eth0.ipv4_broadcast: Unknown
net.interface.eth0.ipv4_broadcast_list: Unknown
net.interface.eth0.ipv4_netmask: 32
net.interface.eth0.ipv4_netmask_list: 32
net.interface.eth0.ipv6_address.link: fe80::1408:9bed:51ec:ae0d
net.interface.eth0.ipv6_address.link_list: fe80::1408:9bed:51ec:ae0d
net.interface.eth0.ipv6_netmask.link: 64
net.interface.eth0.ipv6_netmask.link_list: 64
net.interface.eth0.mac_address: 42:01:0a:80:00:02
net.interface.lo.ipv4_address: 127.0.0.1
net.interface.lo.ipv4_address_list: 127.0.0.1
net.interface.lo.ipv4_broadcast: Unknown
net.interface.lo.ipv4_broadcast_list: Unknown
net.interface.lo.ipv4_netmask: 8
net.interface.lo.ipv4_netmask_list: 8
net.interface.lo.ipv6_address.host: ::1
net.interface.lo.ipv6_address.host_list: ::1
net.interface.lo.ipv6_netmask.host: 128
net.interface.lo.ipv6_netmask.host_list: 128
network.fqdn: r9-arm.c.subscription-m.internal
network.hostname: r9-arm
network.ipv4_address: 10.128.0.2
network.ipv6_address: fe80::1408:9bed:51ec:ae0d
proc_cpuinfo.common.bogomips: 50.00
proc_cpuinfo.common.cpu_architecture: 8
proc_cpuinfo.common.cpu_implementer: 0x41
proc_cpuinfo.common.cpu_part: 0xd0c
proc_cpuinfo.common.cpu_revision: 1
proc_cpuinfo.common.cpu_variant: 0x3
proc_cpuinfo.common.features: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp ssbs
proc_stat.btime: 1659535104
system.certificate_version: 3.2
system.default_locale: en_US.UTF-8
uname.machine: aarch64
uname.nodename: r9-arm
uname.release: 5.14.0-70.17.1.el9_0.aarch64
uname.sysname: Linux
uname.version: #1 SMP Tue Jun 14 11:43:56 EDT 2022
virt.host_type: Not Applicable
virt.is_guest: False

Comment 3 Richard W.M. Jones 2022-08-03 18:06:03 UTC
This is fixed (as in, I added a test only) in:

http://git.annexia.org/?p=virt-what.git;a=commitdiff;h=54b726fa7c9687b692162488e8934a426f9fa6c3

So I should note a few things.  Firstly upstream virt-what did actually
detect GCE just fine.  It prints:

# virt-what
google_cloud

GCE isn't KVM!  It's their own thing.  I suspect it might even be baremetal.

However the version of virt-what in RHEL 9.0 is not very up to date
and doesn't have this check.  This was fixed by the rebase in RHEL 9.1
(bug 2074476).  I upgraded your GCE instance to virt-what-1.22-1.el9.aarch64
and detection now works there.

If a fix is required for RHEL 9.0 you will need to go through the usual
z-stream steps.

Comment 4 YongkuiGuo 2022-08-08 04:44:19 UTC
(In reply to Richard W.M. Jones from comment #3)
> This is fixed (as in, I added a test only) in:
> 
> http://git.annexia.org/?p=virt-what.git;a=commitdiff;
> h=54b726fa7c9687b692162488e8934a426f9fa6c3
> 
> So I should note a few things.  Firstly upstream virt-what did actually
> detect GCE just fine.  It prints:
> 
> # virt-what
> google_cloud
> 
> GCE isn't KVM!  It's their own thing.  I suspect it might even be baremetal.
> 
> However the version of virt-what in RHEL 9.0 is not very up to date
> and doesn't have this check.  This was fixed by the rebase in RHEL 9.1
> (bug 2074476).  I upgraded your GCE instance to virt-what-1.22-1.el9.aarch64
> and detection now works there.
> 
Hi rjones,

I tested in the RHEL9.1 aarch64 VM on GCE, and indeed the virt-what output is only 'google_cloud'.

[root@wshi-aarch64 ~]# virt-what
google_cloud
[root@wshi-aarch64 ~]# /usr/libexec/virt-what-cpuid-helper
[root@wshi-aarch64 ~]
[root@wshi-aarch64 ~]# rpm -q virt-what
virt-what-1.22-1.el9.aarch64


But the dmesg command prints the next line:

[    0.000000] smccc: KVM: hypervisor services detected (0x00000000 0x00000000 0x00000000 0x00000003)

So it seems like the hypervisor is KVM.

Comment 6 Richard W.M. Jones 2022-08-08 09:22:20 UTC
Does /proc/device-tree/hypervisor/compatible exist and what does it contain?

Comment 7 Richard W.M. Jones 2022-08-08 12:07:28 UTC
Because this is RHEL/aarch64, /proc/device-tree doesn't exist at all.

Because it's aarch64 there is no CPUID (or equivalent?)

I'm not sure if there is a good equivalent way to find out if KVM is
being used underneath on RHEL/aarch64.

Comment 13 Richard W.M. Jones 2022-08-08 16:20:15 UTC
Fixed in:
http://git.annexia.org/?p=virt-what.git;a=commitdiff;h=da3568b25a582603ba15690793c8867cc7c5d2a8

Note that we now print the following, because this *is* KVM-based:

# virt-what
google_cloud
kvm

Comment 17 YongkuiGuo 2022-08-11 08:05:24 UTC
Tested on GCE aarch64 env:

[root@wshi-aarch64 cloud-user]# virt-what
google_cloud
kvm
[root@wshi-aarch64 cloud-user]# rpm -q virt-what
virt-what-1.22-2.el9.aarch64

Comment 21 YongkuiGuo 2022-08-15 01:59:09 UTC
Verified this bug per comments 16 and 17.

Comment 23 errata-xmlrpc 2022-11-15 11:12:59 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory (virt-what bug fix and enhancement update), and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://access.redhat.com/errata/RHBA-2022:8282