diff --git a/tests/gem5/configs/boot_kvm_switch_exit.py b/tests/gem5/configs/boot_kvm_switch_exit.py index eaf9032ba7..79f3d8686e 100644 --- a/tests/gem5/configs/boot_kvm_switch_exit.py +++ b/tests/gem5/configs/boot_kvm_switch_exit.py @@ -196,7 +196,7 @@ motherboard.set_workload( resource_directory=args.resource_directory, ), disk_image=Resource( - "x86-boot-exit", + "x86-ubuntu-img", override=args.override_download, resource_directory=args.resource_directory, ), diff --git a/tests/gem5/kvm-switch-tests/test_kvm_cpu_switch.py b/tests/gem5/kvm-switch-tests/test_kvm_cpu_switch.py new file mode 100644 index 0000000000..19e83e535e --- /dev/null +++ b/tests/gem5/kvm-switch-tests/test_kvm_cpu_switch.py @@ -0,0 +1,142 @@ +# Copyright (c) 2021 The Regents of the University of California +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer; +# redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution; +# neither the name of the copyright holders nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +""" +The purpose of this Suite of tests is to check the gem5.components switchable +processor is functioning as intended; allowing switching from KVM to a more +detailed processor. +""" + +import os + +from testlib import * + +if config.bin_path: + resource_path = config.bin_path +else: + resource_path = joinpath(absdirpath(__file__), "..", "resources") + + +def test_kvm_switch(cpu: str, num_cpus: int, mem_system: str, length: str): + + if not os.access("/dev/kvm", mode=os.R_OK | os.W_OK): + # Don't run the tests if KVM is unavailable. + return + + name = "{}-cpu_{}-cores_{}_kvm-switch-test".format( + cpu, str(num_cpus), mem_system + ) + verifiers = [] + + if mem_system == "mesi_two_level": + protocol_to_use = "MESI_Two_Level" + isa_to_use = constants.x86_tag + elif mem_system == "mi_example": + protocol_to_use = None + isa_to_use = constants.x86_tag + else: + protocol_to_use = None + isa_to_use = constants.gcn3_x86_tag + + gem5_verify_config( + name=name, + verifiers=verifiers, + fixtures=(), + config=joinpath( + config.base_dir, + "tests", + "gem5", + "configs", + "boot_kvm_switch_exit.py", + ), + config_args=[ + "--cpu", + cpu, + "--num-cpus", + str(num_cpus), + "--mem-system", + mem_system, + "--override-download", + "--resource-directory", + resource_path, + "--kernel-args=''", + ], + valid_isas=(isa_to_use,), + valid_hosts=constants.supported_hosts, + protocol=protocol_to_use, + length=length, + ) + + +#### The quick (pre-submit/Kokoro) tests #### + +test_kvm_switch( + cpu="atomic", num_cpus=1, mem_system="classic", length=constants.quick_tag +) +test_kvm_switch( + cpu="timing", num_cpus=1, mem_system="classic", length=constants.quick_tag +) +test_kvm_switch( + cpu="o3", num_cpus=1, mem_system="classic", length=constants.quick_tag +) +test_kvm_switch( + cpu="timing", num_cpus=4, mem_system="classic", length=constants.quick_tag +) + +test_kvm_switch( + cpu="timing", + num_cpus=4, + mem_system="mi_example", + length=constants.quick_tag, +) + +### The long (nightly) tests #### + +test_kvm_switch( + cpu="atomic", + num_cpus=1, + mem_system="mesi_two_level", + length=constants.long_tag, +) +test_kvm_switch( + cpu="timing", + num_cpus=1, + mem_system="mesi_two_level", + length=constants.long_tag, +) +test_kvm_switch( + cpu="o3", + num_cpus=8, + mem_system="mesi_two_level", + length=constants.long_tag, +) + +test_kvm_switch( + cpu="timing", + num_cpus=2, + mem_system="mesi_two_level", + length=constants.long_tag, +) \ No newline at end of file