mirror of
https://github.com/ARM-software/workload-automation.git
synced 2025-01-19 12:24:32 +00:00
lmbench: adding taskset support
lmbench can now be run pinned to specific CPUs.
This commit is contained in:
parent
288aa764b3
commit
759f8db1bc
@ -29,42 +29,64 @@ class lmbench(Workload):
|
|||||||
test_names = ['lat_mem_rd', 'bw_mem']
|
test_names = ['lat_mem_rd', 'bw_mem']
|
||||||
|
|
||||||
description = """
|
description = """
|
||||||
Run a subtest from lmbench, a suite of portable ANSI/C microbenchmarks for UNIX/POSIX.
|
Run a subtest from lmbench, a suite of portable ANSI/C microbenchmarks for
|
||||||
|
UNIX/POSIX.
|
||||||
|
|
||||||
In general, lmbench measures two key features: latency and bandwidth. This workload supports a subset
|
In general, lmbench measures two key features: latency and bandwidth. This
|
||||||
of lmbench tests. lat_mem_rd can be used to measure latencies to memory (including caches). bw_mem
|
workload supports a subset of lmbench tests. lat_mem_rd can be used to
|
||||||
can be used to measure bandwidth to/from memory over a range of operations.
|
measure latencies to memory (including caches). bw_mem can be used to
|
||||||
|
measure bandwidth to/from memory over a range of operations.
|
||||||
|
|
||||||
Further details, and source code are available from:
|
Further details, and source code are available from:
|
||||||
http://sourceforge.net/projects/lmbench/.
|
|
||||||
See lmbench/bin/README for license details.
|
http://sourceforge.net/projects/lmbench/.
|
||||||
"""
|
|
||||||
|
See lmbench/bin/README for license details.
|
||||||
|
"""
|
||||||
|
|
||||||
parameters = [
|
parameters = [
|
||||||
Parameter('test', default='lat_mem_rd', allowed_values=test_names,
|
Parameter('test', default='lat_mem_rd', allowed_values=test_names,
|
||||||
description="Specifies an lmbench test to run."),
|
description='''
|
||||||
|
Specifies an lmbench test to run.
|
||||||
|
'''),
|
||||||
Parameter('stride', kind=list_or_integer, default=[128],
|
Parameter('stride', kind=list_or_integer, default=[128],
|
||||||
description='Stride for lat_mem_rd test. Workload will iterate over one or more integer values.'),
|
description='''
|
||||||
Parameter('thrash', kind=bool, default=True, description='Sets -t flag for lat_mem_rd_test'),
|
Stride for lat_mem_rd test. Workload will iterate over one or
|
||||||
|
more integer values.
|
||||||
|
'''),
|
||||||
|
Parameter('thrash', kind=bool, default=True,
|
||||||
|
description='Sets -t flag for lat_mem_rd_test'),
|
||||||
Parameter('size', kind=list_or_string, default="4m",
|
Parameter('size', kind=list_or_string, default="4m",
|
||||||
description='Data set size for lat_mem_rd bw_mem tests.'),
|
description='Data set size for lat_mem_rd bw_mem tests.'),
|
||||||
Parameter('mem_category', kind=list_or_string,
|
Parameter('mem_category', kind=list_or_string,
|
||||||
default=('rd', 'wr', 'cp', 'frd', 'fwr', 'fcp', 'bzero', 'bcopy'),
|
default=('rd', 'wr', 'cp', 'frd', 'fwr', 'fcp', 'bzero', 'bcopy'),
|
||||||
description='List of memory catetories for bw_mem test.'),
|
description='List of memory catetories for bw_mem test.'),
|
||||||
Parameter('parallelism', kind=int, default=None, description='Parallelism flag for tests that accept it.'),
|
Parameter('parallelism', kind=int, default=None,
|
||||||
Parameter('warmup', kind=int, default=None, description='Warmup flag for tests that accept it.'),
|
description='Parallelism flag for tests that accept it.'),
|
||||||
Parameter('repetitions', kind=int, default=None, description='Repetitions flag for tests that accept it.'),
|
Parameter('warmup', kind=int, default=None,
|
||||||
|
description='Warmup flag for tests that accept it.'),
|
||||||
|
Parameter('repetitions', kind=int, default=None,
|
||||||
|
description='Repetitions flag for tests that accept it.'),
|
||||||
Parameter('force_abi', kind=str, default=None,
|
Parameter('force_abi', kind=str, default=None,
|
||||||
description='Override device abi with this value. Can be used to force arm32 on 64-bit devices.'),
|
description='''
|
||||||
|
Override device abi with this value. Can be used to force
|
||||||
|
arm32 on 64-bit devices.
|
||||||
|
'''),
|
||||||
Parameter('run_timeout', kind=int, default=900,
|
Parameter('run_timeout', kind=int, default=900,
|
||||||
description="""
|
description="""
|
||||||
Timeout for execution of the test.
|
Timeout for execution of the test.
|
||||||
"""),
|
"""),
|
||||||
Parameter('times', kind=int, default=1, constraint=lambda x: x > 0,
|
Parameter('times', kind=int, default=1, constraint=lambda x: x > 0,
|
||||||
description="""
|
description="""
|
||||||
Specifies the number of times the benchmark will be run in a "tight loop",
|
Specifies the number of times the benchmark will be run in a
|
||||||
i.e. without performaing setup/teardown inbetween. This parameter is distinct from
|
"tight loop", i.e. without performaing setup/teardown
|
||||||
"repetitions", as the latter takes place within the benchmark and produces a single result.
|
inbetween. This parameter is distinct from "repetitions", as
|
||||||
|
the latter takes place within the benchmark and produces a
|
||||||
|
single result.
|
||||||
|
"""),
|
||||||
|
Parameter('taskset_mask', kind=int,
|
||||||
|
description="""
|
||||||
|
Specifies the CPU mask the benchmark process will be pinned to.
|
||||||
"""),
|
"""),
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -124,11 +146,17 @@ class lmbench(Workload):
|
|||||||
self.commands.append(command + what)
|
self.commands.append(command + what)
|
||||||
|
|
||||||
def _setup_common(self):
|
def _setup_common(self):
|
||||||
command = self.device_exe + " "
|
parts = []
|
||||||
|
if self.taskset_mask:
|
||||||
|
parts.append('{} taskset 0x{:x} {}'.format(self.device.busybox,
|
||||||
|
self.taskset_mask,
|
||||||
|
self.device_exe))
|
||||||
|
else:
|
||||||
|
parts.append(self.device_exe)
|
||||||
if self.parallelism is not None:
|
if self.parallelism is not None:
|
||||||
command = command + '-P {} '.format(self.parallelism)
|
parts.append('-P {}'.format(self.parallelism))
|
||||||
if self.warmup is not None:
|
if self.warmup is not None:
|
||||||
command = command + '-W {} '.format(self.warmup)
|
parts.append('-W {}'.format(self.warmup))
|
||||||
if self.repetitions is not None:
|
if self.repetitions is not None:
|
||||||
command = command + '-N {} '.format(self.repetitions)
|
parts.append('-N {}'.format(self.repetitions))
|
||||||
return command
|
return ' '.join(parts)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user