Source code

Revision control

Copy as Markdown

Other Tools

#!/usr/bin/env python
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
import os
import subprocess
import sys
import xtalos
def start(
xperf_path,
xperf_providers,
xperf_stackwalk,
xperf_user_providers,
etl_filename,
debug=False,
):
xperf_cmd = [
xperf_path,
"-on",
"+".join(xperf_providers),
"-stackwalk",
"+".join(xperf_stackwalk),
"-MaxBuffers",
"1024",
"-BufferSize",
"1024",
"-f",
"%s.kernel" % etl_filename,
"-start",
"talos_ses",
"-on",
"+".join(xperf_user_providers),
"-MaxBuffers",
"1024",
"-BufferSize",
"1024",
"-f",
"%s.user" % etl_filename,
]
if debug:
print("executing '%s'" % subprocess.list2cmdline(xperf_cmd))
subprocess.call(xperf_cmd)
def start_from_config(config_file=None, debug=False, **kwargs):
"""start from a YAML config file"""
# required options and associated error messages
required = {
"xperf_path": "xperf_path not given",
"xperf_providers": "No xperf providers given",
"xperf_user_providers": "No xperf user providers given",
"xperf_stackwalk": "No xperf stackwalk options given",
"etl_filename": "No etl_filename given",
}
for key in required:
if key not in kwargs:
kwargs[key] = None
if config_file:
# override options from YAML config file
kwargs = xtalos.options_from_config(kwargs, config_file)
# ensure the required options are given
for key, msg in required.items():
if not kwargs.get(key):
raise xtalos.XTalosError(msg)
# ensure path to xperf actually exists
if not os.path.exists(kwargs["xperf_path"]):
raise xtalos.XTalosError(
"ERROR: xperf_path '%s' does not exist" % kwargs["xperf_path"]
)
# make calling arguments
args = dict([(key, kwargs[key]) for key in required.keys()])
args["debug"] = debug
# call start
start(**args)
def main(args=sys.argv[1:]):
# parse command line options
parser = xtalos.XtalosOptions()
args = parser.parse_args(args)
# start xperf
try:
start_from_config(
config_file=args.configFile,
debug=args.debug_level >= xtalos.DEBUG_INFO,
**args.__dict__
)
except xtalos.XTalosError as e:
parser.error(str(e))
if __name__ == "__main__":
main()