Project

General

Profile

Hledání úzkého místa Wardenu

Stránka slouží pro zachycení informací o hledání úzkého místa v projektu Warden, které bylo zjištěno při distribuovaném testu provedeném 9.2.2012 až 12.2.2012. Zjištěn byl nepřijatelně nízký počet událostí za sekundu přijímaných Warden serverem a také efekt ukazující pravděpodobnou existenci určitého bufferu někde v systému odesílající klient -> server -> databáze událostí.

Vzhledem ke geografické roztříštěnosti osob testujících Warden, prosím, popisujte v maximální možné míře detailu a přesnosti prováděné testy (ideálně, ať jsou replikovatelné). Nedojde tak ke ztrátě informací a urychlí se vyřešení tohoto problému.

Profilování warden serveru pomocí Devel-NYTProf

Testy byly prováděny za účelem zjištění problémů v programovém kódu warden serveru pomocí jeho profilování nástrojem Devel-NYTProf, který je napsán a otestován pro Linux, Solaris, OS X a MS Win. Společnou vlastností všech testů je použití jednoho testovacího klienta s 1000 událostí proti profilovanému serveru, který sloužil jako generátor zátěže. Velikost prenasenych dat (posilaneho XML) je pro jednu udalost 1kB, v testu se tedy prenese celkem 1MB dat (1000 * 1kB), kdy pro kazdou udalost je vytvareno nove spojeni. Testy jsou rozděleny dle toho, zda byla k serveru připojena databáze, či nikoliv. Výsledky testů jsou shrnuty ve stručném závěru z Vzhledem k velikosti adresářů s výsledky testů, všechny testy po zabalení mají zhruba 200MB, jsou dostupné po vyžádání na emailech: a .

Pro testování byly použity stroje warden-dev, nfsen-devel v roli klienta i serveru a warden pouze v roli klienta.

Stroj nfsen-devel warden-dev warden
Distribuce CentOS release 5.7 (Final) Debian GNU/Linux 6.0.4 (squeeze) Debian GNU/Linux 6.0.4 (squeeze)
Jádro 2.6.18-274.17.1.el5.centos.plus Linux warden-dev 2.6.32-5-amd64 #1 SMP Tue Jun 14 09:42:28 UTC 2011 x86_64 GNU/Linux Linux warden 2.6.32-5-amd64 #1 SMP Thu Nov 3 03:41:26 UTC 2011 x86_64 GNU/Linux
CPU Xeon X5130 (2 jádra, 2GHz) 2x AMD Opteron(tm) Processor 4184 (6 jader, 2800MHz) 2x Intel(R) Xeon(R) CPU L5640 (6 jader,2.27GHz)
RAM 4GiB 32GiB 28GiB

Testy bez připojené databáze

V těchto testech byl eliminován vliv databáze na profilování serveru Warden.

Test č.1

Cíl testu

Snaha o nalezení úzkého hrdla serveru Warden. Profilování serveru na stroji warden-dev.

Stručný přehled testu

Server: warden-dev
Klient: nfsen-devel

Je profilován standardní Warden server z balíčku. Pouze byla odstraněna databáze.

Výpis z profileru

Profilování trvalo 212s. Bylo vykonáno 6002064 příkazů a 2306015 volání subrutin ve 111 zdrojových souborech. Zachyceno je prvních 15 subrutin. Podrobný výpis je dostupný v plném výpisu testu.

Calls P F Exclusive Time Inclusive Time Subroutine
1005 1 1 173s (81.4%) 173s (81.4%) IO::Socket::CORE:accept (opcode)
1004 1 1 19.2s (9.0%) 19.2s (9.0%) Net::SSLeay::accept (xsub)
6030 2 1 3.64s (1.7%) 3.64s (1.7%) Net::SSLeay::peek (xsub)
15060 1 1 996ms (0.5%) 2.60s (1.2%) SOAP::Deserializer::decode_value (recurses: max depth 4, inclusive time 8.08s)
164768 9 1 710ms (0.3%) 1.63s (0.8%) SOAP::Data::new (recurses: max depth 1, inclusive time 158ms)
15060 2 1 616ms (0.3%) 2.70s (1.3%) SOAP::Deserializer::decode_object (recurses: max depth 4, inclusive time 8.80s)
42192 7 1 408ms (0.2%) 1.06s (0.5%) SOAP::Data::name
16064 2 1 343ms (0.2%) 684ms (0.3%) SOAP::SOM::_traverse (recurses: max depth 3, inclusive time 708ms)
9040 3 1 280ms (0.1%) 1.17s (0.1%) SOAP::Serializer::encode_object (recurses: max depth 8, inclusive time 4.33s)
42176 4 1 233ms (0.1%) 308ms (0.1%) SOAP::Utils::splitlongname
13052 2 1 217ms (0.1%) 1.82s (0.9%) SOAP::SOM::_as_data (recurses: max depth 2, inclusive time 3.10s)
85370 35 1 203ms (0.1%) 221ms (0.1%) SOAP::Lite::Utils::__ANON__[SOAP/Lite/Utils.pm:22]
1004 1 1 163ms (0.1%) 414ms (0.2%) XML::Parser::Expat::ParseString (xsub)
142568 10 1 159ms (0.1%) 161ms (0.1%) SOAP::Deserializer::CORE:match (opcode)
3480 4 3 149ms (0.1%) 184ms (0.1%) Params::Validate::_validate (xsub)

pozn. P označuje počet míst, ze kterých je subrutina volána. F označuje počet souborů, ze kterých je subrutina volána.

Grafické znázornění času stráveného v subrutinách

pozn. Barvy reprezentují jednotlivé balíky.

Test č.2

Cíl testu

Otestování vlivu použitého socketu na chod serveru.

Stručný přehled testu

Server: nfsen-devel
Klient: warden-dev

V tomto testu bylo kromě odstranění databáze také nahrazeno standardní synchronní spojení na socketu (select) za asynchronní spojení pomocí modulu IO::Poll.

Výpis z profileru

Profilování trvalo 205s. Bylo vykonáno 7489619 příkazů a 2594702 volání subrutin ve 139 zdrojových souborech. Zachyceno je prvních 15 subrutin. Podrobný výpis je dostupný v plném výpisu testu.

Calls P F Exclusive Time Inclusive Time Subroutine
5303 1 1 179s (87.0%) 179s (87.0%) IO::Poll::_poll (xsub)
4000 1 1 5.21s (2.5%) 5.21s (2.5%) Net::SSLeay::accept (xsub)
15060 1 1 970ms (0.5%) 2.58s (1.3%) SOAP::Deserializer::decode_value (recurses: max depth 4, inclusive time 7.97s)
164768 9 1 713ms (0.3%) 1.63s (0.8%) SOAP::Data::new (recurses: max depth 1, inclusive time 160ms)
15060 2 1 626ms (0.3%) 2.69s (1.3%) SOAP::Deserializer::decode_object (recurses: max depth 4, inclusive time 8.69s)
42192 7 1 403ms (0.2%) 1.06s (0.5%) SOAP::Data::name
16064 2 1 351ms (0.2%) 699ms (0.3%) SOAP::SOM::_traverse (recurses: max depth 3, inclusive time 719ms)
9040 3 1 297ms (0.1%) 1.22s (0.6%) SOAP::Serializer::encode_object (recurses: max depth 8, inclusive time 4.51s)
42176 4 1 231ms (0.1%) 307ms (0.1%) SOAP::Utils::splitlongname
13052 2 1 227ms (0.1%) 1.84s (0.9%) SOAP::SOM::_as_data (recurses: max depth 2, inclusive time 3.12s)
85369 35 1 212ms (0.1%) 230ms (0.1%) SOAP::Lite::Utils::__ANON__[SOAP/Lite/Utils.pm:22]
5155 1 1 183ms (0.1%) 18.2s (8.9%) IO::Async::Loop::Poll::post_poll
5303 2 1 171ms (0.1%) 179s (87.1%) IO::Poll::poll
1004 1 1 170ms (0.1%) 170ms (0.1%) Net::SSLeay::CTX_load_verify_locations (xsub)
1004 1 1 167ms (0.1%) 413ms (0.2%) XML::Parser::Expat::ParseString (xsub)

pozn. P označuje počet míst, ze kterých je subrutina volána. F označuje počet souborů, ze kterých je subrutina volána.

Grafické znázornění času stráveného v subrutinách

pozn. Barvy reprezentují jednotlivé balíky.

Test č.3

Cíl testu

Zjištění vlivu stroje na warden server.

Stručný přehled testu

Server: nfsen-devel
Klient: warden-dev

Je profilován standardní Warden server z balíčku, který je nainstalován na stroji nfsen-devel, pro vyloučení vlivu stroje warden-dev na server. Také byla odstraněna databáze.

Výpis z profileru

Profilování trvalo 69.9s. Bylo vykonáno 6094827 příkazů a 2172572 volání subrutin ve 102 zdrojových souborech. Zachyceno je prvních 15 subrutin. Podrobný výpis je dostupný v plném výpisu testu.

Calls P F Exclusive Time Inclusive Time Subroutine
1000 1 1 16.7s (23.9%) 16.7s (23.9%) Net::SSLeay::accept (xsub)
1001 1 1 14.9s (21.3%) 14.9s (21.3%) IO::Socket::CORE:accept (opcode)
4000 2 1 3.18s (4.6%) 3.18s (4.6%) Net::SSLeay::peek (xsub)
15000 1 1 2.12s (3.0%) 5.18s (7.4%) SOAP::Deserializer::decode_value (recurses: max depth 4, inclusive time 16.6s)
164000 9 1 2.05s (2.9%) 4.15s (5.9%) SOAP::Data::new (recurses: max depth 1, inclusive time 544ms)
15000 2 1 1.18s (1.7%) 5.36s (7.7%) SOAP::Deserializer::decode_object (recurses: max depth 4, inclusive time 18.0s)
42000 6 1 1.03s (1.5%) 2.55s (3.7%) SOAP::Data::name
16000 2 1 722ms (1.0%) 1.97s (2.8%) SOAP::SOM::_traverse (recurses: max depth 3, inclusive time 2.65s)
9000 3 1 556ms (0.8%) 2.69s (3.8%) SOAP::Serializer::encode_object (recurses: max depth 8, inclusive time 9.83s)
85002 35 1 546ms (0.8%) 559ms (0.8%) SOAP::Lite::Utils::__ANON__[SOAP/Lite/Utils.pm:22]
13000 2 1 510ms (0.7%) 4.46s (6.4%) SOAP::SOM::_as_data (recurses: max depth 2, inclusive time 7.64s)
42000 4 1 407ms (0.6%) 522ms (0.7%) SOAP::Utils::splitlongname
1000 1 1 405ms (0.6%) 672ms (1.0%) XML::Parser::Expat::ParseString (xsub)
170028 18 4 338ms (0.5%) 338ms (0.5%) UNIVERSAL::isa (xsub)
4010 10 4 325ms (0.5%) 377ms (0.5%) utf8::SWASHNEW

pozn. P označuje počet míst, ze kterých je subrutina volána. F označuje počet souborů, ze kterých je subrutina volána.

Grafické znázornění času stráveného v subrutinách

pozn. Barvy reprezentují jednotlivé balíky.

Test č.4

Cíl testu

Zjištění vlivu stroje na warden server.

Stručný přehled testu

Server: nfsen-devel
Klient: warden-dev

Pro vyloučení vlivu stroje warden-dev je provedeno profilování serveru s modulem IO::Poll také na stroji nfsen-devel. Také v tomto případě byla odebrána databáze.

Výpis z profileru

Profilování trvalo 92.9s. Bylo vykonáno 7477921 příkazů a 2468330 volání subrutin ve 129 zdrojových souborech. Zachyceno je prvních 15 subrutin. Podrobný výpis je dostupný v plném výpisu testu.

Calls P F Exclusive Time Inclusive Time Subroutine
4041 1 1 44.1s (47.5%) 44.1s (47.5%) IO::Poll::_poll (xsub)
2994 1 1 5.80s (6.2%) 5.80s (6.2%) Net::SSLeay::accept (xsub)
15000 1 1 2.12s (2.3%) 5.20s (5.6%) SOAP::Deserializer::decode_value (recurses: max depth 4, inclusive time 16.6s)
164000 9 1 2.04s (2.2%) 4.15s (4.5%) SOAP::Data::new (recurses: max depth 1, inclusive time 533ms)
15000 2 1 1.19s (1.3%) 5.39s (5.8%) SOAP::Deserializer::decode_object (recurses: max depth 4, inclusive time 18.0s)
42000 6 1 1.03s (1.1%) 2.55s (2.7%) SOAP::Data::name
16000 2 1 722ms (0.8%) 1.98s (2.1%) SOAP::SOM::_traverse (recurses: max depth 3, inclusive time 2.66s)
9000 3 1 591ms (0.6%) 2.73s (2.9%) SOAP::Serializer::encode_object (recurses: max depth 8, inclusive time 9.89s)
85001 35 1 545ms (0.6%) 558ms (0.6%) SOAP::Lite::Utils::__ANON__[SOAP/Lite/Utils.pm:22]
13000 2 1 521ms (0.6%) 4.47s (4.8%) SOAP::SOM::_as_data (recurses: max depth 2, inclusive time 7.64s)
1000 1 1 424ms (0.5%) 690ms (0.7%) XML::Parser::Expat::ParseString (xsub)
42000 4 1 407ms (0.4%) 523ms (0.6%) SOAP::Utils::splitlongname
169046 17 3 332ms (0.4%) 332ms (0.4%) UNIVERSAL::isa (xsub)
4010 10 4 330ms (0.4%) 382ms (0.4%) utf8::SWASHNEW
4019 1 1 314ms (0.3%) 31.4s (33.8%) IO::Async::Loop::Poll::post_poll

pozn. P označuje počet míst, ze kterých je subrutina volána. F označuje počet souborů, ze kterých je subrutina volána.

Grafické znázornění času stráveného v subrutinách

pozn. Barvy reprezentují jednotlivé balíky.

Testy s připojenou databází

Test č.1

Cíl testu

Profilování stroje na warden-dev s připojenou databází.

Stručný přehled testu

Server: warden-dev
Klient: nfsen-devel

Je profilován standardní Warden server z balíčku.

Výpis z profileru

Profilování trvalo 292s. Bylo vykonáno 6204694 příkazů a 2381548 volání subrutin ve 111 zdrojových souborech. Zachyceno je prvních 15 subrutin. Podrobný výpis je dostupný v plném výpisu testu.

Calls P F Exclusive Time Inclusive Time Subroutine
1006 1 1 251s (85.8%) 251s (85.8%) IO::Socket::CORE:accept (opcode)
1005 1 1 19.2s (6.6%) 19.2s (6.6%) Net::SSLeay::accept (xsub)
6040 2 1 3.60s (1.2%) 3.60s (1.2%) Net::SSLeay::peek (xsub)
15075 1 1 975ms (0.3%) 2.59s (0.9%) SOAP::Deserializer::decode_value (recurses: max depth 4, inclusive time 8.00s)
164960 9 1 721ms (0.2%) 1.62s (0.6%) SOAP::Data::new (recurses: max depth 1, inclusive time 168ms)
1000 1 1 714ms (0.2%) 714ms (0.2%) DBI::db::commit (xsub)
15075 2 1 618ms (0.2%) 2.70s (0.9%) SOAP::Deserializer::decode_object (recurses: max depth 4, inclusive time 8.72s)
42240 7 1 398ms (0.1%) 1.06s (0.4%) SOAP::Data::name
16080 2 1 349ms (0.1%) 694ms (0.2%) SOAP::SOM::_traverse (recurses: max depth 3, inclusive time 714ms)
9050 3 1 287ms (0.1%) 1.20s (0.4%) SOAP::Serializer::encode_object (recurses: max depth 8, inclusive time 4.39s)
42220 4 1 232ms (0.1%) 308ms (0.1%) SOAP::Utils::splitlongname
13065 2 1 225ms (0.1%) 1.82s (0.6%) SOAP::SOM::_as_data (recurses: max depth 2, inclusive time 3.09s)
85462 35 1 209ms (0.1%) 226ms (0.1%) SOAP::Lite::Utils::__ANON__[SOAP/Lite/Utils.pm:22]
1005 1 1 169ms (0.1%) 418ms (0.1%) XML::Parser::Expat::ParseString (xsub)
142710 10 1 161ms (0.1%) 163ms (0.1%) SOAP::Deserializer::CORE:match (opcode)

pozn. P označuje počet míst, ze kterých je subrutina volána. F označuje počet souborů, ze kterých je subrutina volána.

Grafické znázornění času stráveného v subrutinách

pozn. Barvy reprezentují jednotlivé balíky.

Test č.2

Cíl testu

Ověření vlivu použitého socketu na server.

Stručný přehled testu

Server: warden-dev
Klient: nfsen-devel

V tomto testu je profilován server s nahrazením standardního synchronního spojení na socketu (select) za asynchronní spojení pomocí modulu IO::Poll.

Výpis z profileru

Profilování trvalo 218s. Bylo vykonáno 7670641 příkazů a 2663653 volání subrutin ve 139 zdrojových souborech. Zachyceno je prvních 15 subrutin. Podrobný výpis je dostupný v plném výpisu testu.

5319 1 1 189s (86.8%) 189s (86.8%) IO::Poll::_poll (xsub)
3996 1 1 5.22s (2.4%) 5.22s (2.4%) Net::SSLeay::accept (xsub)
15045 1 1 980ms (0.5%) 2.61s (1.2%) SOAP::Deserializer::decode_value (recurses: max depth 4, inclusive time 8.00s)
1000 1 1 954ms (0.4%) 954ms (0.4%) DBI::db::commit (xsub)
164576 9 1 714ms (0.3%) 1.62s (0.7%) SOAP::Data::new (recurses: max depth 1, inclusive time 162ms)
15045 2 1 630ms (0.3%) 2.72s (1.3%) SOAP::Deserializer::decode_object (recurses: max depth 4, inclusive time 8.72s)
42144 7 1 404ms (0.2%) 1.05s (0.5%) SOAP::Data::name
16048 2 1 362ms (0.2%) 723ms (0.3%) SOAP::SOM::_traverse (recurses: max depth 3, inclusive time 749ms)
9030 3 1 293ms (0.1%) 1.21s (0.6%) SOAP::Serializer::encode_object (recurses: max depth 8, inclusive time 4.45s)
42132 4 1 228ms (0.1%) 303ms (0.1%) SOAP::Utils::splitlongname
13039 2 1 222ms (0.1%) 1.82s (0.8%) SOAP::SOM::_as_data (recurses: max depth 2, inclusive time 3.07s)
85277 35 1 218ms (0.1%) 235ms (0.1%) SOAP::Lite::Utils::__ANON__[SOAP/Lite/Utils.pm:22]
5160 1 1 185ms (0.1%) 20.2s (9.3%) IO::Async::Loop::Poll::post_poll
1003 1 1 181ms (0.1%) 433ms (0.2%) XML::Parser::Expat::ParseString (xsub)
1003 1 1 176ms (0.1%) 176ms (0.1%) Net::SSLeay::CTX_load_verify_locations (xsub)

pozn. P označuje počet míst, ze kterých je subrutina volána. F označuje počet souborů, ze kterých je subrutina volána.

Grafické znázornění času stráveného v subrutinách

pozn. Barvy reprezentují jednotlivé balíky.

Test č.3

Cíl testu

Zjištění vlivu stroje na warden server.

Stručný přehled testu

Server: nfsen-devel
Klient: warden-dev

V tomto testu byl jako fyzický stroj pro server použit nfsen-devel, aby tak byl vyloučen vliv stroje.

Výpis z profileru

Profilování trvalo 211s. Bylo vykonáno 6277827 příkazů a 2239572 volání subrutin ve 102 zdrojových souborech. Zachyceno je prvních 15 subrutin. Podrobný výpis je dostupný v plném výpisu testu.

Calls P F Exclusive Time Inclusive Time Subroutine
1001 1 1 109s (51.7%) 109s (51.7%) IO::Socket::CORE:accept (opcode)
1000 1 1 44.9s (21.3%) 44.9s (21.3%) DBI::db::commit (xsub)
1000 1 1 16.7s (7.9%) 16.7s (7.9%) Net::SSLeay::accept (xsub)
4000 2 1 3.19s (1.5%) 3.19s (1.5%) Net::SSLeay::peek (xsub)
15000 1 1 2.11s (1.0%) 5.17s (2.5%) SOAP::Deserializer::decode_value (recurses: max depth 4, inclusive time 16.5s)
164000 9 1 2.04s (1.0%) 4.14s (2.0%) SOAP::Data::new (recurses: max depth 1, inclusive time 532ms)
15000 2 1 1.18s (0.6%) 5.36s (2.5%) SOAP::Deserializer::decode_object (recurses: max depth 4, inclusive time 17.9s)
42000 6 1 1.02s (0.5%) 2.54s (1.2%) SOAP::Data::name
3000 3 2 725ms (0.3%) 725ms (0.3%) DBI::st::execute (xsub)
16000 2 1 716ms (0.3%) 1.97s (0.9%) SOAP::SOM::_traverse (recurses: max depth 3, inclusive time 2.64s)
9000 3 1 568ms (0.3%) 2.69s (1.3%) SOAP::Serializer::encode_object (recurses: max depth 8, inclusive time 9.75s)
85002 35 1 544ms (0.3%) 557ms (0.3%) SOAP::Lite::Utils::__ANON__[SOAP/Lite/Utils.pm:22]
13000 2 1 522ms (0.2%) 4.45s (2.1%) SOAP::SOM::_as_data (recurses: max depth 2, inclusive time 7.61s)
1000 1 1 422ms (0.2%) 684ms (0.3%) XML::Parser::Expat::ParseString (xsub)
42000 4 1 408ms (0.2%) 524ms (0.2%) SOAP::Utils::splitlongname

pozn. P označuje počet míst, ze kterých je subrutina volána. F označuje počet souborů, ze kterých je subrutina volána.

Grafické znázornění času stráveného v subrutinách

pozn. Barvy reprezentují jednotlivé balíky.

Test č.4

Cíl testu

Zjištění vlivu stroje na server.

Stručný přehled testu

Server: nfsen-devel
Klient: warden-dev

V tomto testu byl jako fyzický stroj pro server použit nfsen-devel, aby tak byl vyloučen vliv stroje. Také bylo místo socketů se select použito asynchronních socketů z modulu IO::Poll.

Výpis z profileru

Profilování trvalo 153s. Bylo vykonáno 7659661 příkazů a 2535077 volání subrutin ve 129 zdrojových souborech. Zachyceno je prvních 15 subrutin. Podrobný výpis je dostupný v plném výpisu testu.

Calls P F Exclusive Time Inclusive Time Subroutine
4066 1 1 53.5s (35.1%) 53.5s (35.1%) IO::Poll::_poll (xsub)
1000 1 1 47.4s (35.1%) 47.4s (35.1%) DBI::db::commit (xsub)
2996 1 1 5.78s (3.8%) 5.78s (3.8%) Net::SSLeay::accept (xsub)
15000 1 1 2.11s (1.4%) 5.20s (3.4%) SOAP::Deserializer::decode_value (recurses: max depth 4, inclusive time 16.5s)
164000 9 1 2.04s (1.3%) 4.15s (2.7%) SOAP::Data::new (recurses: max depth 1, inclusive time 534ms)
15000 2 1 1.19s (0.8%) 5.39s (3.5%) SOAP::Deserializer::decode_object (recurses: max depth 4, inclusive time 17.9s)
42000 6 1 1.02s (0.7%) 2.55s (1.7%) SOAP::Data::name
3000 3 2 842ms (0.6%) 842ms (0.6%) DBI::st::execute (xsub)
16000 2 1 724ms (0.5%) 2.00s (1.3%) SOAP::SOM::_traverse (recurses: max depth 3, inclusive time 2.68s)
9000 3 1 569ms (0.4%) 2.72s (1.8%) SOAP::Serializer::encode_object (recurses: max depth 8, inclusive time 9.87s)
85001 35 1 556ms (0.4%) 569ms (0.4%) SOAP::Lite::Utils::__ANON__[SOAP/Lite/Utils.pm:22]
13000 2 1 513ms (0.3%) 4.46s (2.9%) SOAP::SOM::_as_data (recurses: max depth 2, inclusive time 7.61s)
1000 1 1 431ms (0.3%) 701ms (0.5%) XML::Parser::Expat::ParseString (xsub)
42000 4 1 409ms (0.3%) 525ms (0.3%) SOAP::Utils::splitlongname
169046 17 3 336ms (0.2%) 336ms (0.2%) UNIVERSAL::isa (xsub)

pozn. P označuje počet míst, ze kterých je subrutina volána. F označuje počet souborů, ze kterých je subrutina volána.

Grafické znázornění času stráveného v subrutinách

pozn. Barvy reprezentují jednotlivé balíky.

Test č.5

Cíl testu

Zjištění vlivu spojení skrz počítačovou síť na server.

Stručný přehled testu

Server: warden
Klient: warden-dev

Při tomto testu se vycházelo z předpokladu, že vliv na doručování událostí může mít také počítačová síť skrze firewally a směrovače. Proto byly za server a klienta zvoleny servery cesnetu (warden, warden-dev), u kterých se předpokládá, že mají mezi sebou nejkratší cestu v síti.

Výpis z profileru

Profilování trvalo 241s. Bylo vykonáno 6198603 příkazů a 2381510 volání subrutin ve 111 zdrojových souborech. Zachyceno je prvních 15 subrutin. Podrobný výpis je dostupný v plném výpisu testu.

Calls P F Exclusive Time Inclusive Time Subroutine
1006 1 1 209s (86.5%) 209s (86.5%) IO::Socket::CORE:accept (opcode)
1005 1 1 13.6s (5.6%) 13.6s (5.6%) Net::SSLeay::accept (xsub)
15075 1 1 972ms (0.4%) 2.59s (1.1%) SOAP::Deserializer::decode_value (recurses: max depth 4, inclusive time 8.00s)
1000 1 1 970ms (0.4%) 970ms (0.4%) DBI::db::commit (xsub)
164960 9 1 701ms (0.3%) 1.61s (0.7%) SOAP::Data::new (recurses: max depth 1, inclusive time 157ms)
15075 2 1 620ms (0.3%) 2.69s (1.1%) SOAP::Deserializer::decode_object (recurses: max depth 4, inclusive time 8.72s)
42240 7 1 405ms (0.2%) 1.06s (0.4%) SOAP::Data::name
16080 2 1 349ms (0.1%) 695ms (0.3%) SOAP::SOM::_traverse (recurses: max depth 3, inclusive time 714ms)
9050 3 1 285ms (0.1%) 1.19s (0.5%) SOAP::Serializer::encode_object (recurses: max depth 8, inclusive time 4.38s)
42220 4 1 232ms (0.1%) 309ms (0.1%) SOAP::Utils::splitlongname
13065 2 1 218ms (0.1%) 1.81s (0.7%) SOAP::SOM::_as_data (recurses: max depth 2, inclusive time 3.06s)
85462 35 1 211ms (0.1%) 228ms (0.1%) SOAP::Lite::Utils::__ANON__[SOAP/Lite/Utils.pm:22]
1005 1 1 168ms (0.1%) 419ms (0.2%) XML::Parser::Expat::ParseString (xsub)
142710 10 1 159ms (0.1%) 161ms (0.1%) SOAP::Deserializer::CORE:match (opcode)
3483 4 3 158ms (0.1%) 198ms (0.1%) Params::Validate::_validate (xsub)

pozn. P označuje počet míst, ze kterých je subrutina volána. F označuje počet souborů, ze kterých je subrutina volána.

Grafické znázornění času stráveného v subrutinách

pozn. Barvy reprezentují jednotlivé balíky.

Test č.6

Cíl testu

Zjištění vlivu spojení skrz počítačovou síť na server.

Stručný přehled testu

Server: warden
Klient: warden-dev

Při tomto testu se vycházelo z předpokladu, že vliv na doručování událostí může mít také počítačová síť skrze firewally a směrovače. Proto byly za server a klienta zvoleny servery cesnetu (warden, warden-dev), u kterých se předpokládá, že mají mezi sebou nejkratší cestu v síti. Byly zde použity asynchronní sockety z modulu IO::Poll.

Výpis z profileru

Profilování trvalo 228s. Bylo vykonáno 7536870 příkazů a 2644881 volání subrutin ve 139 zdrojových souborech. Zachyceno je prvních 15 subrutin. Podrobný výpis je dostupný v plném výpisu testu.

Calls P F Exclusive Time Inclusive Time Subroutine
4376 1 1 199s (87.5%) 199s (87.5%) IO::Poll::_poll (xsub)
3017 1 1 5.22s (2.3%) 5.22s (2.3%) Net::SSLeay::accept (xsub)
15075 1 1 1.00s (0.4%) 2.65s (1.2%) SOAP::Deserializer::decode_value (recurses: max depth 4, inclusive time 8.12s)
164960 9 1 713ms (0.3%) 1.63s (0.7%) SOAP::Data::new (recurses: max depth 1, inclusive time 159ms)
1000 1 1 692ms (0.3%) 692ms (0.3%) DBI::db::commit (xsub)
15075 2 1 638ms (0.3%) 2.76s (1.2%) SOAP::Deserializer::decode_object (recurses: max depth 4, inclusive time 8.85s)
42240 7 1 408ms (0.2%) 1.07s (0.5%) SOAP::Data::name
16080 2 1 355ms (0.2%) 710ms (0.3%) SOAP::SOM::_traverse (recurses: max depth 3, inclusive time 725ms)
9050 3 1 296ms (0.1%) 1.21s (0.5%) SOAP::Serializer::encode_object (recurses: max depth 8, inclusive time 4.46s)
42220 4 1 235ms (0.1%) 311ms (0.1%) SOAP::Utils::splitlongname
13065 2 1 222ms (0.1%) 1.84s (0.8%) SOAP::SOM::_as_data (recurses: max depth 2, inclusive time 3.11s)
85461 35 1 215ms (0.1%) 232ms (0.1%) SOAP::Lite::Utils::__ANON__[SOAP/Lite/Utils.pm:22]
1005 1 1 177ms (0.1%) 177ms (0.1%) Net::SSLeay::CTX_load_verify_locations (xsub)
1005 1 1 177ms (0.1%) 432ms (0.2%) XML::Parser::Expat::ParseString (xsub)
3483 4 3 162ms (0.1%) 205ms (0.1%) Params::Validate::_validate (xsub)

pozn. P označuje počet míst, ze kterých je subrutina volána. F označuje počet souborů, ze kterých je subrutina volána.

Grafické znázornění času stráveného v subrutinách

pozn. Barvy reprezentují jednotlivé balíky.

Závěr z profilování

V průběhu profilování serveru byly zjištěny dva zásadní poznatky. Za prvé je možné zvýšit poměrně výrazně rychlost přijímání událostí pomocí asynchronních soketů (IO:Poll). Druhým závažnějším zjištěním je podstatné zpomalení běhu serveru na stroji warden-dev oproti nfsen-devel a to i přes to, že warden-dev disponuje několikanásobně větším výkonem. Pravděpodobně tedy zatím nezjištěné nastavení stroje brání rychlejšímu přijetí událostí. Při odesílání událostí na server warden-dev je u odesílajícího klienta pozorováno přerušované odesílání, způsobené zřejmě bufferováním příchozích událostí na Warden serveru. Pokud je Warden server spuštěn na druhém serveru nfsen-devel, tak ke zmiňovanému chování nedochází. Pro odstranění podezření, že k bufferování dochází na nějakém aktivním prvku v síti mezi Warden serverem warden-dev a odesílajícím klientem nfsen-devel, bylo spuštěno i testování mezi servery warden (klient) a warden-dev (server), nicméně k podezřelému bufferování příchozích událostí dochází i v tomto případě.

Zprávy o testování z Plzně

Zpráva od Michala Kostěnce z 23.03.2012

Byl objeven bug č. #387.

Ahoj,
nacpali jsme s Bodikem do gitu (branch receive-apache2) upravenou verzi Warden serveru
napasovanou na Apache a mod_perl a MySQL.

Pokud budete chtit vyzkouset, tak muzete mrknout do gitu. Pro jistotu posilam jeste balicky
klienta a serveru v priloze. Instalace klienta je stejna u serveru se ridte souborem README.warden-apache.

Jinac jsem narazil na chybu, kdy instalace serveru do adresare jineho nez default (/opt) skonci chybou (adresar neexistuje).
Do instalatoru jsem pridal testovani na adresar a pripadne jeho vytvoreni. V uninstallu jsem to jeste neopravil. Mrknete jestli
Vam to dela taky a nebo to byl problem jen u me.

Michal. 

Zpráva od Michala Kostěnce z 14.03.2012

Ahoj,
bohuzel nemam uz moc casu, protoze odjizdim na hory, ale sepisu alespon nekolik poznatku. 

  1) Zasadni problemem je absence paralelniho zpracovani na strane serveru
  2) Druhym problemem jsou SSL operace
    - pri vypnuti SSL_verify_mode v SOAP serveru jsme dostali 15 zprav/sekundu
    - entropie neni problem

Nase reseni:
  Napasovali jsme Warden server 1:1 pres mod_perl na Apache
    - pouzili jsme tedy nativni SSL funkce pro zpracovani pozadavku a predani serveru
    - je mozno ladit parametry serveru pri v Apache2.conf (timeout, keep-alive, pre-fork modul apod.)

Nutne zmeny:
  - pro klienta musely byt zmeneny moduly posilani na HTTP (SOAP::Transport::HTTP)
  - nejak to neslapalo s SQLite, takze jednoducha zmena na DB MySQL
    - dalsi moznosti ladeni primo MySQL (cache, apod.)
  - uz nemame na serveru pristup k socketum, proto musime brat informace primo z EnvVars
    - pro subjAltNames musime parsovat certifikat pres jiny modul
  + dalsi drobnosti

Testovani
Testovali jsme server pri cca 40 klientech z METAcentra a s vypnutou kontrolou CN,AN,CIDR na zacatku metody saveNewEvent,
protoze jeste nemam skript pro automaticke generovani certifikatu.

Dosahli jsme rychlosti 1 MACH = cca 300 zprav / sekundu 

Pri nasi implementaci jsme narazili na problem s odesilacem na Debian Lenny, ktery zaviral otevrene sockety az pri ukoncovani skriptu,
takze pokud se odesilalo vice jak 1024 zprav, tak to padlo na Too many open files ... (nevim, jestli to takhle zlobi i pri puvodni implementaci)

Odesilani z Debian Squeeze je OK.

Dalsi postrehy:
Narazil jsem na problem, kdy jsem vygeneroval certifikat s CN kostej.zcu.cz a jako AN dal holly.cesnet.cz. Pokud jsem zkousel prijmout udalosti z holly.cesnet.cz a pouzil tento certifikat,
tak SQL dotaz vyhodil ze je to sice OK ale vysledkem byly registrovane udaje kostej.zcu.cz, coz prijimace holly.cesnet.cz odmitlo. (CIDR nesouhlasi)
Je asi na diskusi, zda to resit, ale podle me by to chtelo. 
  = pouzil bych trosku upravenou funkci registrace a navic vkladal rozsah CIDRu v long formatu (funkce inet_aton, inet_ntoa)
  = overovani by se pak zkratilo na jeden SELECT
  = zjednoduseni, vyreseni problemu:)

Zkousel jsem testovat prijimani zprav a klient mi neustale vypisoval prazdnou tabulku. Dle komentare v kodu jsem problem pochopil:
  # get last ID from ID file (if exist) or
  # get last ID from warden server DB and save it into ID file

Pokud tedy chci prijimat, tak zavolam funkci, ktera zjisti, ze jsem jeste nic neprijimal (nemam ID file) a stahne si cislo posledni zpravy, ale zadna data ????
Znamena to, ze ja si to musim jednou pustit naprazdno a pak cekat, az nejake udalosti budou a nasledne si je budu moci stahnout.

Pokud to ma byt ochrana, abych si netahal velke mnozstvi starych zprav, tak bych pridal do parametru volani datum, jak moc stara data chci, bez parametru jen nova.

Vsechny funkce jsou dostupne i pres toto testovane reseni.
Az prijedu z dovolene, tak to cele ucesu do spravne formy  a dam k dispozici. 
Proberem Jihlave nebo pres video jestli pujdem touto cestou nebo nejakou uplne jinou;)

Michal.

Template zprávy

Pro popisy prováděných testů prosím používejte kvůli přehlednosti níže uvedený template, který samozřejmě rozšiřujte o další užitečné části. Jako inspirace pro obsah může posloužit například zpráva o provedeném distribuovaném testu. V případě potřeby převodu html výstupu, například perl profileru, do formátu Redmine wiki je možné použít stránku Převodník html -> Redmine wiki.

<Název testu>

Provedl: <jméno, organizace>

Cíl testu

<...>

Stručný přehled testu

<...>

(např. 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)

<informace o strojích: distribuce, jadro, cpu, ram, sitova karta>

<libovolné další informace o testech>

<...>

Závěr

<...>