1import signal, os
2from autotest_lib.client.bin import utils, test
3
4class bash_shared_mapping(test.test):
5    version = 3
6
7    # http://www.zip.com.au/~akpm/linux/patches/stuff/ext3-tools.tar.gz
8    def setup(self, tarball = 'ext3-tools.tar.gz'):
9        self.tarball = utils.unmap_url(self.bindir, tarball, self.tmpdir)
10        utils.extract_tarball_to_dir(self.tarball, self.srcdir)
11
12        os.chdir(self.srcdir)
13        utils.system('patch -p1 < ../makefile.patch')
14        utils.make('bash-shared-mapping usemem')
15
16
17    def initialize(self):
18        self.job.require_gcc()
19
20
21    def execute(self, testdir = None, iterations = 10000):
22        if not testdir:
23            testdir = self.tmpdir
24        os.chdir(testdir)
25        file = os.path.join(testdir, 'foo')
26        # Want to use 3/4 of all memory for each of
27        # bash-shared-mapping and usemem
28        kilobytes = (3 * utils.memtotal()) / 4
29
30        # Want two usemem -m megabytes in parallel in background.
31        pid = [None, None]
32        usemem = os.path.join(self.srcdir, 'usemem')
33        args = ('usemem', '-N', '-m', '%d' % (kilobytes / 1024))
34        # print_to_tty ('2 x ' + ' '.join(args))
35        for i in (0,1):
36            pid[i] = os.spawnv(os.P_NOWAIT, usemem, args)
37
38        cmd = "%s/bash-shared-mapping %s %d -t %d -n %d" % \
39                        (self.srcdir, file, kilobytes,
40                         utils.count_cpus(), iterations)
41        os.system(cmd)
42
43        for i in (0, 1):
44            os.kill(pid[i], signal.SIGKILL)
45