Project

General

Profile

Distribuovaný test (test č. 4)

1 Cíl testu

Cílem tohoto testu bylo zjistit potíže v komunikaci klient-server při zátěži a nalezení prípadného uzkého hrdla serveru.

2 Popis testu

Ve dnech 9.2.2012 až 12.2.2012 proběhl distribuovaný test Warden serveru, kterého se zúčastnilo 9 z plánovaných 11 strojů. Na každém z nich běželi dva testovací klienti s nastavenou smyčkou 100 000 událostí, které nepřetržitě chrlili na server. V průběhu testu došlo k výpadkům některých zapojených klientů. Opět se podařilo zprovoznit stroj au2 a ir. Další se však již zprovoznit nepodařilo a testu se pak ne již neúčastnili (au1, holly, queeg).

Pro výpočet aritmetického průměru a směrodatné odchylky v tomto testu byl použit perlovský modul Statistics::Basic.

3 Stručný přehled testu

Jako funkční jsou uvažovány stroje, které odeslaly na server v průběhu testu alespoň jednu událost. Doba běhu klientů byla počítána pouze u těch klientů, kteří odeslali bez přerušení všech 100 000 událostí. Stroje ir a office2 nebyly do výpočtu doby běhu zahrnuty protože u nich došlo k chybě a odesílání pokračovalo neustále až do doby, kdy bylo jejich odesílání na koneci testu násilně ukončeno. Doba jejich běhu se tedy rovná délce trvání testu.

Počet klientů na stroji Počet strojů Počet událostí/klient Doba běhu Využití swap RAM po dobu běhu testu CPU po dobu běhu testu Doba běhu klientů na strojích
2 plánováno 11
funčních 9
100 000 2012-02-09T13:30:00 - 2012-02-12T19:46:45
(4 697 minut)
0 po 100% času
0,3% po 98% času
------------
Aritm. průměr: 0,3%
Směrodatná odch.: 0,01%
4% po 63% času
5% po 34% času
------------
Aritm průměr: 4,4%
Směrodatná odch.: 1,06%
enta3: 4 370 minut
nfsen-devel: 4 444 minut
buldog: 2 570 minut
(ir: 4 697 minut)
(office2: 4 697 minut)

4 Stroje zapojené do testu

Do porovnání jsou zahrnuty stroje, které odeslaly na server v průběhu testu alespoň jednu událost.

Stroj au1 au2 buldog enta3 holly ir nfsen-devel office2 queeg
Distribuce openSUSE 11.3 (i586) openSUSE 11.4 (i586) Ubuntu 11.10 CentOS release 5.7 (Final) Debian GNU/Linux 6.0.2 (squeeze) Debian GNU/Linux 6.0.4 (squeeze) CentOS release 5.7 (Final) Debian GNU/Linux 5.0.9 (lenny) Debian GNU/Linux 6.0.2 (squeeze)
Jádro 2.6.34.10-0.6-pae 2.6.37.6-0.11-desktop 2.6.38-11-generic 2.6.18-274.17.1.el5.centos.plus 2.6.32-5-686 2.6.32-5-amd64 2.6.18-274.17.1.el5 2.6.26-2-686-bigmem 2.6.32-5-686
CPU Xeon X3370 (4 jádra, 3GHz) Xeon X3350 (4 jádra, 2.66MHz) Quad Q9550 (4 jádra, 2.83MHz) Xeon X5130 (2 jádra, 2GHz) Xeon 3.40GHz Xeon X5365 (4 jádra, 3GHz) Xeon X3353 2x Xeon X5365 (4 jádra, 3GHz) Pentium III (1 jádro, 1GHz)
RAM 8GiB 4GiB 4GiB 4GiB 1GiB 4GiB 1GiB 8GiB 1GiB

5 Počet odeslaných událostí za sekundu u každého klienta

Do tabulky jsou zahrnuti jen klienti, kteří dokončili bez vážnějších výpadků test.
Klient au2 kl. 1 au2 kl. 2 buldog kl. 1 buldog kl. 2 enta3 kl. 1 enta3 kl. 2 nfsen-devel kl. 1 nfsen-devel kl. 2 office2 kl. 1 office2 kl. 2
Aritmetický průměr (událostí/sec.) 0,39 0,39 0,65 0,64 0,37 0,38 0,38 0,38 0,83 0,83
Směrodatná odchylka (událostí/sec.) 1,01 1,01 1,93 1,9 1 1 1,01 1 1,67 1,67

6 Počet odeslaných událostí za sekundu celkem

Hodnoty vyjadřují součet všech odeslaných událostí ze všech klientů ve stejnou vteřinu běhu testu. Data byla získána ze všech dostupných logů. Vypočtený aritmetický průměr je v tomto případě 4,5 události a směrodatná odchylka je 5,33 události. Počty událostí ovšem vykazují zajímavou pravidelnost, která je patrná v přiložené tabulce.

První dva sloupce jsou získány z počátku běhu testu (head -n 20). Další dva zhruba z jedné (head -n 100 000 | tail -n 20) a dvou třetin běhu (head -n 200 000 | tail -n 20). Poslední dvojice sloupců je získána z konce testu (tail -n 20).

head -n 20 head -n 100 000 tail -n 20 head -n 200 000 tail -n 20 tail -n 20
unix time udalostí/sec. unix time udalostí/sec. unix time udalostí/sec. unix time udalostí/sec.
1328794201 16 1328894181 11 1328994181 2 1329075986 0
1328794202 3 1328894182 1 1328994182 11 1329075987 12
1328794203 0 1328894183 0 1328994183 0 1329075988 0
1328794204 13 1328894184 10 1328994184 1 1329075989 0
1328794205 4 1328894185 1 1328994185 12 1329075990 12
1328794206 0 1328894186 3 1328994186 0 1329075991 0
1328794207 6 1328894187 13 1328994187 0 1329075992 0
1328794208 11 1328894188 0 1328994188 13 1329075993 10
1328794209 0 1328894189 0 1328994189 0 1329075994 2
1328794210 3 1328894190 12 1328994190 0 1329075995 0
1328794211 13 1328894191 0 1328994191 13 1329075996 9
1328794212 0 1328894192 0 1328994192 0 1329075997 3
1328794213 0 1328894193 10 1328994193 0 1329075998 0
1328794214 15 1328894194 0 1328994194 13 1329075999 0
1328794215 0 1328894195 4 1328994195 0 1329076000 12
1328794216 0 1328894196 13 1328994196 0 1329076001 0
1328794217 17 1328894197 0 1328994197 12 1329076002 0
1328794218 0 1328894198 0 1328994198 0 1329076003 0
1328794219 0 1328894199 12 1328994199 0 1329076004 0
1328794220 16 1328894200 1 1328994200 12 1329076005 16

7 Databáze

V této sekci jsou uvedena data zjištěná z databáze Warden serveru. Konkrétně se jedná o tabulku events s událostmi přijatými od klientů v průbehu testu.

Při prohlídce databázové tabulky po ukončení testu byly zjištěny rozdíly v tabulce mezi časy "detected" a "received". Tyto hodnoty by měly být v ideélní případě shodné, protože vyjadřují dobu zpracování události od klienta serverem. Čas "detected", který je zapsán do těla události a časem "received", který je zapsán v DB při doručení události a také je zapsán v logu klienta (print po volání "WardenClientSend::saveNewEvent"). Čas v DB u "received" a v logu klienta je shodný. Aritmetický průměr této hodnoty je 2,19 vteřiny a sm. odchylka je 3,83 vteřiny. Data nejeví na první pohled žádnou pravidelnost jako v předchozím případě.

8 Závěr

V průběhu testu byly zjištěny dva zásadní poznatky, které mohou mít vliv na implementaci Wardenu a hledání předpokládaného úzkého hrdla. Prvním poznatkem je, dle mého, zjištěná neobvyklá pravidelnost v celkovém počtu zpracovaných událostí za vteřinu (bod 6).

Druhým poznatkem je zjištěný rozdíl v databázi mezi časem "detected" v těle přijaté události a časem "received" zaznamenaném v databázi při jejím přijetí. Tento rozdíl popisuje dobu potřebnou pro úspěšné dokončení volání "WardenClientSend::saveNewEvent" a pohybuje se nejčastěji v rozmezí 0-9 vteřin. Nebyla zjištěna prokazatelná závislost mezi oběma poznatky (bod 6 a bod 7).