Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

118 lines (73 sloc) 3.479 kb
OTP Supervision tree:
====================
The application is now split in two (see tsung-inside.png for an overview):
** a single controller (tsung_controller)
* ts_config_server (gen_server). Configuration server. Session's
definitions are kept by the config server.
* ts_mon (gen_server). Each client send reports of stats to this
server. Several types of messages are handled by ts_mon.
* ts_os_mon (gen_server). Use to monitor remote node activity (cpu,
memory, network traffic). Currently, use an erlang agent on remote nodes.
* ts_timer (used by ts_client when ack is global) (gen_fsm)
servers used to construct messages:
* ts_msg_server (gen_server)
* ts_user_server (gen_server) used by jabber_* for unicity of users id
** several clients (tsung) Several nodes can be used simultaneously
This application is simpler:
* ts_launcher (gen_fsm) launch simulated users.
* ts_session_cache (gen_server) cache the sessions's definition (ask
the config_server if it's not yet in the cache)
* 1 process per simultated client (ts_client), under
the supervision of ts_clients_sup ( using simple_one_for_one )
Main modules:
============
1/ ts_launcher. the master process that spawns other simulated clients:
1.1/ client processes: at each simulated client correspond 1 erlang
process (ts_client)
1.2/ monitoring process (ts_mon)
2/ statistical module (ts_stats)
3/ protocol-specific modules (ts_jabber and ts_http, for
example).
tsung use different types of acknoledgements to determine
when a the response of a request is over. For each requests, 4
options are possible:
* parse -> the receiving process parse the response from the
server dans can warn the sending process when the response is
finish (function parse/2). This is used for HTTP.
* no_ack: as soon as the request has been sent, the next one is
executed (it can be a thinktime)
* local: the request is acknoledge once a packet is received
* global: the request is acknoledge once all clients has
received an acknoledgement. This has been introduced for
Jabber: with that, you can set that users starts talking when
everyone is connected.
How to add a new protocol, or extend an existing one:
====================================================
To add a new protocol, you have to create a module that implement and
exports:
-export([init_dynparams/0,
add_dynparams/4,
get_message/1,
session_defaults/0,
parse/2,
parse_config/2,
new_session/0]).
There is a template file is doc/ts_template.erl
References:
==========
- Erlang
http://www.erlang.org/
Design principles:
http://www.erlang.org/doc/r7b/doc/design_principles/part_frame.html
- Jabber
http://docs.jabber.org/general/html/protocol.html
- Stochastics models:
For more details on stochastics models and application to Web
workload generators, have a look at:
Nicolas Niclausse. Modélisation, analyse de performance et
dimensionnement du World Wide Web. Thèse de Doctorat (PhD), Université
de Nice - Sophia Antipolis, Juin 1999.
http://www-sop.inria.fr/mistral/personnel/Nicolas.Niclausse/these.html
Z. Liu, N. Niclausse, C. Jalpa-Villanueva & S. Barbier. Traffic
Model and Performance Evaluation of Web Servers Rapport de
recherche INRIA, RR-3840 (http://www.inria.fr/rrrt/rr-3840.html)
Jump to Line
Something went wrong with that request. Please try again.