VoIP and Hacking | Consulenza Documentazione

Stress Tests con Asterisk

by admin on Mar.02, 2009, under Asterisk, Linux, Telefonia, VoIP

Ho voluto effettuare una serie di stress tests con Asterisk allo scopo di ottenere informazioni utili sulle performances ottenibili in certe circostanze e con varie tra le possibili tecnologie che esso mette a disposizione.

In particolare l’obiettivo dello stress test era costituito dall’ottenimento del maggior numero possibile di channels IAX e calls attive contemporaneamente.

Inizialmente l’intenzione era quella di utilizzare Astertest (www.astertest.com), un piccolo tool che gira sotto Windows e interagisce via porta TCP 5038 con due server Asterisk distinti, raccogliendo le informazioni che le servono per graficizzare in tempo reale i risultati tramite due applicazioni Asterisk che rendono necessaria la ricompilazione di quest’ultimo.

Le due applicazioni in questione si chiamano CPUinfo e ServerLoad, la prima utilizza /proc/cpuinfo mentre l’altra rileva ogni secondo le percentuali relative all’impegno della CPU in kernel mode, user mode. e idletime.

La prima delle due macchine funziona (dovrebbe) da terminatore per le chiamate, e la seconda essere quindi la vera piattaforma di test.

Il fatto è che la generazione delle chiamate non funziona, e secondo me non esiste neppure, mentre la rappresentazione grafica è invece operativa. Ma allora tanto vale fare tutto a mano e trattare poi i dati con un buon foglio di calcolo.

A questo punto ho mantenuto comunque la configurazione del testbed (eliminando però la macchina Windows, che, tanto per cambiare, non sarebbe servita a niente).

Descrizione del testbed

Avendo mantenuto lo schema dei due server Asterisk ho utilizzato come partner un Laptop con CPU Pentium4 a 2.8GHz, 256MB di RAM. Come software di base Slackware 9.1 con kernel 2.6.11.3 e Asterisk 1.0.7, mentre, come macchina di test un Tower con CPU AMD64, 256 MB di RAM. Anche in questo caso la distribuzione utilizzata era la Slackware 9.1, ma con Kernel 2.6.12.5 e Asterisk CVS-HEAD del 12/8/2005.

Le due piattaforme erano ovviamente comunicanti via TCP/IP tramite link Ethernet diretto FullDuplex 100Mb (cross cable). Alla prima è stato assegnato l’indirizzo IP 10.0.0.2, mentre alla seconda l’indirizzo IP 10.0.0.1

Questa la configurazione software delle due macchine:

Macchina target (laptop)

  • /etc/asterisk/iax.conf

    [general]
    …..
    allow=all
    jitterbuffer=yes
    dropcount=2
    …..
    [guest]
    type=user
    trunk=yes
    context=terminator

  • /etc/asterisk/extensions.conf
    …..
    [terminator]
    exten => s,1,Answer
    exten => s,2,Wait(120)
    exten => s,3,Hangup

    ;test altenativo
    ;exten => s,1,Answer
    ;exten => s,2,Echo(0)
    ;exten => s,3,Hangup

Asterisk veniva lanciato dopo il caricamento dei moduli zaptel e ztdummy (essendo il laptop sprovvisto di hardware Digium in funzione di Timer).

Macchina di test (Tower)

  • /etc/asterisk/iax.conf

    [testgsm]
    type=friend
    host=10.0.0.2
    trunk=yes
    context=astertest
    disallow=all
    allow=gsm

    [testulaw]
    type=friend
    host=10.0.0.2
    trunk=yes
    context=astertest
    disallow=all
    allow=ulaw

    [testalaw]
    type=friend
    host=10.0.0.2
    trunk=yes
    context=astertest
    disallow=all
    allow=alaw

  • /etc/asterisk/extensions.conf
    …..
    [astertest]
    exten => test01,1,Answer();
    exten => test01,2,Wait(10000);
    exten => test01,3,Hangup();

    exten => test02gsm,1,Answer();
    exten => test02gsm,2,Playback(ast-test-gsm);
    exten => test02gsm,3,Hangup();

    exten => test02ulaw,1,Answer();
    exten => test02ulaw,2,Playback(ast-test-ul);
    exten => test02ulaw,3,Hangup();

    exten => test02alaw,1,Answer();
    exten => test02alaw,2,Playback(ast-test-al);
    exten => test02alaw,3,Hangup();

  • E’ stato raddoppiato il numero massimo di open files con:

    # ulimit -n 4096 (dal valore iniziale 2048)

  • E’ stato ricompilato Asterisk dopo aver modificato la direttiva:

    #define MAX_TRUNKDATA 640 * 200

    (presente in $ASTERISK_SOURCE/channels/chan_iax2.c) in

    #define MAX_TRUNKDATA 640 * 800

A questo punto vi era bisogno di un generatore di chiamate.

L’approccio utilizzato è consistito nel servirsi di un semplice script bash shell per archiviare il numero voluto di call files in /var/spool/asterisk/outgoing/.

Lo script può essere qualcosa di simile al seguente:

declare -i idx
idx=1
while [ $idx != $1 ]
do
cp $2 /var/spool/asterisk/outgoing/$idx.call;
idx=$idx+1
done

Il secondo argomento di lancio dello script ($2) corrisponde al pathname di un call file il cui contenuto può essere il seguente:

Channel:IAX2/testulaw
Maxretries:0
Context:astertest
Extension:test02ulaw

Utilizzando in modo appropriato le combinazioni del context astertest sia sulla macchina source che su quella target, e modificando di conseguenza il contenuto del call file si può ottenere una serie di test. Se poi si vogliono utilizzare altri codecs rispetto a gsm e ai due G711, basta convertire i file audio e definire nuovi friends iax e nuove extensions.

tipo:

[testilbc]
type=friend
host=10.0.0.2
context=astertest
disallow=all

allow=iLBC

Risultati dei tests

Vengono qui riportati solamente i risultati dei tests relativi all’attivazione di channels IAX in trunking con codec gsm, e con codec uLaw previa decodifica di un file sonoro in formato gsm. Si sono ottenuti, per la durata stabilita di due minuti, rispettivamente:

  • 780 channels attivi
  • 330 channels attivi

I due grafici di seguito rappresentano l’impegno della CPU (in user e system mode) durante lo svolgimento dei due tests in considerazione.

Send post as PDF to PDF | PDF Creator | PDF Converter
:

Comments are closed.

Cerchi qualcosa in particolare?

Usa il form qui sotto per cercare nel sito:

Blogroll!

Alcuni links...

Archives

Tutte le entries, in ordine cronologio...