def collect_memory_metadata(metadata): if resource is not None: usage = resource.getrusage(resource.RUSAGE_SELF) max_rss = usage.ru_maxrss if max_rss: metadata['mem_max_rss'] = max_rss * 1024 # On Windows, use GetProcessMemoryInfo() if available if MS_WINDOWS and not check_tracking_memory(): usage = get_peak_pagefile_usage() if usage: metadata['mem_peak_pagefile_usage'] = usage
def collect_memory_metadata(metadata): if resource is not None: usage = resource.getrusage(resource.RUSAGE_SELF) max_rss = usage.ru_maxrss if max_rss: metadata['mem_max_rss'] = max_rss * 1024 # Note: Don't collect VmPeak of /proc/self/status on Linux because it is # not accurate. See perf._memory for more accurate memory metrics. # On Windows, use GetProcessMemoryInfo() if available if MS_WINDOWS and not check_tracking_memory(): usage = get_peak_pagefile_usage() if usage: metadata['mem_peak_pagefile_usage'] = usage
def _process_args(self): args = self.args if args.quiet: args.verbose = False nprocess = self.argparser.get_default('processes') nsamples = self.argparser.get_default('samples') if args.rigorous: args.processes = nprocess * 2 # args.samples = nsamples * 5 // 3 elif args.fast: # use at least 3 processes to benchmark 3 different (randomized) # hash functions args.processes = max(nprocess // 2, 3) args.samples = max(nsamples * 2 // 3, 2) elif args.debug_single_sample: args.processes = 1 args.warmups = 0 args.samples = 1 args.loops = 1 args.min_time = 1e-9 filename = args.output if filename and os.path.exists(filename): print("ERROR: The JSON file %r already exists" % filename) sys.exit(1) if args.tracemalloc: try: import tracemalloc # noqa except ImportError as exc: print("ERROR: fail to import tracemalloc: %s" % exc) sys.exit(1) if args.track_memory: if MS_WINDOWS: from perf._win_memory import check_tracking_memory else: from perf._memory import check_tracking_memory err_msg = check_tracking_memory() if err_msg: print("ERROR: unable to track the memory usage " "(--track-memory): %s" % err_msg) sys.exit(1)
def _process_args_impl(self): args = self.args if args.pipe: args.quiet = True args.verbose = False elif args.quiet: args.verbose = False has_jit = perf.python_has_jit() if args.warmups is None and not args.worker and not has_jit: args.warmups = 1 nprocess = self.argparser.get_default('processes') nvalues = self.argparser.get_default('values') if args.rigorous: args.processes = nprocess * 2 # args.values = nvalues * 5 // 3 elif args.fast: # use at least 3 processes to benchmark 3 different (randomized) # hash functions args.processes = max(nprocess // 2, 3) args.values = max(nvalues * 2 // 3, 2) elif args.debug_single_value: args.processes = 1 args.warmups = 0 args.values = 1 args.loops = 1 args.min_time = 1e-9 # calibration if args.calibrate_loops: self._only_in_worker("--calibrate-loops") if args.loops: raise CLIError("--loops=N is incompatible with " "--calibrate-loops") elif args.recalibrate_loops: self._only_in_worker("--recalibrate-loops") if args.loops < 1: raise CLIError("--recalibrate-loops requires --loops=N") elif args.calibrate_warmups: self._only_in_worker("--calibrate-warmups") if args.loops < 1: raise CLIError("--calibrate-warmups requires --loops=N") elif args.recalibrate_warmups: self._only_in_worker("--recalibrate-warmups") if args.loops < 1 or args.warmups is None: raise CLIError("--recalibrate-warmups requires " "--loops=N and --warmups=N") else: if args.worker and args.loops < 1: raise CLIError("--worker requires --loops=N " "or --calibrate-loops") if args.worker and args.warmups is None: raise CLIError("--worker requires --warmups=N " "or --calibrate-warmups") if args.values < 1: raise CLIError("--values must be >= 1") filename = args.output if filename and os.path.exists(filename): raise CLIError("The JSON file %r already exists" % filename) if args.worker_task: self._only_in_worker("--worker-task") if args.tracemalloc: try: import tracemalloc # noqa except ImportError as exc: raise CLIError("fail to import tracemalloc: %s" % exc) if args.track_memory: if MS_WINDOWS: from perf._win_memory import check_tracking_memory else: from perf._memory import check_tracking_memory err_msg = check_tracking_memory() if err_msg: raise CLIError("unable to track the memory usage " "(--track-memory): %s" % err_msg) args.python = abs_executable(args.python) if args.compare_to: args.compare_to = abs_executable(args.compare_to) if args.compare_to: for option in ('output', 'append'): if getattr(args, option): raise CLIError("--%s option is incompatible " "with --compare-to option" % option)
def _process_args(self): args = self.args if args.pipe: args.quiet = True args.verbose = False elif args.quiet: args.verbose = False nprocess = self.argparser.get_default('processes') nvalues = self.argparser.get_default('values') if args.rigorous: args.processes = nprocess * 2 # args.values = nvalues * 5 // 3 elif args.fast: # use at least 3 processes to benchmark 3 different (randomized) # hash functions args.processes = max(nprocess // 2, 3) args.values = max(nvalues * 2 // 3, 2) elif args.debug_single_value: args.processes = 1 args.warmups = 0 args.values = 1 args.loops = 1 args.min_time = 1e-9 if args.calibrate: if not args.worker: print("ERROR: Calibration can only be done " "in a worker process") sys.exit(1) args.loops = 0 # calibration values will be stored as warmup values args.warmups = 0 args.values = 0 filename = args.output if filename and os.path.exists(filename): print("ERROR: The JSON file %r already exists" % filename) sys.exit(1) if args.worker_task and not args.worker: print("ERROR: --worker-task can only be used with --worker") sys.exit(1) if args.tracemalloc: try: import tracemalloc # noqa except ImportError as exc: print("ERROR: fail to import tracemalloc: %s" % exc) sys.exit(1) if args.track_memory: if MS_WINDOWS: from perf._win_memory import check_tracking_memory else: from perf._memory import check_tracking_memory err_msg = check_tracking_memory() if err_msg: print("ERROR: unable to track the memory usage " "(--track-memory): %s" % err_msg) sys.exit(1) args.python = abs_executable(args.python) if args.compare_to: args.compare_to = abs_executable(args.compare_to) if args.compare_to: for option in ('output', 'append'): if getattr(args, option): print("ERROR: --%s option is incompatible " "with --compare-to option" % option) sys.exit(1)