]> git.proxmox.com Git - mirror_edk2.git/blob - AppPkg/Applications/Python/Python-2.7.2/Demo/sockets/throughput.py
6ac76af3979bf77c81187061b830606291930db2
[mirror_edk2.git] / AppPkg / Applications / Python / Python-2.7.2 / Demo / sockets / throughput.py
1 #! /usr/bin/env python
2
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
15 import sys, time
16 from socket import *
17
18 MY_PORT = 50000 + 42
19
20 BUFSIZE = 1024
21
22
23 def main():
24 if len(sys.argv) < 2:
25 usage()
26 if sys.argv[1] == '-s':
27 server()
28 elif sys.argv[1] == '-c':
29 client()
30 else:
31 usage()
32
33
34 def 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
41 def 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)
47 s.bind(('', port))
48 s.listen(1)
49 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
62 def 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'
72 t1 = time.time()
73 s = socket(AF_INET, SOCK_STREAM)
74 t2 = time.time()
75 s.connect((host, port))
76 t3 = time.time()
77 i = 0
78 while i < count:
79 i = i+1
80 s.send(testdata)
81 s.shutdown(1) # Send EOF
82 t4 = time.time()
83 data = s.recv(BUFSIZE)
84 t5 = time.time()
85 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
89 print 'Throughput:', round((BUFSIZE*count*0.001) / (t5-t1), 3),
90 print 'K/sec.'
91
92
93 main()