diff options
-rw-r--r-- | meta/lib/oeqa/buildperf/__init__.py | 1 | ||||
-rw-r--r-- | meta/lib/oeqa/buildperf/base.py | 46 | ||||
-rwxr-xr-x | scripts/oe-build-perf-test | 4 |
3 files changed, 51 insertions, 0 deletions
diff --git a/meta/lib/oeqa/buildperf/__init__.py b/meta/lib/oeqa/buildperf/__init__.py index c9535591e2..bab122e4ec 100644 --- a/meta/lib/oeqa/buildperf/__init__.py +++ b/meta/lib/oeqa/buildperf/__init__.py @@ -10,3 +10,4 @@ # more details. # """Build performance tests""" +from .base import KernelDropCaches diff --git a/meta/lib/oeqa/buildperf/base.py b/meta/lib/oeqa/buildperf/base.py new file mode 100644 index 0000000000..3cbdfa7818 --- /dev/null +++ b/meta/lib/oeqa/buildperf/base.py @@ -0,0 +1,46 @@ +# 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 base classes and functionality""" +from oeqa.utils.commands import runCmd + + +class KernelDropCaches(object): + """Container of the functions for dropping kernel caches""" + sudo_passwd = None + + @classmethod + def check(cls): + """Check permssions for dropping kernel caches""" + from getpass import getpass + from locale import getdefaultlocale + cmd = ['sudo', '-k', '-n', 'tee', '/proc/sys/vm/drop_caches'] + ret = runCmd(cmd, ignore_status=True, data=b'0') + if ret.output.startswith('sudo:'): + pass_str = getpass( + "\nThe script requires sudo access to drop caches between " + "builds (echo 3 > /proc/sys/vm/drop_caches).\n" + "Please enter your sudo password: ") + cls.sudo_passwd = bytes(pass_str, getdefaultlocale()[1]) + + @classmethod + def drop(cls): + """Drop kernel caches""" + cmd = ['sudo', '-k'] + if cls.sudo_passwd: + cmd.append('-S') + input_data = cls.sudo_passwd + b'\n' + else: + cmd.append('-n') + input_data = b'' + cmd += ['tee', '/proc/sys/vm/drop_caches'] + input_data += b'3' + runCmd(cmd, data=input_data) diff --git a/scripts/oe-build-perf-test b/scripts/oe-build-perf-test index 9fb431045b..9589dee3ac 100755 --- a/scripts/oe-build-perf-test +++ b/scripts/oe-build-perf-test @@ -22,6 +22,7 @@ import sys sys.path.insert(0, os.path.dirname(os.path.realpath(__file__)) + '/lib') import scriptpath scriptpath.add_oe_lib_path() +from oeqa.buildperf import KernelDropCaches from oeqa.utils.commands import runCmd @@ -71,6 +72,9 @@ def main(argv=None): if not pre_run_sanity_check(): return 1 + # Check our capability to drop caches and ask pass if needed + KernelDropCaches.check() + return 0 |