This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
Ping, I'll push these two patches by next week if there are no
objections.
Siddhesh
On Mon, May 18, 2015 at 02:41:01PM +0530, Siddhesh Poyarekar wrote:
> This is the beginning of a module to import and process benchmark
> outputs. The module currently supports importing of a bench.out and
> validating it against a schema file. In future this could grow a set
> of routines that benchmark consumers may find useful to build their
> own analysis tools. I have altered validate_bench to use this module
> too.
>
> * benchtests/scripts/import_bench.py: New file.
> * benchtests/scripts/validate_benchout.py: Import import_bench
> instead of jsonschema.
> (validate_bench): Remove function.
> (main): Use import_bench.
> ---
> benchtests/scripts/import_bench.py | 45 +++++++++++++++++++++++++++++
> benchtests/scripts/validate_benchout.py | 51 +++++++++++++++++----------------
> 2 files changed, 71 insertions(+), 25 deletions(-)
> create mode 100644 benchtests/scripts/import_bench.py
>
> diff --git a/benchtests/scripts/import_bench.py b/benchtests/scripts/import_bench.py
> new file mode 100644
> index 0000000..81248c2
> --- /dev/null
> +++ b/benchtests/scripts/import_bench.py
> @@ -0,0 +1,45 @@
> +#!/usr/bin/python
> +# Copyright (C) 2015 Free Software Foundation, Inc.
> +# This file is part of the GNU C Library.
> +#
> +# The GNU C Library is free software; you can redistribute it and/or
> +# modify it under the terms of the GNU Lesser General Public
> +# License as published by the Free Software Foundation; either
> +# version 2.1 of the License, or (at your option) any later version.
> +#
> +# The GNU C Library is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> +# Lesser General Public License for more details.
> +#
> +# You should have received a copy of the GNU Lesser General Public
> +# License along with the GNU C Library; if not, see
> +# <http://www.gnu.org/licenses/>.
> +"""Functions to import benchmark data and process it"""
> +
> +import json
> +try:
> + import jsonschema as validator
> +except ImportError:
> + print('Could not find jsonschema module.')
> + raise
> +
> +
> +def parse_bench(filename, schema_filename):
> + """Parse the input file
> +
> + Parse and validate the json file containing the benchmark outputs. Return
> + the resulting object.
> + Args:
> + filename: Name of the benchmark output file.
> + Return:
> + The bench dictionary.
> + """
> + with open(schema_filename, 'r') as schemafile:
> + schema = json.load(schemafile)
> + with open(filename, 'r') as benchfile:
> + bench = json.load(benchfile)
> + validator.validate(bench, schema)
> + do_for_all_timings(bench, lambda b, f, v:
> + b['functions'][f][v]['timings'].sort())
> + return bench
> diff --git a/benchtests/scripts/validate_benchout.py b/benchtests/scripts/validate_benchout.py
> index d1cd719..28fd023 100755
> --- a/benchtests/scripts/validate_benchout.py
> +++ b/benchtests/scripts/validate_benchout.py
> @@ -27,37 +27,26 @@ import sys
> import os
>
> try:
> - import jsonschema
> + import import_bench as bench
> except ImportError:
> - print('Could not find jsonschema module. Output not validated.')
> + print('Import Error: Output will not be validated.')
> # Return success because we don't want the bench target to fail just
> # because the jsonschema module was not found.
> sys.exit(os.EX_OK)
>
>
> -def validate_bench(benchfile, schemafile):
> - """Validate benchmark file
> -
> - Validate a benchmark output file against a JSON schema.
> +def print_and_exit(message, exitcode):
> + """Prints message to stderr and returns the exit code.
>
> Args:
> - benchfile: The file name of the bench.out file.
> - schemafile: The file name of the JSON schema file to validate
> - bench.out against.
> + message: The message to print
> + exitcode: The exit code to return
>
> - Exceptions:
> - jsonschema.ValidationError: When bench.out is not valid
> - jsonschema.SchemaError: When the JSON schema is not valid
> - IOError: If any of the files are not found.
> + Returns:
> + The passed exit code
> """
> - with open(benchfile, 'r') as bfile:
> - with open(schemafile, 'r') as sfile:
> - bench = json.load(bfile)
> - schema = json.load(sfile)
> - jsonschema.validate(bench, schema)
> -
> - # If we reach here, we're all good.
> - print("Benchmark output in %s is valid." % benchfile)
> + print(message, file=sys.stderr)
> + return exitcode
>
>
> def main(args):
> @@ -73,11 +62,23 @@ def main(args):
> Exceptions thrown by validate_bench
> """
> if len(args) != 2:
> - print("Usage: %s <bench.out file> <bench.out schema>" % sys.argv[0],
> - file=sys.stderr)
> - return os.EX_USAGE
> + return print_and_exit("Usage: %s <bench.out file> <bench.out schema>"
> + % sys.argv[0], os.EX_USAGE)
> +
> + try:
> + bench.parse_bench(args[0], args[1])
> + except IOError as e:
> + return print_and_exit("IOError(%d): %s" % (e.errno, e.strerror),
> + os.EX_OSFILE)
> +
> + except bench.validator.ValidationError as e:
> + return print_and_exit("Invalid benchmark output: %s" % e.message,
> + os.EX_DATAERR)
> +
> + except bench.validator.SchemaError as e:
> + return print_and_exit("Invalid schema: %s" % e.message, os.EX_DATAERR)
>
> - validate_bench(args[0], args[1])
> + print("Benchmark output in %s is valid." % args[0])
> return os.EX_OK
>
>
> --
> 2.1.0
>
Attachment:
pgpfQashmf_tR.pgp
Description: PGP signature
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |