blob: f1a78eb055718e976609db8612c33fe2f9597481 [file] [log] [blame]
mbligh34d01172008-06-05 16:26:31 +00001import os
mbligh9f857922008-06-05 16:19:07 +00002from autotest_lib.client.bin import test, autotest_utils
3from autotest_lib.client.common_lib import utils, error
4
mbligh56a91f02006-09-14 17:55:19 +00005
6class netperf2(test.test):
mbligha5630a52008-09-03 22:09:50 +00007 version = 2
mbligh56a91f02006-09-14 17:55:19 +00008
mbligha5630a52008-09-03 22:09:50 +00009 # ftp://ftp.netperf.org/netperf/netperf-2.4.4.tar.gz
10 def setup(self, tarball = 'netperf-2.4.4.tar.gz'):
mbligh8b352852008-06-07 01:07:08 +000011 tarball = utils.unmap_url(self.bindir, tarball, self.tmpdir)
jadmanski0afbb632008-06-06 21:10:57 +000012 autotest_utils.extract_tarball_to_dir(tarball, self.srcdir)
13 os.chdir(self.srcdir)
mbligh56a91f02006-09-14 17:55:19 +000014
jadmanski0afbb632008-06-06 21:10:57 +000015 utils.system('./configure')
16 utils.system('make')
mbligh54e56842006-09-23 06:02:54 +000017
18
jadmanski0afbb632008-06-06 21:10:57 +000019 def initialize(self):
mbligha5630a52008-09-03 22:09:50 +000020 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 = []
mbligh56a91f02006-09-14 17:55:19 +000031
mbligh6f5bbce2007-08-10 19:18:37 +000032
mbligha5630a52008-09-03 22:09:50 +000033 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
jadmanski0afbb632008-06-06 21:10:57 +000039 server_tag = server_ip + '#netperf-server'
40 client_tag = client_ip + '#netperf-client'
41 all = [server_tag, client_tag]
mbligha5630a52008-09-03 22:09:50 +000042
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')
mbligh54e56842006-09-23 06:02:54 +000059
mbligh56a91f02006-09-14 17:55:19 +000060
jadmanski0afbb632008-06-06 21:10:57 +000061 def server_start(self):
mbligh78be24a2008-06-13 21:40:08 +000062 utils.system('killall netserver', ignore_status=True)
mbligha5630a52008-09-03 22:09:50 +000063 self.results.append(utils.system_output(self.server_path,
64 retain_output=True))
mbligh56a91f02006-09-14 17:55:19 +000065
mbligh54e56842006-09-23 06:02:54 +000066
jadmanski0afbb632008-06-06 21:10:57 +000067 def server_stop(self):
mbligha5630a52008-09-03 22:09:50 +000068 utils.system('killall netserver', ignore_status=True)
mbligh56a91f02006-09-14 17:55:19 +000069
mbligh54e56842006-09-23 06:02:54 +000070
mbligha5630a52008-09-03 22:09:50 +000071 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)
mbligh56a91f02006-09-14 17:55:19 +000074
mbligha5630a52008-09-03 22:09:50 +000075 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
mblighe8fa3af2006-09-28 23:14:56 +000085
mbligha5630a52008-09-03 22:09:50 +000086 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"