We have implemented the full Trickles protocol under Linux, and several sample applications. These applications include a static web server, and a watermarking server that serves JPEG images overlaid with a custom text overlay for each client. At the network layer, we have demonstrated transparent failover, load balancing, and anycast,


We have demonstrated that Trickles provides improved scalability, comparable performance to TCP, while being TCP-friendly and requiring reasonable processing overhead relative to TCP.

Server utilization and aggregate throughput

In this experiment, a variable number of clients connects to a single server over a 100Mb link.

Trickles requires a constant amount of memory, irrespective of the number of simultaneous clients, whereas TCP requires an ever-increasing amount of memory. Trickles memory overhead is considerably lower, reducing vulnerability to denial of service attacks.

server side memory utilization

The graph below shows the aggregate throughput achieved in the same experiment. Trickles achieves roughly comparable performance to TCP, with the performance difference largely due to the continuation passing overhead.

aggregate throughput

Interaction of TCP and Trickles

We measured the performance of a "foreground" TCP or Trickles connection as it competed with a variable number of TCP "background" flows across a 100Mb bottleneck. TCP and Trickles achieved similar performance at every datapoint. Thus, we expect Trickles to have a similar impact on existing flows as TCP.

TCP friendliness

PlanetLab performance

We measured the performance of Trickles on PlanetLab using packet mirrors installed on the PlanetLab nodes. Each bar represents the average of all PlanetLab nodes that are within a 50ms bucket, sorted by latency from Cornell.


Transparent failover

The graph below shows the trace of a session in which a server failover is simulated by killing and restarting the server process. The Trickles client and server failed over without modification, while the TCP client required modifications to detect the server failure via socket errors, and re-established the connection after detecting the failure.

The Trickles client recovers from the failover at time 10 much more quickly than TCP.