diff --git a/KVM/qemu/host_cpu_offline_online.cfg b/KVM/qemu/host_cpu_offline_online.cfg new file mode 100644 index 0000000..6550c6a --- /dev/null +++ b/KVM/qemu/host_cpu_offline_online.cfg @@ -0,0 +1,18 @@ +- host_cpu_offline_online: + type = host_cpu_offline_online + virt_test_type = qemu + vm_accelerator = kvm + # Don't create/remove guest images + force_create_image = no + remove_image = no + # Automatically start VM + start_vm = yes + # Stop VM after testing + kill_vm = yes + variants: + - vm: + - tdvm: + machine_type_extra_params = "kernel-irqchip=split" + vm_secure_guest_type = tdx + auto_cpu_model = "no" + cpu_model = host diff --git a/KVM/qemu/tests/host_cpu_offline_online.py b/KVM/qemu/tests/host_cpu_offline_online.py new file mode 100644 index 0000000..b01bb17 --- /dev/null +++ b/KVM/qemu/tests/host_cpu_offline_online.py @@ -0,0 +1,45 @@ +#!/usr/bin/python3 + +# SPDX-License-Identifier: GPL-2.0-only +# Copyright (c) 2024 Intel Corporation + +# Author: Xudong Hao +# +# History: Dec. 2024 - Xudong Hao - creation + +import random +from avocado.utils import cpu + +from virttest.cpu import check_if_vm_vcpu_match + + +def run(test, params, env): + """ + pCPU offline/online test: + 1) Launch a guest with many CPU. + 2) Offline 3 random online pCPU. + 3) Check guest's status + 4) Online the offlined pCPU again. + + :param test: QEMU test object + :param params: Dictionary with the test parameters + :param env: Dictionary with test environment. + """ + vm = env.get_vm(params["main_vm"]) + vcpus = params["smp"] + vm.verify_alive() + timeout = params.get_numeric("login_timeout", 240) + session = vm.wait_for_login(timeout=timeout) + + host_cpu_list = cpu.online_list() + processor_list = random.sample(host_cpu_list, 3) + for processor in processor_list: + cpu.offline(processor) + test.log.info("CPUs {} have been offline.".format(processor_list)) + if not check_if_vm_vcpu_match(vcpus, vm): + test.fail("vCPU quantity on guest mismatch after offline") + + for processor in processor_list: + cpu.online(processor) + test.log.info("CPUs {} have been online.".format(processor_list)) + session.close()