diff options
Diffstat (limited to 'host/tests/streaming_performance/run_benchmark_rate.py')
| -rw-r--r-- | host/tests/streaming_performance/run_benchmark_rate.py | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/host/tests/streaming_performance/run_benchmark_rate.py b/host/tests/streaming_performance/run_benchmark_rate.py new file mode 100644 index 000000000..1989b6d92 --- /dev/null +++ b/host/tests/streaming_performance/run_benchmark_rate.py @@ -0,0 +1,86 @@ +""" +Copyright 2019 Ettus Research, A National Instrument Brand + +SPDX-License-Identifier: GPL-3.0-or-later + +Helper script that provides a Python interface to run the benchmark rate C++ +example. +""" +import argparse +import subprocess + +def run(path, params): + """ + Run benchmark rate and return a CompletedProcess object. + """ + proc_params = [path] + + for key, val in params.items(): + proc_params.append("--" + str(key)) + proc_params.append(str(val)) + + return subprocess.run(proc_params, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + +def create_parser(): + parser = argparse.ArgumentParser() + parser.add_argument("--args", type=str, help="single uhd device address args") + parser.add_argument("--duration", type=str, help="duration for the test in seconds") + parser.add_argument("--rx_subdev", type=str, help="specify the device subdev for RX") + parser.add_argument("--tx_subdev", type=str, help="specify the device subdev for TX") + parser.add_argument("--rx_stream_args", type=str, help="stream args for RX streamer") + parser.add_argument("--tx_stream_args", type=str, help="stream args for TX streamer") + parser.add_argument("--rx_rate", type=str, help="specify to perform a RX rate test (sps)") + parser.add_argument("--tx_rate", type=str, help="specify to perform a TX rate test (sps)") + parser.add_argument("--rx_otw", type=str, help="specify the over-the-wire sample mode for RX") + parser.add_argument("--tx_otw", type=str, help="specify the over-the-wire sample mode for TX") + parser.add_argument("--rx_cpu", type=str, help="specify the host/cpu sample mode for RX") + parser.add_argument("--tx_cpu", type=str, help="specify the host/cpu sample mode for TX") + parser.add_argument("--ref", type=str, help="clock reference (internal, external, mimo, gpsdo)") + parser.add_argument("--pps", type=str, help="PPS source (internal, external, mimo, gpsdo)") + parser.add_argument("--random", type=str, help="Run with random values of samples in send() and recv()") + parser.add_argument("--rx_channels", type=str, help="which RX channel(s) to use") + parser.add_argument("--tx_channels", type=str, help="which TX channel(s) to use") + return parser + +def parse_args(): + """ + Parse the command line arguments for benchmark rate, and returns arguments + in a dict. + """ + parser = create_parser() + params = vars(parser.parse_args()) + return { key : params[key] for key in params if params[key] != None } + +def parse_known_args(): + """ + Parse the command line arguments for benchmark rate. Returns a dict + containing the benchmark rate args, and a list containing args that + are not recognized by benchmark rate. + """ + parser = create_parser() + params, rest = parser.parse_known_args() + params = vars(params) + return { key : params[key] for key in params if params[key] != None }, rest + +if __name__ == "__main__": + """ + Main function used for testing only. Requires path to the example to be + passed as a command line parameter. + """ + benchmark_rate_params, rest = parse_known_args() + parser = argparse.ArgumentParser() + parser.add_argument("--path", type=str, required=True, help="path to benchmark rate example") + params = parser.parse_args(rest); + proc = run(params.path, benchmark_rate_params) + + print("ARGS") + print(proc.args) + + print("RETURNCODE") + print(proc.returncode) + + print("STDERR") + print(proc.stderr.decode('ASCII')) + + print("STDOUT") + print(proc.stdout.decode('ASCII')) |
