mirror of
				https://github.com/ARM-software/workload-automation.git
				synced 2025-10-31 07:04:17 +00:00 
			
		
		
		
	workloads: add lmbench
Add a workload for lat_mem_rd and bw_mem tests of LMbench benchmark, a suite of portable ANSI/C microbenchmarks for UNIX/POSIX. This is a port of corresponding workload from WA2.
This commit is contained in:
		
							
								
								
									
										160
									
								
								wa/workloads/lmbench/__init__.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										160
									
								
								wa/workloads/lmbench/__init__.py
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,160 @@ | |||||||
|  | #    Copyright 2015-2016 ARM Limited | ||||||
|  | # | ||||||
|  | # Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  | # you may not use this file except in compliance with the License. | ||||||
|  | # You may obtain a copy of the License at | ||||||
|  | # | ||||||
|  | #     http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  | # | ||||||
|  | # Unless required by applicable law or agreed to in writing, software | ||||||
|  | # distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  | # See the License for the specific language governing permissions and | ||||||
|  | # limitations under the License. | ||||||
|  | # | ||||||
|  |  | ||||||
|  | #pylint: disable=E1101,W0201 | ||||||
|  |  | ||||||
|  | import os | ||||||
|  |  | ||||||
|  | from wa import Workload, Parameter, Executable | ||||||
|  | from wa.utils.types import list_or_integer, list_or_string | ||||||
|  | from wa.utils.types import cpu_mask | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class Lmbench(Workload): | ||||||
|  |  | ||||||
|  |     name = 'lmbench' | ||||||
|  |  | ||||||
|  |     # Define supported tests. Each requires a _setup_{name} routine below | ||||||
|  |     test_names = ['lat_mem_rd', 'bw_mem'] | ||||||
|  |  | ||||||
|  |     description = """ | ||||||
|  |     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. | ||||||
|  |     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. | ||||||
|  |                   '''), | ||||||
|  |         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'), | ||||||
|  |         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('force_abi', kind=str, default=None, | ||||||
|  |                   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('loops', 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. | ||||||
|  |                   """), | ||||||
|  |         Parameter('cpus', kind=cpu_mask, default=0, aliases=['taskset_mask'], | ||||||
|  |                   description=""" | ||||||
|  |                   Specifies the CPU mask the benchmark process will be pinned to. | ||||||
|  |                   """), | ||||||
|  |     ] | ||||||
|  |  | ||||||
|  |     def setup(self, context): | ||||||
|  |  | ||||||
|  |         abi = self.target.abi | ||||||
|  |         if self.force_abi: | ||||||
|  |             abi = self.force_abi | ||||||
|  |  | ||||||
|  |         # self.test has been pre-validated, so this _should_ only fail if there's an abi mismatch | ||||||
|  |         host_exe = context.resolver.get(Executable(self, abi, self.test)) | ||||||
|  |         self.target_exe = self.target.install(host_exe) | ||||||
|  |         self.commands = [] | ||||||
|  |  | ||||||
|  |         setup_test = getattr(self, '_setup_{}'.format(self.test)) | ||||||
|  |         setup_test() | ||||||
|  |  | ||||||
|  |         for _ in range(self.loops): | ||||||
|  |             for command in self.commands: | ||||||
|  |                 self.target.execute(command, timeout=self.run_timeout) | ||||||
|  |  | ||||||
|  |     def extract_results(self, context): | ||||||
|  |         results_path = self.target.get_workpath("lmbench.output") | ||||||
|  |         result_file = self.target.list_directory(results_path)[-1] | ||||||
|  |         self.result_file = result_file.rstrip() | ||||||
|  |         result = self.target.path.join(results_path, result_file) | ||||||
|  |         self.target.pull(result, context.output_directory) | ||||||
|  |         context.add_artifact('lmbench-result', "lmbench.output", kind='raw') | ||||||
|  |  | ||||||
|  |     def teardown(self, context): | ||||||
|  |         self.target.uninstall_executable(self.test) | ||||||
|  |  | ||||||
|  |     # | ||||||
|  |     # Test setup routines | ||||||
|  |     # | ||||||
|  |     def _setup_lat_mem_rd(self): | ||||||
|  |         target_file = self.target.get_workpath('lmbench.output') | ||||||
|  |         self.target.execute('rm -f {}'.format(target_file)) | ||||||
|  |  | ||||||
|  |         command_stub = self._setup_common() | ||||||
|  |         if self.thrash: | ||||||
|  |             command_stub = '{} -t'.format(command_stub) | ||||||
|  |  | ||||||
|  |         for size in self.size: | ||||||
|  |             command = '{} {}'.format(command_stub, size) | ||||||
|  |             for stride in self.stride: | ||||||
|  |                 self.commands.append('{} {} >> {} 2>&1'.format(command, stride, target_file)) | ||||||
|  |  | ||||||
|  |     def _setup_bw_mem(self): | ||||||
|  |         target_file = self.target.get_workpath('lmbench.output') | ||||||
|  |         self.target.execute('rm -f {}'.format(target_file)) | ||||||
|  |  | ||||||
|  |         command_stub = self._setup_common() | ||||||
|  |  | ||||||
|  |         for size in self.size: | ||||||
|  |             command = '{} {}'.format(command_stub, size) | ||||||
|  |             for category in self.mem_category: | ||||||
|  |                 self.commands.append('{} {} >> {} 2>&1'.format(command, category, target_file)) | ||||||
|  |  | ||||||
|  |     def _setup_common(self): | ||||||
|  |         parts = [] | ||||||
|  |         if self.cpus: | ||||||
|  |             parts.append('{} taskset {} {}'.format(self.target.busybox, | ||||||
|  |                                                        self.cpus.mask(), | ||||||
|  |                                                        self.target_exe)) | ||||||
|  |         else: | ||||||
|  |             parts.append(self.target_exe) | ||||||
|  |         if self.parallelism is not None: | ||||||
|  |             parts.append('-P {}'.format(self.parallelism)) | ||||||
|  |         if self.warmup is not None: | ||||||
|  |             parts.append('-W {}'.format(self.warmup)) | ||||||
|  |         if self.repetitions is not None: | ||||||
|  |             parts.append('-N {}'.format(self.repetitions)) | ||||||
|  |         return ' '.join(parts) + ' ' | ||||||
							
								
								
									
										339
									
								
								wa/workloads/lmbench/bin/COPYING
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										339
									
								
								wa/workloads/lmbench/bin/COPYING
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,339 @@ | |||||||
|  | 		    GNU GENERAL PUBLIC LICENSE | ||||||
|  | 		       Version 2, June 1991 | ||||||
|  |  | ||||||
|  |  Copyright (C) 1989, 1991 Free Software Foundation, Inc. | ||||||
|  |                           675 Mass Ave, Cambridge, MA 02139, USA | ||||||
|  |  Everyone is permitted to copy and distribute verbatim copies | ||||||
|  |  of this license document, but changing it is not allowed. | ||||||
|  |  | ||||||
|  | 			    Preamble | ||||||
|  |  | ||||||
|  |   The licenses for most software are designed to take away your | ||||||
|  | freedom to share and change it.  By contrast, the GNU General Public | ||||||
|  | License is intended to guarantee your freedom to share and change free | ||||||
|  | software--to make sure the software is free for all its users.  This | ||||||
|  | General Public License applies to most of the Free Software | ||||||
|  | Foundation's software and to any other program whose authors commit to | ||||||
|  | using it.  (Some other Free Software Foundation software is covered by | ||||||
|  | the GNU Library General Public License instead.)  You can apply it to | ||||||
|  | your programs, too. | ||||||
|  |  | ||||||
|  |   When we speak of free software, we are referring to freedom, not | ||||||
|  | price.  Our General Public Licenses are designed to make sure that you | ||||||
|  | have the freedom to distribute copies of free software (and charge for | ||||||
|  | this service if you wish), that you receive source code or can get it | ||||||
|  | if you want it, that you can change the software or use pieces of it | ||||||
|  | in new free programs; and that you know you can do these things. | ||||||
|  |  | ||||||
|  |   To protect your rights, we need to make restrictions that forbid | ||||||
|  | anyone to deny you these rights or to ask you to surrender the rights. | ||||||
|  | These restrictions translate to certain responsibilities for you if you | ||||||
|  | distribute copies of the software, or if you modify it. | ||||||
|  |  | ||||||
|  |   For example, if you distribute copies of such a program, whether | ||||||
|  | gratis or for a fee, you must give the recipients all the rights that | ||||||
|  | you have.  You must make sure that they, too, receive or can get the | ||||||
|  | source code.  And you must show them these terms so they know their | ||||||
|  | rights. | ||||||
|  |  | ||||||
|  |   We protect your rights with two steps: (1) copyright the software, and | ||||||
|  | (2) offer you this license which gives you legal permission to copy, | ||||||
|  | distribute and/or modify the software. | ||||||
|  |  | ||||||
|  |   Also, for each author's protection and ours, we want to make certain | ||||||
|  | that everyone understands that there is no warranty for this free | ||||||
|  | software.  If the software is modified by someone else and passed on, we | ||||||
|  | want its recipients to know that what they have is not the original, so | ||||||
|  | that any problems introduced by others will not reflect on the original | ||||||
|  | authors' reputations. | ||||||
|  |  | ||||||
|  |   Finally, any free program is threatened constantly by software | ||||||
|  | patents.  We wish to avoid the danger that redistributors of a free | ||||||
|  | program will individually obtain patent licenses, in effect making the | ||||||
|  | program proprietary.  To prevent this, we have made it clear that any | ||||||
|  | patent must be licensed for everyone's free use or not licensed at all. | ||||||
|  |  | ||||||
|  |   The precise terms and conditions for copying, distribution and | ||||||
|  | modification follow. | ||||||
|  |  | ||||||
|  | 		    GNU GENERAL PUBLIC LICENSE | ||||||
|  |    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION | ||||||
|  |  | ||||||
|  |   0. This License applies to any program or other work which contains | ||||||
|  | a notice placed by the copyright holder saying it may be distributed | ||||||
|  | under the terms of this General Public License.  The "Program", below, | ||||||
|  | refers to any such program or work, and a "work based on the Program" | ||||||
|  | means either the Program or any derivative work under copyright law: | ||||||
|  | that is to say, a work containing the Program or a portion of it, | ||||||
|  | either verbatim or with modifications and/or translated into another | ||||||
|  | language.  (Hereinafter, translation is included without limitation in | ||||||
|  | the term "modification".)  Each licensee is addressed as "you". | ||||||
|  |  | ||||||
|  | Activities other than copying, distribution and modification are not | ||||||
|  | covered by this License; they are outside its scope.  The act of | ||||||
|  | running the Program is not restricted, and the output from the Program | ||||||
|  | is covered only if its contents constitute a work based on the | ||||||
|  | Program (independent of having been made by running the Program). | ||||||
|  | Whether that is true depends on what the Program does. | ||||||
|  |  | ||||||
|  |   1. You may copy and distribute verbatim copies of the Program's | ||||||
|  | source code as you receive it, in any medium, provided that you | ||||||
|  | conspicuously and appropriately publish on each copy an appropriate | ||||||
|  | copyright notice and disclaimer of warranty; keep intact all the | ||||||
|  | notices that refer to this License and to the absence of any warranty; | ||||||
|  | and give any other recipients of the Program a copy of this License | ||||||
|  | along with the Program. | ||||||
|  |  | ||||||
|  | You may charge a fee for the physical act of transferring a copy, and | ||||||
|  | you may at your option offer warranty protection in exchange for a fee. | ||||||
|  |  | ||||||
|  |   2. You may modify your copy or copies of the Program or any portion | ||||||
|  | of it, thus forming a work based on the Program, and copy and | ||||||
|  | distribute such modifications or work under the terms of Section 1 | ||||||
|  | above, provided that you also meet all of these conditions: | ||||||
|  |  | ||||||
|  |     a) You must cause the modified files to carry prominent notices | ||||||
|  |     stating that you changed the files and the date of any change. | ||||||
|  |  | ||||||
|  |     b) You must cause any work that you distribute or publish, that in | ||||||
|  |     whole or in part contains or is derived from the Program or any | ||||||
|  |     part thereof, to be licensed as a whole at no charge to all third | ||||||
|  |     parties under the terms of this License. | ||||||
|  |  | ||||||
|  |     c) If the modified program normally reads commands interactively | ||||||
|  |     when run, you must cause it, when started running for such | ||||||
|  |     interactive use in the most ordinary way, to print or display an | ||||||
|  |     announcement including an appropriate copyright notice and a | ||||||
|  |     notice that there is no warranty (or else, saying that you provide | ||||||
|  |     a warranty) and that users may redistribute the program under | ||||||
|  |     these conditions, and telling the user how to view a copy of this | ||||||
|  |     License.  (Exception: if the Program itself is interactive but | ||||||
|  |     does not normally print such an announcement, your work based on | ||||||
|  |     the Program is not required to print an announcement.) | ||||||
|  |  | ||||||
|  | These requirements apply to the modified work as a whole.  If | ||||||
|  | identifiable sections of that work are not derived from the Program, | ||||||
|  | and can be reasonably considered independent and separate works in | ||||||
|  | themselves, then this License, and its terms, do not apply to those | ||||||
|  | sections when you distribute them as separate works.  But when you | ||||||
|  | distribute the same sections as part of a whole which is a work based | ||||||
|  | on the Program, the distribution of the whole must be on the terms of | ||||||
|  | this License, whose permissions for other licensees extend to the | ||||||
|  | entire whole, and thus to each and every part regardless of who wrote it. | ||||||
|  |  | ||||||
|  | Thus, it is not the intent of this section to claim rights or contest | ||||||
|  | your rights to work written entirely by you; rather, the intent is to | ||||||
|  | exercise the right to control the distribution of derivative or | ||||||
|  | collective works based on the Program. | ||||||
|  |  | ||||||
|  | In addition, mere aggregation of another work not based on the Program | ||||||
|  | with the Program (or with a work based on the Program) on a volume of | ||||||
|  | a storage or distribution medium does not bring the other work under | ||||||
|  | the scope of this License. | ||||||
|  |  | ||||||
|  |   3. You may copy and distribute the Program (or a work based on it, | ||||||
|  | under Section 2) in object code or executable form under the terms of | ||||||
|  | Sections 1 and 2 above provided that you also do one of the following: | ||||||
|  |  | ||||||
|  |     a) Accompany it with the complete corresponding machine-readable | ||||||
|  |     source code, which must be distributed under the terms of Sections | ||||||
|  |     1 and 2 above on a medium customarily used for software interchange; or, | ||||||
|  |  | ||||||
|  |     b) Accompany it with a written offer, valid for at least three | ||||||
|  |     years, to give any third party, for a charge no more than your | ||||||
|  |     cost of physically performing source distribution, a complete | ||||||
|  |     machine-readable copy of the corresponding source code, to be | ||||||
|  |     distributed under the terms of Sections 1 and 2 above on a medium | ||||||
|  |     customarily used for software interchange; or, | ||||||
|  |  | ||||||
|  |     c) Accompany it with the information you received as to the offer | ||||||
|  |     to distribute corresponding source code.  (This alternative is | ||||||
|  |     allowed only for noncommercial distribution and only if you | ||||||
|  |     received the program in object code or executable form with such | ||||||
|  |     an offer, in accord with Subsection b above.) | ||||||
|  |  | ||||||
|  | The source code for a work means the preferred form of the work for | ||||||
|  | making modifications to it.  For an executable work, complete source | ||||||
|  | code means all the source code for all modules it contains, plus any | ||||||
|  | associated interface definition files, plus the scripts used to | ||||||
|  | control compilation and installation of the executable.  However, as a | ||||||
|  | special exception, the source code distributed need not include | ||||||
|  | anything that is normally distributed (in either source or binary | ||||||
|  | form) with the major components (compiler, kernel, and so on) of the | ||||||
|  | operating system on which the executable runs, unless that component | ||||||
|  | itself accompanies the executable. | ||||||
|  |  | ||||||
|  | If distribution of executable or object code is made by offering | ||||||
|  | access to copy from a designated place, then offering equivalent | ||||||
|  | access to copy the source code from the same place counts as | ||||||
|  | distribution of the source code, even though third parties are not | ||||||
|  | compelled to copy the source along with the object code. | ||||||
|  |  | ||||||
|  |   4. You may not copy, modify, sublicense, or distribute the Program | ||||||
|  | except as expressly provided under this License.  Any attempt | ||||||
|  | otherwise to copy, modify, sublicense or distribute the Program is | ||||||
|  | void, and will automatically terminate your rights under this License. | ||||||
|  | However, parties who have received copies, or rights, from you under | ||||||
|  | this License will not have their licenses terminated so long as such | ||||||
|  | parties remain in full compliance. | ||||||
|  |  | ||||||
|  |   5. You are not required to accept this License, since you have not | ||||||
|  | signed it.  However, nothing else grants you permission to modify or | ||||||
|  | distribute the Program or its derivative works.  These actions are | ||||||
|  | prohibited by law if you do not accept this License.  Therefore, by | ||||||
|  | modifying or distributing the Program (or any work based on the | ||||||
|  | Program), you indicate your acceptance of this License to do so, and | ||||||
|  | all its terms and conditions for copying, distributing or modifying | ||||||
|  | the Program or works based on it. | ||||||
|  |  | ||||||
|  |   6. Each time you redistribute the Program (or any work based on the | ||||||
|  | Program), the recipient automatically receives a license from the | ||||||
|  | original licensor to copy, distribute or modify the Program subject to | ||||||
|  | these terms and conditions.  You may not impose any further | ||||||
|  | restrictions on the recipients' exercise of the rights granted herein. | ||||||
|  | You are not responsible for enforcing compliance by third parties to | ||||||
|  | this License. | ||||||
|  |  | ||||||
|  |   7. If, as a consequence of a court judgment or allegation of patent | ||||||
|  | infringement or for any other reason (not limited to patent issues), | ||||||
|  | conditions are imposed on you (whether by court order, agreement or | ||||||
|  | otherwise) that contradict the conditions of this License, they do not | ||||||
|  | excuse you from the conditions of this License.  If you cannot | ||||||
|  | distribute so as to satisfy simultaneously your obligations under this | ||||||
|  | License and any other pertinent obligations, then as a consequence you | ||||||
|  | may not distribute the Program at all.  For example, if a patent | ||||||
|  | license would not permit royalty-free redistribution of the Program by | ||||||
|  | all those who receive copies directly or indirectly through you, then | ||||||
|  | the only way you could satisfy both it and this License would be to | ||||||
|  | refrain entirely from distribution of the Program. | ||||||
|  |  | ||||||
|  | If any portion of this section is held invalid or unenforceable under | ||||||
|  | any particular circumstance, the balance of the section is intended to | ||||||
|  | apply and the section as a whole is intended to apply in other | ||||||
|  | circumstances. | ||||||
|  |  | ||||||
|  | It is not the purpose of this section to induce you to infringe any | ||||||
|  | patents or other property right claims or to contest validity of any | ||||||
|  | such claims; this section has the sole purpose of protecting the | ||||||
|  | integrity of the free software distribution system, which is | ||||||
|  | implemented by public license practices.  Many people have made | ||||||
|  | generous contributions to the wide range of software distributed | ||||||
|  | through that system in reliance on consistent application of that | ||||||
|  | system; it is up to the author/donor to decide if he or she is willing | ||||||
|  | to distribute software through any other system and a licensee cannot | ||||||
|  | impose that choice. | ||||||
|  |  | ||||||
|  | This section is intended to make thoroughly clear what is believed to | ||||||
|  | be a consequence of the rest of this License. | ||||||
|  |  | ||||||
|  |   8. If the distribution and/or use of the Program is restricted in | ||||||
|  | certain countries either by patents or by copyrighted interfaces, the | ||||||
|  | original copyright holder who places the Program under this License | ||||||
|  | may add an explicit geographical distribution limitation excluding | ||||||
|  | those countries, so that distribution is permitted only in or among | ||||||
|  | countries not thus excluded.  In such case, this License incorporates | ||||||
|  | the limitation as if written in the body of this License. | ||||||
|  |  | ||||||
|  |   9. The Free Software Foundation may publish revised and/or new versions | ||||||
|  | of the General Public License from time to time.  Such new versions will | ||||||
|  | be similar in spirit to the present version, but may differ in detail to | ||||||
|  | address new problems or concerns. | ||||||
|  |  | ||||||
|  | Each version is given a distinguishing version number.  If the Program | ||||||
|  | specifies a version number of this License which applies to it and "any | ||||||
|  | later version", you have the option of following the terms and conditions | ||||||
|  | either of that version or of any later version published by the Free | ||||||
|  | Software Foundation.  If the Program does not specify a version number of | ||||||
|  | this License, you may choose any version ever published by the Free Software | ||||||
|  | Foundation. | ||||||
|  |  | ||||||
|  |   10. If you wish to incorporate parts of the Program into other free | ||||||
|  | programs whose distribution conditions are different, write to the author | ||||||
|  | to ask for permission.  For software which is copyrighted by the Free | ||||||
|  | Software Foundation, write to the Free Software Foundation; we sometimes | ||||||
|  | make exceptions for this.  Our decision will be guided by the two goals | ||||||
|  | of preserving the free status of all derivatives of our free software and | ||||||
|  | of promoting the sharing and reuse of software generally. | ||||||
|  |  | ||||||
|  | 			    NO WARRANTY | ||||||
|  |  | ||||||
|  |   11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY | ||||||
|  | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN | ||||||
|  | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES | ||||||
|  | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED | ||||||
|  | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||||||
|  | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS | ||||||
|  | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE | ||||||
|  | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, | ||||||
|  | REPAIR OR CORRECTION. | ||||||
|  |  | ||||||
|  |   12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING | ||||||
|  | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR | ||||||
|  | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, | ||||||
|  | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING | ||||||
|  | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED | ||||||
|  | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY | ||||||
|  | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER | ||||||
|  | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE | ||||||
|  | POSSIBILITY OF SUCH DAMAGES. | ||||||
|  |  | ||||||
|  | 		     END OF TERMS AND CONDITIONS | ||||||
|  |  | ||||||
|  | 	Appendix: How to Apply These Terms to Your New Programs | ||||||
|  |  | ||||||
|  |   If you develop a new program, and you want it to be of the greatest | ||||||
|  | possible use to the public, the best way to achieve this is to make it | ||||||
|  | free software which everyone can redistribute and change under these terms. | ||||||
|  |  | ||||||
|  |   To do so, attach the following notices to the program.  It is safest | ||||||
|  | to attach them to the start of each source file to most effectively | ||||||
|  | convey the exclusion of warranty; and each file should have at least | ||||||
|  | the "copyright" line and a pointer to where the full notice is found. | ||||||
|  |  | ||||||
|  |     <one line to give the program's name and a brief idea of what it does.> | ||||||
|  |     Copyright (C) 19yy  <name of author> | ||||||
|  |  | ||||||
|  |     This program is free software; you can redistribute it and/or modify | ||||||
|  |     it under the terms of the GNU General Public License as published by | ||||||
|  |     the Free Software Foundation; either version 2 of the License, or | ||||||
|  |     (at your option) any later version. | ||||||
|  |  | ||||||
|  |     This program is distributed in the hope that it will be useful, | ||||||
|  |     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  |     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  |     GNU General Public License for more details. | ||||||
|  |  | ||||||
|  |     You should have received a copy of the GNU General Public License | ||||||
|  |     along with this program; if not, write to the Free Software | ||||||
|  |     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||||||
|  |  | ||||||
|  | Also add information on how to contact you by electronic and paper mail. | ||||||
|  |  | ||||||
|  | If the program is interactive, make it output a short notice like this | ||||||
|  | when it starts in an interactive mode: | ||||||
|  |  | ||||||
|  |     Gnomovision version 69, Copyright (C) 19yy name of author | ||||||
|  |     Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. | ||||||
|  |     This is free software, and you are welcome to redistribute it | ||||||
|  |     under certain conditions; type `show c' for details. | ||||||
|  |  | ||||||
|  | The hypothetical commands `show w' and `show c' should show the appropriate | ||||||
|  | parts of the General Public License.  Of course, the commands you use may | ||||||
|  | be called something other than `show w' and `show c'; they could even be | ||||||
|  | mouse-clicks or menu items--whatever suits your program. | ||||||
|  |  | ||||||
|  | You should also get your employer (if you work as a programmer) or your | ||||||
|  | school, if any, to sign a "copyright disclaimer" for the program, if | ||||||
|  | necessary.  Here is a sample; alter the names: | ||||||
|  |  | ||||||
|  |   Yoyodyne, Inc., hereby disclaims all copyright interest in the program | ||||||
|  |   `Gnomovision' (which makes passes at compilers) written by James Hacker. | ||||||
|  |  | ||||||
|  |   <signature of Ty Coon>, 1 April 1989 | ||||||
|  |   Ty Coon, President of Vice | ||||||
|  |  | ||||||
|  | This General Public License does not permit incorporating your program into | ||||||
|  | proprietary programs.  If your program is a subroutine library, you may | ||||||
|  | consider it more useful to permit linking proprietary applications with the | ||||||
|  | library.  If this is what you want to do, use the GNU Library General | ||||||
|  | Public License instead of this License. | ||||||
							
								
								
									
										108
									
								
								wa/workloads/lmbench/bin/COPYING-2
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										108
									
								
								wa/workloads/lmbench/bin/COPYING-2
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,108 @@ | |||||||
|  | %M% %I% %E% | ||||||
|  |  | ||||||
|  | The set of programs and documentation known as "lmbench" are distributed | ||||||
|  | under the Free Software Foundation's General Public License with the | ||||||
|  | following additional restrictions (which override any conflicting | ||||||
|  | restrictions in the GPL): | ||||||
|  |  | ||||||
|  | 1. You may not distribute results in any public forum, in any publication, | ||||||
|  |    or in any other way if you have modified the benchmarks.   | ||||||
|  |  | ||||||
|  | 2. You may not distribute the results for a fee of any kind.  This includes | ||||||
|  |    web sites which generate revenue from advertising. | ||||||
|  |  | ||||||
|  | If you have modifications or enhancements that you wish included in | ||||||
|  | future versions, please mail those to me, Larry McVoy, at lm@bitmover.com. | ||||||
|  |  | ||||||
|  | ========================================================================= | ||||||
|  |  | ||||||
|  | Rationale for the publication restrictions: | ||||||
|  |  | ||||||
|  | In summary: | ||||||
|  |  | ||||||
|  |     a) LMbench is designed to measure enough of an OS that if you do well in | ||||||
|  |        all catagories, you've covered latency and bandwidth in networking, | ||||||
|  |        disks, file systems, VM systems, and memory systems. | ||||||
|  |     b) Multiple times in the past people have wanted to report partial results. | ||||||
|  |        Without exception, they were doing so to show a skewed view of whatever | ||||||
|  |        it was they were measuring (for example, one OS fit small processes into | ||||||
|  |        segments and used the segment register to switch them, getting good  | ||||||
|  |        results, but did not want to report large process context switches  | ||||||
|  |        because those didn't look as good). | ||||||
|  |     c) We insist that if you formally report LMbench results, you have to | ||||||
|  |        report all of them and make the raw results file easily available. | ||||||
|  |        Reporting all of them means in that same publication, a pointer | ||||||
|  |        does not count.  Formally, in this context, means in a paper, | ||||||
|  |        on a web site, etc., but does not mean the exchange of results | ||||||
|  |        between OS developers who are tuning a particular subsystem. | ||||||
|  |  | ||||||
|  | We have a lot of history with benchmarking and feel strongly that there | ||||||
|  | is little to be gained and a lot to be lost if we allowed the results | ||||||
|  | to be published in isolation, without the complete story being told. | ||||||
|  |  | ||||||
|  | There has been a lot of discussion about this, with people not liking this | ||||||
|  | restriction, more or less on the freedom principle as far as I can tell. | ||||||
|  | We're not swayed by that, our position is that we are doing the right | ||||||
|  | thing for the OS community and will stick to our guns on this one. | ||||||
|  |  | ||||||
|  | It would be a different matter if there were 3 other competing | ||||||
|  | benchmarking systems out there that did what LMbench does and didn't have | ||||||
|  | the same reporting rules.  There aren't and as long as that is the case, | ||||||
|  | I see no reason to change my mind and lots of reasons not to do so.  I'm | ||||||
|  | sorry if I'm a pain in the ass on this topic, but I'm doing the right | ||||||
|  | thing for you and the sooner people realize that the sooner we can get on | ||||||
|  | to real work. | ||||||
|  |  | ||||||
|  | Operating system design is a largely an art of balancing tradeoffs. | ||||||
|  | In many cases improving one part of the system has negative effects | ||||||
|  | on other parts of the system.  The art is choosing which parts to | ||||||
|  | optimize and which to not optimize.  Just like in computer architecture, | ||||||
|  | you can optimize the common instructions (RISC) or the uncommon | ||||||
|  | instructions (CISC), but in either case there is usually a cost to | ||||||
|  | pay (in RISC uncommon instructions are more expensive than common | ||||||
|  | instructions, and in CISC common instructions are more expensive | ||||||
|  | than required).  The art lies in knowing which operations are  | ||||||
|  | important and optmizing those while minimizing the impact on the | ||||||
|  | rest of the system.   | ||||||
|  |  | ||||||
|  | Since lmbench gives a good overview of many important system features, | ||||||
|  | users may see the performance of the system as a whole, and can | ||||||
|  | see where tradeoffs may have been made.  This is the driving force | ||||||
|  | behind the publication restriction: any idiot can optimize certain | ||||||
|  | subsystems while completely destroying overall system performance. | ||||||
|  | If said idiot publishes *only* the numbers relating to the optimized | ||||||
|  | subsystem, then the costs of the optimization are hidden and readers | ||||||
|  | will mistakenly believe that the optimization is a good idea.  By | ||||||
|  | including the publication restriction readers would be able to | ||||||
|  | detect that the optimization improved the subsystem performance | ||||||
|  | while damaging the rest of the system performance and would be able | ||||||
|  | to make an informed decision as to the merits of the optimization. | ||||||
|  |  | ||||||
|  | Note that these restrictions only apply to *publications*.  We | ||||||
|  | intend and encourage lmbench's use during design, development, | ||||||
|  | and tweaking of systems and applications.  If you are tuning the | ||||||
|  | linux or BSD TCP stack, then by all means, use the networking | ||||||
|  | benchmarks to evaluate the performance effects of various  | ||||||
|  | modifications; Swap results with other developers; use the | ||||||
|  | networking numbers in isolation.  The restrictions only kick | ||||||
|  | in when you go to *publish* the results.  If you sped up the | ||||||
|  | TCP stack by a factor of 2 and want to publish a paper with the | ||||||
|  | various tweaks or algorithms used to accomplish this goal, then | ||||||
|  | you can publish the networking numbers to show the improvement. | ||||||
|  | However, the paper *must* also include the rest of the standard | ||||||
|  | lmbench numbers to show how your tweaks may (or may not) have | ||||||
|  | impacted the rest of the system.  The full set of numbers may | ||||||
|  | be included in an appendix, but they *must* be included in the | ||||||
|  | paper. | ||||||
|  |  | ||||||
|  | This helps protect the community from adopting flawed technologies | ||||||
|  | based on incomplete data.  It also helps protect the community from | ||||||
|  | misleading marketing which tries to sell systems based on partial | ||||||
|  | (skewed) lmbench performance results.   | ||||||
|  |  | ||||||
|  | We have seen many cases in the past where partial or misleading | ||||||
|  | benchmark results have caused great harm to the community, and | ||||||
|  | we want to ensure that our benchmark is not used to perpetrate | ||||||
|  | further harm and support false or misleading claims. | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										17
									
								
								wa/workloads/lmbench/bin/README
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										17
									
								
								wa/workloads/lmbench/bin/README
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,17 @@ | |||||||
|  | This directory contains a subset of lmbench tests supported by Workload Automation. | ||||||
|  |  | ||||||
|  | The binaries are provided under the terms of the GNU General Public License, Version 2,  | ||||||
|  | consistent with lmbench's additional restrictions.  | ||||||
|  | Refer to COPYING and COPYING-2 files for details. | ||||||
|  |  | ||||||
|  | The binaries were built from lmbench-3.0-a9 source code, available publically from | ||||||
|  |  http://sourceforge.net/projects/lmbench/, specifically | ||||||
|  |  http://sourceforge.net/projects/lmbench/files/development/ | ||||||
|  |  | ||||||
|  | The binaries provided here are built and statically linked with the stable  | ||||||
|  | Linaro GNU 4.9 toolchain from November 2014. | ||||||
|  | Source available from:  | ||||||
|  |    http://releases.linaro.org/14.11/components/toolchain/gcc-linaro/4.9 | ||||||
|  | Binaries available from: | ||||||
|  |    https://releases.linaro.org/14.11/components/toolchain/binaries/aarch64-linux-gnu | ||||||
|  |    https://releases.linaro.org/14.11/components/toolchain/binaries/arm-linux-gnueabihf | ||||||
							
								
								
									
										
											BIN
										
									
								
								wa/workloads/lmbench/bin/arm64/bw_mem
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								wa/workloads/lmbench/bin/arm64/bw_mem
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								wa/workloads/lmbench/bin/arm64/lat_mem_rd
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								wa/workloads/lmbench/bin/arm64/lat_mem_rd
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								wa/workloads/lmbench/bin/armeabi/bw_mem
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								wa/workloads/lmbench/bin/armeabi/bw_mem
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								wa/workloads/lmbench/bin/armeabi/lat_mem_rd
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								wa/workloads/lmbench/bin/armeabi/lat_mem_rd
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
		Reference in New Issue
	
	Block a user