2016-04-25 12:21:27 +00:00
|
|
|
#!/usr/bin/python3
|
|
|
|
#
|
|
|
|
# Build performance test script
|
|
|
|
#
|
|
|
|
# Copyright (c) 2016, Intel Corporation.
|
|
|
|
#
|
|
|
|
# This program is free software; you can redistribute it and/or modify it
|
|
|
|
# under the terms and conditions of the GNU General Public License,
|
|
|
|
# version 2, as published by the Free Software Foundation.
|
|
|
|
#
|
|
|
|
# This program is distributed in the hope it will be useful, but WITHOUT
|
|
|
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
|
|
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
|
|
# more details.
|
|
|
|
#
|
|
|
|
"""Build performance test script"""
|
|
|
|
import argparse
|
|
|
|
import logging
|
2016-04-27 11:12:00 +00:00
|
|
|
import os
|
2016-04-25 12:21:27 +00:00
|
|
|
import sys
|
2016-05-11 11:42:32 +00:00
|
|
|
from datetime import datetime
|
2016-04-25 12:21:27 +00:00
|
|
|
|
2016-04-27 11:12:00 +00:00
|
|
|
sys.path.insert(0, os.path.dirname(os.path.realpath(__file__)) + '/lib')
|
|
|
|
import scriptpath
|
|
|
|
scriptpath.add_oe_lib_path()
|
2016-05-11 11:42:32 +00:00
|
|
|
from oeqa.buildperf import BuildPerfTestRunner, KernelDropCaches
|
2016-04-27 11:12:00 +00:00
|
|
|
from oeqa.utils.commands import runCmd
|
|
|
|
|
2016-04-25 12:21:27 +00:00
|
|
|
|
|
|
|
# Set-up logging
|
|
|
|
LOG_FORMAT = '[%(asctime)s] %(levelname)s: %(message)s'
|
|
|
|
logging.basicConfig(level=logging.INFO, format=LOG_FORMAT)
|
|
|
|
log = logging.getLogger()
|
|
|
|
|
|
|
|
|
2016-04-27 11:12:00 +00:00
|
|
|
def pre_run_sanity_check():
|
|
|
|
"""Sanity check of build environment"""
|
|
|
|
build_dir = os.environ.get("BUILDDIR")
|
|
|
|
if not build_dir:
|
|
|
|
log.error("BUILDDIR not set. Please run the build environmnent setup "
|
|
|
|
"script.")
|
|
|
|
return False
|
|
|
|
if os.getcwd() != build_dir:
|
|
|
|
log.error("Please run this script under BUILDDIR (%s)", build_dir)
|
|
|
|
return False
|
|
|
|
|
|
|
|
ret = runCmd('which bitbake', ignore_status=True)
|
|
|
|
if ret.status:
|
|
|
|
log.error("bitbake command not found")
|
|
|
|
return False
|
|
|
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
2016-04-25 12:21:27 +00:00
|
|
|
def parse_args(argv):
|
|
|
|
"""Parse command line arguments"""
|
|
|
|
parser = argparse.ArgumentParser(
|
|
|
|
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
|
|
|
|
|
|
|
|
parser.add_argument('-D', '--debug', action='store_true',
|
|
|
|
help='Enable debug level logging')
|
|
|
|
|
|
|
|
return parser.parse_args(argv)
|
|
|
|
|
|
|
|
|
|
|
|
def main(argv=None):
|
|
|
|
"""Script entry point"""
|
|
|
|
args = parse_args(argv)
|
|
|
|
|
|
|
|
if args.debug:
|
|
|
|
log.setLevel(logging.DEBUG)
|
|
|
|
|
2016-04-27 11:12:00 +00:00
|
|
|
if not pre_run_sanity_check():
|
|
|
|
return 1
|
|
|
|
|
2016-04-26 10:18:13 +00:00
|
|
|
# Check our capability to drop caches and ask pass if needed
|
|
|
|
KernelDropCaches.check()
|
|
|
|
|
2016-05-11 11:42:32 +00:00
|
|
|
# Run actual tests
|
|
|
|
out_dir = 'results-{}'.format(datetime.now().strftime('%Y%m%d%H%M%S'))
|
|
|
|
runner = BuildPerfTestRunner(out_dir)
|
|
|
|
ret = runner.run_tests()
|
|
|
|
|
|
|
|
return ret
|
2016-04-25 12:21:27 +00:00
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
sys.exit(main())
|
|
|
|
|