Cíle testování

Naším cílem bylo, otestovat schopnost odbavovat hovory na Raspberry PI a zjístit, kde jsou jeho hardwarové limity. Testovali jsme maximální počet současných hovorů a sledovali jsme vytížení procesoru, paměti a celkové zatížení systému. Testy jsme prováděli se třemi různými kodeky a na dvou verzích Raspberry PI.

Použité vybavení a schéma zapojení

Při testování byla použita verze Asterisku 14.1.2 z 10.11.2016. Verze SIPp 3.5.1 z března roku 2016. UAC a UAS běželi na Lubuntu 15.10.

Raspberry PI v3 s hardwarovými parametry:

  • 64bit ARMv7 1,2 GHz
  • 1 GB RAM
  • OS Raspbian Jessie z 23.9.2016

Raspberry PI v1 s hardwarovými parametry:

  • 32bit ARMv6 700 MHz
  • 512 MB RAM
  • OS Raspbian Jessie z 23.9.2016

Schéma zapojení

schema.png, 8,0kB

Instalace Asterisku

Nejdříve je potřeba doinstalovat prerekvizity:

pi@raspberrypi:~ $ sudo apt-get install libncurses5-dev, uuid-dev, libjansson-dev, libxml2-dev, sqlite3, libsqlite3-dev

Stáhneme aktuální verzi Asterisku:

pi@raspberrypi:~ $ wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-14-current.tar.gz

Rozbalíme:

pi@raspberrypi:~ $ tar xvf asterisk-14-current.tar.gz

Zvolíme adresář Asterisk-<aktuální verze>

pi@raspberrypi:~ $ cd asterisk-14.1.2

Před kompilací je potřeba zkontrolovat všechny závislosti (zda jsou nainstalovány všechny potřebné prerekvizity):

pi@raspberrypi:~ $ sudo ./configure

Pokud je vše v pořádku je potřeba Asterisk zkompilovat a nainstalovat:

pi@raspberrypi:~ $ sudo make menuselect
pi@raspberrypi:~ $sudo make
pi@raspberrypi:~ $sudo make install
pi@raspberrypi:~ $sudo make samples


Konfigurace Asterisku

Konfigurační soubor SIPovských uživatelských účtů Asterisku je umístěn v: /etc/asterisk/sip.conf

[general]
port=5060
bindaddr=0.0.0.0
transport=udp

[10000]
type=friend
context=test
host=192.168.1.25
secret=uac
canreinvite=no
disallow=all
allow=all
qualify=no

.
.
.

[50000]
type=friend
context=test
host=192.168.1.26
secret=uas
canreinvite=no
disallow=all
allow=all
qualify=no

Dále je potřeba nastavit „dial plan“ v souboru extensions.conf, který se nachází v /etc/asterisk/extensions.conf

[test]
exten => _[1-9]XXXX,1,Dial(SIP/${EXTEN},25)

Instalace a konfigurace SIPp

Nejdříve je potřeba doinstalovat prerekvizity:

pi@raspberrypi:~ $ sudo apt-get install ncurses-dev openssl g++ gcc libssl-dev libpcap-dev libnet1-dev

Stáhneme aktuální verzi SIPp:

pi@raspberrypi:~ $ wget https://github.com/SIPp/sipp/releases/download/v3.5.1/sipp-3.5.1.tar.gz

Rozbalíme:

pi@raspberrypi:~ $ tar xvf sipp-3.5.1.tar.gz

Zvolíme adresář SIPp-<aktuální verze>

pi@raspberrypi:~ $ cd sipp-3.5.1

Před kompilací je potřeba zkontrolovat všechny závislosti (zda jsou nainstalovány všechny potřebné prerekvizity):

pi@raspberrypi:~ $ sudo ./configure --with-pcap --with-openssl

pi@raspberrypi:~ $sudo make
pi@raspberrypi:~ $sudo make install


V přiložených schématech se mění parametr RTP/AVP <#> a parametr rtpmap dle tabulky níže.

KodekRTP/AVPrtpmap
G.711 a-law8PCMA
G.72918G729
GSM3GSM

XML schémata pro stranu UAC a UAS:

Hlasové vzorky pro RTP stream:

Sekvenční soubor proměnných:

Spuštění klienta UAC

Spustíme příkazem:

lukas@mujpc:~Desktop/sipp-3.5.1$ sudo ./sipp -sf uac_asterisk.xml -i 192.168.1.25 -p 5060 -inf asterisk.csv -m 3600 -r 4 -mp 7000 192.168.1.19

ParametrHodnotaPopis
-sfuac_asterisk.xmlScenario file
-i192.168.1.25IP adresa klienta
-p5060Port pro naslouchání klienta
-infasterisk.csvVstupní hodnoty pro testování
-m3600Maximální počet uskutečněných hovorů
-r4Počet vygenerovaných hovorů za sekundu
-mp7000Zdrojový port pro RTP

Tímto příkazem, SIPp v modu UAC s adresou 192.168.1.25 na portu 5060 se vstupními hodnotami ze souboru asterisk.csv generuje každou sekundu 4 hovory, do celkového počtu 3600 na PBX s adresou 192.168.1.19.

Spuštění serveru UAS

Spustíme příkazem:

martin@mujpc: ~Desktop/sipp-3.5.1$ sudo ./sipp -sf uas_asterisk.xml -i 192.168.1.26 -p 5060 -rtp_echo

ParametrHodnotaPopis
-sfuas_asterisk.xmlScenario file
-i192.168.1.26IP adresa serveru
-p5060Port pro naslouochání serveru
-rtp_echo-Odpověď na RTP zprávy

Tímto příkazem, SIPp v modu UAS s adresou 192.168.1.26 na portu 5060, začne generovat odpovědi na RTP zprávy.

Naměřené hodnoty pro RPI v3

KodekPrůměrné vytížení CPUPrůměrné vytížení RAMLoad [1;5;15]Počet současných hovorůPočet neůspěšných hovorůHovorů celkem
G711 a-law38%1340,10; 0,27; 0,25300 (0 %)900
52%1390,41; 0,42; 0,40601 (0 %)1800
78%1462,20; 1,72; 1,0590204 (8 %)2700
93%1631,77; 2,27; 1,321201293 (36 %)3600
KodekPrůměrné vytížení CPUPrůměrné vytížení RAMLoad [1;5;15]Počet současných hovorůPočet neůspěšných hovorůHovorů celkem
G72919%1310,14; 0,22; 0,16300 (0 %)900
28%1310,29; 0,37; 0,22600 (0 %)1800
37%1340,40; 0,46; 0,32900 (0 %)2700
49%1400,64; 0,57; 0,361200 (0 %)3600
58%1490,78; 0,80; 0,531500 (0 %)4500
75%1620,98; 0,97; 0,701802 (0 %)5400
91%1801,29 1,36; 0,96210147 (2 %)6300
99%1921,78; 1,53; 1,20240729 (10 %)7200
KodekPrůměrné vytížení CPUPrůměrné vytížení RAMLoad [1;5;15]Počet současných hovorůPočet neůspěšných hovorůHovorů celkem
GSM37%1300,34; 0,37; 0,26300 (0 %)900
51%1360,46; 0,53; 0,45600 (0 %)1800
73%1430,78; 1,32; 0,7790107 (4 %)2700
85%1530,83; 1,20; 0,81120983 (27 %)3600

Naměřené hodnoty pro RPI v1

KodekPrůměrné vytížení CPUPrůměrné vytížení RAMLoad [1;5;15]Počet současných hovorůPočet neůspěšných hovorůHovorů celkem
G711 a-law78%1334,31; 5,67; 5,60300 (0 %)900
90%1369,41; 9,38; 8,9360730 (41 %)1800
KodekPrůměrné vytížení CPUPrůměrné vytížení RAMLoad [1;5;15]Počet současných hovorůPočet neůspěšných hovorůHovorů celkem
G72968%13110,30; 9,64; 3,32300 (0 %)900
90%13210,80; 11,34; 11,2060597 (33 %)1800
KodekPrůměrné vytížení CPUPrůměrné vytížení RAMLoad [1;5;15]Počet současných hovorůPočet neůspěšných hovorůHovorů celkem
GSM91%13026,05; 22,78; 14,8930229 (25 %)900

Grafy

Závislost zatížení CPU na počtu hovorů

zavislostCPU.png, 34kB

Závislost neúspěšných hovorů na počtu současných hovorů

zavislostCPU.png, 34kB

Pro porovnání RPI v1

Závislost zatížení CPU na počtu hovorů

zavislostCPU.png, 34kB

Závislost neúspěšných hovorů na počtu současných hovorů

zavislostCPU.png, 34kB

Děkuji za pozornost