blob: fa250e7755ee32fbd659f0ea5c22ed992a8c9ef0 [file] [log] [blame]
Guido van Rossumf06ee5f1996-11-27 19:52:01 +00001#! /usr/bin/env python
Guido van Rossum22825e81991-07-01 18:32:32 +00002
3# Test network throughput.
4#
5# Usage:
6# 1) on host_A: throughput -s [port] # start a server
7# 2) on host_B: throughput -c count host_A [port] # start a client
8#
9# The server will service multiple clients until it is killed.
10#
11# The client performs one transfer of count*BUFSIZE bytes and
12# measures the time it takes (roundtrip!).
13
14
15import sys, time
16from socket import *
17
18MY_PORT = 50000 + 42
19
20BUFSIZE = 1024
21
22
23def main():
24 if len(sys.argv) < 2:
25 usage()
Guido van Rossumf628a981992-05-19 13:51:20 +000026 if sys.argv[1] == '-s':
Guido van Rossum22825e81991-07-01 18:32:32 +000027 server()
Guido van Rossumf628a981992-05-19 13:51:20 +000028 elif sys.argv[1] == '-c':
Guido van Rossum22825e81991-07-01 18:32:32 +000029 client()
30 else:
31 usage()
32
33
34def usage():
35 sys.stdout = sys.stderr
36 print 'Usage: (on host_A) throughput -s [port]'
37 print 'and then: (on host_B) throughput -c count host_A [port]'
38 sys.exit(2)
39
40
41def server():
42 if len(sys.argv) > 2:
43 port = eval(sys.argv[2])
44 else:
45 port = MY_PORT
46 s = socket(AF_INET, SOCK_STREAM)
Jeremy Hyltona8d30d52000-08-25 15:38:41 +000047 s.bind(('', port))
Guido van Rossumb5f27141994-02-28 09:31:19 +000048 s.listen(1)
Guido van Rossum22825e81991-07-01 18:32:32 +000049 print 'Server ready...'
50 while 1:
51 conn, (host, remoteport) = s.accept()
52 while 1:
53 data = conn.recv(BUFSIZE)
54 if not data:
55 break
56 del data
57 conn.send('OK\n')
58 conn.close()
59 print 'Done with', host, 'port', remoteport
60
61
62def client():
63 if len(sys.argv) < 4:
64 usage()
65 count = int(eval(sys.argv[2]))
66 host = sys.argv[3]
67 if len(sys.argv) > 4:
68 port = eval(sys.argv[4])
69 else:
70 port = MY_PORT
71 testdata = 'x' * (BUFSIZE-1) + '\n'
Guido van Rossumb5f27141994-02-28 09:31:19 +000072 t1 = time.time()
Guido van Rossum22825e81991-07-01 18:32:32 +000073 s = socket(AF_INET, SOCK_STREAM)
Guido van Rossumb5f27141994-02-28 09:31:19 +000074 t2 = time.time()
Jeremy Hyltona8d30d52000-08-25 15:38:41 +000075 s.connect((host, port))
Guido van Rossumb5f27141994-02-28 09:31:19 +000076 t3 = time.time()
Guido van Rossum22825e81991-07-01 18:32:32 +000077 i = 0
78 while i < count:
79 i = i+1
80 s.send(testdata)
81 s.shutdown(1) # Send EOF
Guido van Rossumb5f27141994-02-28 09:31:19 +000082 t4 = time.time()
Guido van Rossum22825e81991-07-01 18:32:32 +000083 data = s.recv(BUFSIZE)
Guido van Rossumb5f27141994-02-28 09:31:19 +000084 t5 = time.time()
Guido van Rossum22825e81991-07-01 18:32:32 +000085 print data
86 print 'Raw timers:', t1, t2, t3, t4, t5
87 print 'Intervals:', t2-t1, t3-t2, t4-t3, t5-t4
88 print 'Total:', t5-t1
Guido van Rossumb5f27141994-02-28 09:31:19 +000089 print 'Throughput:', round((BUFSIZE*count*0.001) / (t5-t1), 3),
Guido van Rossum22825e81991-07-01 18:32:32 +000090 print 'K/sec.'
91
92
93main()