mbligh | 34d0117 | 2008-06-05 16:26:31 +0000 | [diff] [blame] | 1 | import os |
mbligh | 9f85792 | 2008-06-05 16:19:07 +0000 | [diff] [blame] | 2 | from autotest_lib.client.bin import test, autotest_utils |
| 3 | from autotest_lib.client.common_lib import utils, error |
| 4 | |
mbligh | 56a91f0 | 2006-09-14 17:55:19 +0000 | [diff] [blame] | 5 | |
| 6 | class netperf2(test.test): |
mbligh | a5630a5 | 2008-09-03 22:09:50 +0000 | [diff] [blame] | 7 | version = 2 |
mbligh | 56a91f0 | 2006-09-14 17:55:19 +0000 | [diff] [blame] | 8 | |
mbligh | a5630a5 | 2008-09-03 22:09:50 +0000 | [diff] [blame] | 9 | # ftp://ftp.netperf.org/netperf/netperf-2.4.4.tar.gz |
| 10 | def setup(self, tarball = 'netperf-2.4.4.tar.gz'): |
mbligh | 8b35285 | 2008-06-07 01:07:08 +0000 | [diff] [blame] | 11 | tarball = utils.unmap_url(self.bindir, tarball, self.tmpdir) |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 12 | autotest_utils.extract_tarball_to_dir(tarball, self.srcdir) |
| 13 | os.chdir(self.srcdir) |
mbligh | 56a91f0 | 2006-09-14 17:55:19 +0000 | [diff] [blame] | 14 | |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 15 | utils.system('./configure') |
| 16 | utils.system('make') |
mbligh | 54e5684 | 2006-09-23 06:02:54 +0000 | [diff] [blame] | 17 | |
| 18 | |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 19 | def initialize(self): |
mbligh | a5630a5 | 2008-09-03 22:09:50 +0000 | [diff] [blame] | 20 | self.job.require_gcc() |
| 21 | |
| 22 | self.server_path = '%s&' % os.path.join(self.srcdir, |
| 23 | 'src/netserver') |
| 24 | # Add server_ip and arguments later |
| 25 | self.client_path = '%s %%s %%s' % os.path.join(self.srcdir, |
| 26 | 'src/netperf -H') |
| 27 | |
| 28 | self.valid_tests = ['TCP_STREAM', 'TCP_RR', 'TCP_CRR', |
| 29 | 'UDP_STREAM', 'UDP_RR', 'UDP_CRR'] |
| 30 | self.results = [] |
mbligh | 56a91f0 | 2006-09-14 17:55:19 +0000 | [diff] [blame] | 31 | |
mbligh | 6f5bbce | 2007-08-10 19:18:37 +0000 | [diff] [blame] | 32 | |
mbligh | a5630a5 | 2008-09-03 22:09:50 +0000 | [diff] [blame] | 33 | def run_once(self, server_ip, client_ip, role, test='TCP_STREAM', |
| 34 | test_time=10, stream_list=[1]): |
| 35 | if test not in self.valid_tests: |
| 36 | raise error.TestError('invalid test specified') |
| 37 | self.role = role |
| 38 | |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 39 | server_tag = server_ip + '#netperf-server' |
| 40 | client_tag = client_ip + '#netperf-client' |
| 41 | all = [server_tag, client_tag] |
mbligh | a5630a5 | 2008-09-03 22:09:50 +0000 | [diff] [blame] | 42 | |
| 43 | |
| 44 | for num_streams in stream_list: |
| 45 | if role == 'server': |
| 46 | self.server_start() |
| 47 | try: |
| 48 | self.job.barrier(server_tag, 'start', 120).rendevous(*all) |
| 49 | self.job.barrier(server_tag, 'stop', 5400).rendevous(*all) |
| 50 | finally: |
| 51 | self.server_stop() |
| 52 | |
| 53 | elif role == 'client': |
| 54 | self.job.barrier(client_tag, 'start', 120).rendevous(*all) |
| 55 | self.client(server_ip, test, test_time, num_streams) |
| 56 | self.job.barrier(client_tag, 'stop', 30).rendevous(*all) |
| 57 | else: |
| 58 | raise error.TestError('invalid role specified') |
mbligh | 54e5684 | 2006-09-23 06:02:54 +0000 | [diff] [blame] | 59 | |
mbligh | 56a91f0 | 2006-09-14 17:55:19 +0000 | [diff] [blame] | 60 | |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 61 | def server_start(self): |
mbligh | 78be24a | 2008-06-13 21:40:08 +0000 | [diff] [blame] | 62 | utils.system('killall netserver', ignore_status=True) |
mbligh | a5630a5 | 2008-09-03 22:09:50 +0000 | [diff] [blame] | 63 | self.results.append(utils.system_output(self.server_path, |
| 64 | retain_output=True)) |
mbligh | 56a91f0 | 2006-09-14 17:55:19 +0000 | [diff] [blame] | 65 | |
mbligh | 54e5684 | 2006-09-23 06:02:54 +0000 | [diff] [blame] | 66 | |
jadmanski | 0afbb63 | 2008-06-06 21:10:57 +0000 | [diff] [blame] | 67 | def server_stop(self): |
mbligh | a5630a5 | 2008-09-03 22:09:50 +0000 | [diff] [blame] | 68 | utils.system('killall netserver', ignore_status=True) |
mbligh | 56a91f0 | 2006-09-14 17:55:19 +0000 | [diff] [blame] | 69 | |
mbligh | 54e5684 | 2006-09-23 06:02:54 +0000 | [diff] [blame] | 70 | |
mbligh | a5630a5 | 2008-09-03 22:09:50 +0000 | [diff] [blame] | 71 | def client(self, server_ip, test, test_time, num_streams): |
| 72 | args = '-t %s -l %d' % (test, test_time) |
| 73 | cmd = self.client_path % (server_ip, args) |
mbligh | 56a91f0 | 2006-09-14 17:55:19 +0000 | [diff] [blame] | 74 | |
mbligh | a5630a5 | 2008-09-03 22:09:50 +0000 | [diff] [blame] | 75 | try: |
| 76 | self.results.append(utils.get_cpu_percentage( |
| 77 | utils.system_output_parallel, |
| 78 | [cmd]*num_streams, |
| 79 | retain_output=True)) |
| 80 | except error.CmdError, e: |
| 81 | """ Catch errors due to timeout, but raise others |
| 82 | The actual error string is: |
| 83 | "Command did not complete within %d seconds" |
| 84 | called in function join_bg_job in the file common_lib/utils.py |
mbligh | e8fa3af | 2006-09-28 23:14:56 +0000 | [diff] [blame] | 85 | |
mbligh | a5630a5 | 2008-09-03 22:09:50 +0000 | [diff] [blame] | 86 | Looking for 'within' is probably not the best way to do this but |
| 87 | works for now""" |
| 88 | |
| 89 | if 'within' in e.additional_text: |
| 90 | print e.additional_text |
| 91 | self.results.append(None) |
| 92 | else: |
| 93 | raise |
| 94 | |
| 95 | |
| 96 | def postprocess(self): |
| 97 | print "Post Processing" |
| 98 | print self.role |
| 99 | print self.results |
| 100 | print "End Post Processing" |