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'] |     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/. |         http://sourceforge.net/projects/lmbench/. | ||||||
|  |  | ||||||
|     See lmbench/bin/README for license details. |     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) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user