|
@@ -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)
|