mirror of
				https://github.com/ARM-software/workload-automation.git
				synced 2025-10-30 22:54:18 +00:00 
			
		
		
		
	lmbench: adding taskset support
lmbench can now be run pinned to specific CPUs.
This commit is contained in:
		| @@ -29,42 +29,64 @@ class lmbench(Workload): | ||||
|     test_names = ['lat_mem_rd', 'bw_mem'] | ||||
|  | ||||
|     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 | ||||
|                   of lmbench tests. lat_mem_rd can be used to measure latencies to memory (including caches). bw_mem | ||||
|                   can be used to measure bandwidth to/from memory over a range of operations. | ||||
|     In general, lmbench measures two key features: latency and bandwidth. This | ||||
|     workload supports a subset of lmbench tests.  lat_mem_rd can be used to | ||||
|     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: | ||||
|  | ||||
|         http://sourceforge.net/projects/lmbench/. | ||||
|  | ||||
|     See lmbench/bin/README for license details. | ||||
|     """ | ||||
|  | ||||
|     parameters = [ | ||||
|         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], | ||||
|                   description='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'), | ||||
|                   description=''' | ||||
|                   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", | ||||
|                   description='Data set size for lat_mem_rd bw_mem tests.'), | ||||
|         Parameter('mem_category', kind=list_or_string, | ||||
|                   default=('rd', 'wr', 'cp', 'frd', 'fwr', 'fcp', 'bzero', 'bcopy'), | ||||
|                   description='List of memory catetories for bw_mem test.'), | ||||
|         Parameter('parallelism', kind=int, default=None, description='Parallelism 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('parallelism', kind=int, default=None, | ||||
|                   description='Parallelism 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, | ||||
|                   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, | ||||
|                   description=""" | ||||
|                   Timeout for execution of the test. | ||||
|                   """), | ||||
|         Parameter('times', kind=int, default=1, constraint=lambda x: x > 0, | ||||
|                   description=""" | ||||
|                   Specifies the number of times the benchmark will be run in a "tight loop", | ||||
|                   i.e. without performaing setup/teardown inbetween. This parameter is distinct from | ||||
|                   "repetitions", as the latter takes place within the benchmark and produces a single result. | ||||
|                   Specifies the number of times the benchmark will be run in a | ||||
|                   "tight loop", i.e. without performaing setup/teardown | ||||
|                   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) | ||||
|  | ||||
|     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: | ||||
|             command = command + '-P {} '.format(self.parallelism) | ||||
|             parts.append('-P {}'.format(self.parallelism)) | ||||
|         if self.warmup is not None: | ||||
|             command = command + '-W {} '.format(self.warmup) | ||||
|             parts.append('-W {}'.format(self.warmup)) | ||||
|         if self.repetitions is not None: | ||||
|             command = command + '-N {} '.format(self.repetitions) | ||||
|         return command | ||||
|             parts.append('-N {}'.format(self.repetitions)) | ||||
|         return ' '.join(parts) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user