Official TCP Full speed benchmark

Dependencies:   PicoTCP lpc1768-picotcp-eth mbed-rtos mbed

This project represents a the official TCP Full speed Benchmark for the PicoTCP library.

The mbed board is sending and receiving one Megabyte from/to the other side and we measure how fast it does that.

The result:
TX+RX Throughput: 2097152 bytes in 1 seconds (12.410)Mbits/s

The python script used (which you should rename it to PicoTCP_Official_TCP_Full_Benchmark.py)

#!/usr/bin/python
import sys, socket
import random, string
import select
from time import time
ECHO_SERVER_ADDRESS = "192.168.100.12"
ECHO_SERVER_PORT = 7
N_PACKETS = 1024
LEN_PACKET = 1024

TOT_BITS = (LEN_PACKET * N_PACKETS * 8) * 2. # TX bits + RX bits
PACKET = ''.join(random.choice(string.ascii_uppercase+string.digits) for _ in range(LEN_PACKET))
MEGA = 1024 * 1024.
UPDATE_STEP = (N_PACKETS/20) # Make the update step such as one step = 5%
UPDATE_R_STEP = (N_PACKETS/100) #Make the update step such as one step = 1%
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT))
start = time()
rx_total = 0
tx_total = 0
data = ''
i = 0
lp = []
p = select.poll()
while(True): # keeping this in for robustness testing, when the test will run for days
	print "Started echoing data...."
	for i in range(N_PACKETS):
		if (i % UPDATE_STEP) == 0: print "%.2f%%" % (float(i)/float(N_PACKETS) * 100.)
		s.sendall(PACKET)
		data = s.recv(LEN_PACKET)
		if (len(data) != LEN_PACKET):
			print "Error echoing !"
			sys.exit(1)

	print "Test was finished!"
	break;	

t = time() - start
s.close()
print "TX+RX Throughput: %d bytes in %d seconds (%.3f)Mbits/s" % (TOT_BITS / 8, t, ((TOT_BITS / t) / MEGA))

This test is based on the following libraries

Import librarylpc1768-picotcp-eth

A PicoTCP driver for the lpc1768 mbed board

Import libraryPicoTCP

Free (GPLv2) TCP/IP stack developed by TASS Belgium

Import librarymbed-rtos

Official mbed Real Time Operating System based on the RTX implementation of the CMSIS-RTOS API open standard.

Files at this revision

API Documentation at this revision

Comitter:
tass
Date:
Mon Oct 07 07:06:11 2013 +0000
Parent:
0:a90d7f1c17bc
Commit message:
Update to the latest picotcp lib.

Changed in this revision

PicoTCP.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r a90d7f1c17bc -r 1996535d99e9 PicoTCP.lib
--- a/PicoTCP.lib	Wed Oct 02 08:14:42 2013 +0000
+++ b/PicoTCP.lib	Mon Oct 07 07:06:11 2013 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/daniele/code/PicoTCP/#6764a53bb6e6
+http://mbed.org/users/daniele/code/PicoTCP/#0e827d0d8017
diff -r a90d7f1c17bc -r 1996535d99e9 main.cpp
--- a/main.cpp	Wed Oct 02 08:14:42 2013 +0000
+++ b/main.cpp	Mon Oct 07 07:06:11 2013 +0000
@@ -30,8 +30,7 @@
         
         TCPSocketConnection client;
         server.accept(client);
-        client.set_blocking(false, 1500); // Timeout after (1.5)s
-        
+        client.set_blocking(true, 1500); // Timeout after (1.5)s
         char buffer[BUFFER_SIZE];
         int dataSent = 0, dataReceived = 0;
         while(dataSent < BUFFER_QUANTITY)