From 328d140c703a4253d77e62ff10d80d4c3f10dfb2 Mon Sep 17 00:00:00 2001 From: Harshil Patel Date: Wed, 23 Aug 2023 13:50:08 -0700 Subject: [PATCH] stdlib, resources: Added warn msgs and commets. - Added deprecated warnings to Workload and Abstract workload. - Added comments to the classes changed. Change-Id: I671daacf5ef455ea65103bd96aa442486142a486 --- .../example/gem5_library/riscvmatched-fs.py | 3 +- src/python/gem5/resources/resource.py | 2 - src/python/gem5/resources/workload.py | 108 ++++-------------- 3 files changed, 23 insertions(+), 90 deletions(-) diff --git a/configs/example/gem5_library/riscvmatched-fs.py b/configs/example/gem5_library/riscvmatched-fs.py index 5d8bb113dc..3e84b8c1ea 100644 --- a/configs/example/gem5_library/riscvmatched-fs.py +++ b/configs/example/gem5_library/riscvmatched-fs.py @@ -43,7 +43,6 @@ from gem5.utils.requires import requires from gem5.isas import ISA from gem5.simulate.simulator import Simulator from gem5.resources.workload import Workload -from gem5.resources.resource import obtain_resource import argparse @@ -77,7 +76,7 @@ board = RISCVMatchedBoard( # In the case where the `-i` flag is passed, we add the kernel argument # `init=/root/exit.sh`. This means the simulation will exit after the Linux # Kernel has booted. -workload = obtain_resource("riscv-ubuntu-20.04-boot") +workload = Workload("riscv-ubuntu-20.04-boot") kernel_args = board.get_default_kernel_args() if args.to_init: kernel_args.append("init=/root/exit.sh") diff --git a/src/python/gem5/resources/resource.py b/src/python/gem5/resources/resource.py index 9c665e8284..e71c7646a9 100644 --- a/src/python/gem5/resources/resource.py +++ b/src/python/gem5/resources/resource.py @@ -586,7 +586,6 @@ class WorkloadResource(AbstractResource): self._func = function self._params = parameters if parameters else {} - print(resources) for key in resources.keys(): assert isinstance(key, str) value = resources[key] @@ -715,7 +714,6 @@ def obtain_resource( # Obtain the type from the JSON. From this we will determine what subclass # of `AbstractResource` we are to create and return. resources_category = resource_json["category"] - print(resource_json) if resources_category == "resource": # This is a stop-gap measure to ensure to work with older versions of # the "resource.json" file. These should be replaced with their diff --git a/src/python/gem5/resources/workload.py b/src/python/gem5/resources/workload.py index 26197131dc..424da2ebc6 100644 --- a/src/python/gem5/resources/workload.py +++ b/src/python/gem5/resources/workload.py @@ -28,59 +28,27 @@ from .resource import obtain_resource, WorkloadResource from .client import get_resource_json_obj from _m5 import core +from m5.util import warn from typing import Dict, Any, List, Optional -""" - A workload specified locally (i.e., not via gem5-resources as with the - `Workload` class). Here the user specifies the function and the parameters - to be passed. - Usage - ----- +def CustomWorkload(function: str, parameters: Dict[str, Any]): + """ + A custom workload gem5 resource. It can be used to specify a custom, + local workload. - ```py - workload = CustomWorkload( - function = "set_se_binary_workload", - parameters = { - "binary" : obtain_resource("x86-print-this"), - "arguments" : ["hello", 6] - }, + **Warning**: This class is deprecated and changed to a funtion and will be removed in future + releases of gem5. Please use the `WorkloadResource` class instead. This + class is merely a wrapper for it. + """ + warn( + "The `CustomWorkload` class is deprecated. Please use " + "`WorkloadResource` instead." ) - - board.set_workload(workload) - ``` -""" - - -def CustomWorkload(function: str, parameters: Dict[str, Any]) -> None: return WorkloadResource(function=function, parameters=parameters) -""" - The `Workload` class loads a workload's information from gem5-resources - based on a name/id passed via the constructor. - - Usage - ----- - - ```py - # Determine what workload we want to run. - workload = Workload("example-workload-id") - - # Optionally we can override a parameter in the workload. In this example - # we are going to run this workload with a difference kernel. - workload.set_parameter("kernel", - obtain_resource("arm64-linux-kernel-4.14.134") - ) - - # We then set this workload to the board. - board.set_workload(workload) - ``` - -""" - - def Workload( workload_name: str, resource_directory: Optional[str] = None, @@ -89,50 +57,18 @@ def Workload( gem5_version: Optional[str] = core.gem5Version, ): """ - This constructor will load the workload details from the workload with - the given name/id. + This function was created to maintain backwards compability for v23.0.0 + and prior releases of gem5 where `Workload` was a class. - This function assumes the dictionary returned by the downloader's - `get_workload_json_obj` is a dictionary. An example of the schema is - shown below: - - ```json - { - "category" : "workload", - "id" : "x86-ubuntu-18.04-echo-hello", - "description" : "Description of workload here", - "function" : "set_kernel_disk_workload", - "resources" : { - "kernel" : "x86-linux-kernel-5.4.49", - "disk-image" : "x86-ubuntu-18.04-img" - }, - "additional_params" : { - "readfile_contents" : "m5_exit; echo 'hello'; m5_exit" - } - } - ``` - - This resource will result in the equivalent of the following action - being taken: - - ```python - board.set_kernel_disk_workload( - kernel = obtain_resource("x86-linux-kernel-5.4.49"), - disk-image = obtain_resource("x86-ubuntu-18.04-img"), - readfile_contents = "m5_exit; echo 'hello'; m5_exit", - ) - ``` - - :param workload_name: The name of the workload in the resources.json - file to be loaded. - :param resource_directory: An optional parameter that specifies where - any resources should be download and accessed from. If None, a default - location will be used. None by default. - :param gem5_version: The gem5 version for the Workload to be loaded. - By default, the current gem5 version is used. This will filter - resources which are incompatible with the current gem5 version. If - None, no filtering will be done. + In the interests of gem5-resource specialization, the `Workload` class + has been dropped. Instead users are advized to use the `obtain_resource` + function which will return the correct `AbstractResource` implementation. + This function (disguised as a class) wraps this function. """ + warn( + "`Workload` has been deprecated. Please use the `obtain_resource` " + "function instead." + ) return obtain_resource( workload_name, resource_directory=resource_directory,