This is the home of SSSim, the Simple & Scalable
Simulator for P2P scheduling algorithms.
Actually, SSSim is not a real event-based simulator, but a tool for
comparing the schedules generated by different chunk/peer selection
algorithms (called "chunk scheduling algorithms" and "peer scheduling
algorithms" in SSSim). To simplify such comparisons and to make the
schedules easier to predict/analyse, SSSim is based on some simplifying
SSSim can generate a trace showing the chunks exchanged between peers at
each time unit.
More details about SSSim can be found in a
- Get the first release (v0.1)
- A second version has been released,
including the new Dl/ELp scheduling algorithm
Compiling and Using:
To compile the simulator, just type "make" and a "sssim" executable
should be built. To build the simulator with different scheduling
algorithms, you can use the "PEER_SCHED" and "CHUNK_SCHED" variables:
for example, "make CHUNK_SCHED=latest_blind_chunk". To remove the
playout delay (and limited-size chunk buffer), compile with the
"NO_BUFF" variable defined: for example, "make NO_BUFF=YesPlease".
The program accepts a "-n " option to set the number of peers (100
is the default), while the number of chunks to send can be specified using
the "-c " option.
The complete syntax for the sssim program can be asked using the "-h" (help)
command line option.
Assumptions and Constraints:
- All peers are synchronised
- All the peers have the same output bandwidth, which is equal to the
stream bitrate. Times are normalised dividing everything by the time
needed to send a chunk (hence, the stream bitrate and the output
bandwidths are equal to 1).
- All the peers have a very large (modeled as infinite) input bandwidth
- All the peers have the possibility to know the internal state of all
the other peers in the system (the scheduling algorithms can be
How it Works:
Based on the assumptions highlighted above, at every time unit:
- Each peer receives all the chunks that have been sent to it at
the previos time unit
- The source selects a target peer (peer scheduling) and sends a
new chunk to it
- Each peer selects a chunk C (chunk scheduling) and target peer
P (peer scheduling) and sends C to P.
Note that the peer can select first the chunk and then the peer or
vice-versa (or can select chunk and peer simultaneously, but these
algorithms have not been tested yet).