• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1import os
2from autotest_lib.client.bin import test, utils
3
4
5class stress(test.test):
6    """
7    Calls stress, a simple program which aims to impose certain types of
8    computing stress on the target machine.
9    @author: Yi Yang (yang.y.yi@gmail.com)
10
11    In order to verify at a glance the options supported by the program stress,
12    check out the options summary located at the stress example control file.
13    """
14    version = 2
15
16    def initialize(self):
17        self.job.require_gcc()
18
19
20    # http://weather.ou.edu/~apw/projects/stress/stress-1.0.4.tar.gz
21    def setup(self, tarball = 'stress-1.0.4.tar.gz'):
22        tarball = utils.unmap_url(self.bindir, tarball, self.tmpdir)
23        utils.extract_tarball_to_dir(tarball, self.srcdir)
24        os.chdir(self.srcdir)
25
26        utils.configure()
27        utils.make()
28
29
30    def run_once(self, args = '', stress_length=60):
31        if not args:
32            # We will use 2 workers of each type for each CPU detected
33            threads = 2 * utils.count_cpus()
34
35            # Sometimes the default memory used by each memory worker (256 M)
36            # might make our machine go OOM and then funny things might start to
37            # happen. Let's avoid that.
38            mb = utils.freememtotal() + utils.read_from_meminfo('SwapFree') / 2
39            memory_per_thread = (mb * 1024) / threads
40
41            # Even though unlikely, it's good to prevent from allocating more
42            # disk than this machine actually has on its autotest directory
43            # (limit the amount of disk used to max of 90 % of free space)
44            free_disk = utils.freespace(self.srcdir)
45            file_size_per_thread = 1024 ** 2
46            if (0.9 * free_disk) < file_size_per_thread * threads:
47                file_size_per_thread = (0.9 * free_disk) / threads
48
49            # Number of CPU workers spinning on sqrt()
50            args = '--cpu %d ' % threads
51            # Number of IO workers spinning on sync()
52            args += '--io %d ' % threads
53            # Number of Memory workers spinning on malloc()/free()
54            args += '--vm %d ' % threads
55            # Amount of memory used per each worker
56            args += '--vm-bytes %d ' % memory_per_thread
57            # Number of HD workers spinning on write()/ulink()
58            args += '--hdd %d ' % threads
59            # Size of the files created by each worker in bytes
60            args += '--hdd-bytes %d ' % file_size_per_thread
61            # Time for which the stress test will run
62            args += '--timeout %d ' % stress_length
63            # Verbose flag
64            args += '--verbose'
65
66        utils.system(self.srcdir + '/src/stress ' + args)
67