Efektywność wybranych implementacji środowiska CORBA Jacek Cała, Łukasz Czekierda Zespół Systemów Rozproszonych Katedry Informatyki Akademii Górniczo-Hutniczej Al. Mickiewicza 30, 30-059 Kraków tel.: 0-12 6173491 e-mail: {cala,luke}@ics.agh.edu.pl Wrzesień 2001 1. Geneza badań Zagadnienie komunikacji pomiędzy komputerami w sieci jest złożone i może być zrealizowane na wiele różnych sposobów, poczynając od tak niskiego poziomu jak interfejs gniazd (ang. socket) do zaawansowanych środowisk pełniących rolę platformy komunikacyjnej pomiędzy aplikacjami w sieci komputerowej (ang. middleware). Do najpopularniejszych standardów komunikacji aplikacji stosowanych w systemach rozproszonych należą RPC [10], RMI [8] i CORBA [1]. Dostarczają one oprócz protokołu komunikacyjnego także wiele użytecznych serwisów. W ostatnich latach technologia CORBA osiągnęła poziom standardu de facto [7] Oprócz komercyjnych implementacji pojawiają się także produkty darmowe dostępne nawet w postaci źródłowej – jak na przykład omniORB [11] czy implementacja standardu CORBA obecna w języku Java z Sun Microsystems [8]. Zespół Systemów Rozproszonych Katedry Informatyki AGH od wielu lat, jako jeden z niewielu ośrodków akademickich w Polsce, zajmuje się środowiskami rozproszonymi, wśród których technologia CORBA jest stale w centrum uwagi. Do najważniejszych implementatorów tego standardu należy irlandzka firma IONA (www.iona.com), z którą Zespół współpracuje od długiego czasu uczestnicząc między innymi w ewaluacji nowych produktów. Ostatnio wykonane zostały testy porównawcze dwóch implementacji standardu CORBA: Orbix 3.01 [3] i Orbix 2000 [2] w zakresie szybkości przesyłania danych. Celem badań było dokonanie pomiaru czasu wykonań operacji zawartych w dostarczonym interfejsie IDL. Zawierał on łącznie kilkadziesiąt operacji przesyłających dane o różnej długości i stopniu skomplikowania – od typów prostych poprzez struktury i sekwencje aż do typu Any, co pozwalało na gruntowne zbadanie efektywności danej implementacji CORBA. Oba testowane produkty pracują w środowisku C++. Naturalnym rozszerzeniem wykonanych testów było dokonanie podobnych pomiarów dla aplikacji CORBA pracujących w środowisku Java (jako drugim obecnie najpopularniejszym) i porównanie otrzymanych wyników. Efektem tych prac jest między innymi ten artykuł. Jego celem jest przedstawienie pewnych danych ilościowych dotyczących czasu wykonania poszczególnych operacji w różnych konfiguracjach sprzętowo-programowych jak również analiza o charakterze bardziej jakościowym, mogąca pomóc Czytelnikowi w wybraniu najbardziej odpowiedniej w jego konkretnych warunkach implementacji standardu CORBA. W szczególności zamieszczone wyniki pozwalają podjąć decyzję odnośnie doboru języka programowania. Oczywiście decyzja taka powinna brać pod uwagę znacznie więcej kryteriów niż wyłącznie narzuty komunikacyjne, takich jak skalowalność systemu, dostępne serwisy czy koszt rozwiązania – jednak udzielenie odpowiedzi na wszystkie te pytania nie jest zamierzeniem niniejszego artykułu. 2. Wprowadzenie do standardu CORBA Możliwość pracy w heterogenicznym systemie rozproszonym – zróżnicowanym pod względem zarówno systemowym (platforma sprzętowa i system operacyjny) jak i programistycznym (środowisko programistyczne) – należy zaliczyć do najważniejszych zalet technologii CORBA. Elastyczność ta powoduje, że procedura komunikacji pomiędzy komponentami tego systemu staje się złożona i wprowadza pewne nieuniknione narzuty czasowe w stosunku do komunikacji w środowisku jednolitym pod względem architektury. Specyfikacja CORBA nakreślając ogólne wymagania odnośnie interfejsów poszczególnych elementów systemu pozostawia twórcom implementacji sporo swobody w realizacji środowiska, co pozwala na znacząco różną pod względem efektywnościowym ich konstrukcję. Tym samym prowadzenie badań porównawczych podobnych jak opisane w niniejszym artykule wydaje się jak najbardziej celowe. W dalszej części tego punktu zostaną pokrótce opisane najważniejsze elementy występujące na drodze od wywołania operacji przez klienta do dotarcia jej do obiektu implementującego (serwanta). Efektywność ich realizacji wpływa na wydajność komunikacji w środowisku CORBA [5]. komputer klienta komputer serwera serwant klient skeleton stub adapter obiektu Object Request Broker Rys. 1. Schematyczna komunikacja pomiędzy klientem i serwerem w architekturze CORBA 1. Stub klienta. Dla określenia interfejsu pomiędzy klientem a serwerem używa się w standardzie CORBA specjalnego języka definiowania interfejsów – IDL (Interface Definition Language). Zarówno klient jak i obiekt implementujący ten interfejs mogą być zrealizowane w dowolnym z języków programowania, do których istnieje odwzorowanie (ang. mapping) IDL. Wynikiem kompilacji interfejsu IDL do konkretnego języka programowania jest uzyskanie pewnych elementów tego języka – w językach obiektowych jest to zbiór klas i typów pomocniczych – dołączanych do programu klienta i pełniących rolę lokalnego pośrednika (ang. proxy) obiektu implementującego interfejs1. Pozwala to realizować użytkownikowi wywołania zdalne w sposób analogiczny do wywołań lokalnych funkcji. Do najważniejszych funkcji podejmowanych przez stub należy serializacja i deserializacja danych. 2. Serializacja (ang. marshaling) danych. Heterogeniczność środowiska przejawia się w różnorodności architektur sprzętu i systemów operacyjnych. Wynikająca z tego faktu różna reprezentacja podstawowych typów prostych implikuje konieczność istnienia wspólnej i jednolitej reprezentacji danych definiowanych w IDL. Standardem używanym w technologii CORBA jest CDR (Common Data Representation) – określający rozmiar i sposób rozmieszczenia poszczególnych struktur danych w przesyłanym strumieniu. Każdorazowo przed wysłaniem do sieci dowolnej porcji danych musi nastąpić ich konwersja do postaci CDR, a po stronie odbiorczej procedura odwrotna – deserializacja (ang. unmarshaling). Do poprawnej interpretacji odebranych danych wymagane jest istnienie dodatkowej opisującej je W przypadku komunikacji z użyciem technologii CORBA w ramach jednego komputera i jednej przestrzeni adresowej najczęściej ta konstrukcja nie występuje. 1 informacji – zawartej np. w interfejsie IDL (odmiennie niż ma to miejsce np. w RPC gdzie opis danych umieszczony jest w przesyłanym strumieniu). 3. Object Request Broker (ORB). Pełni funkcję kanału służącego do niskopoziomowego przekazywania komunikatów pomiędzy klientem i serwerem. Do jego zadań należy m.in. znalezienie właściwego obiektu określonego przez referencję. 4. Adapter obiektu. W odróżnieniu od ORBa, który posiada interfejs jednolity dla wszystkich implementacji CORBA i specyfikujący operacje wspólne dla klientów i serwerów, adapter obiektu jest związany jedynie z obiektem implementującym interfejs, zaś jego funkcje mogą być różne, umożliwiając dopasowanie go do wymagań aplikacji – na przykład pozwalając uzyskiwać dostęp do obiektów zgromadzonych w bazie danych. Adapter stanowi element pośredniczący pomiędzy ORBem a opisanym niżej skeletonem, do jego zadań należy przechwytywanie żądań skierowanych do obiektu i przekazywanie ich do skeletonu oraz m.in. generacja referencji obiektu i jego inkarnacja na żądanie klientów. 5. Stub serwera (skeleton). Zadaniem skeletonu – odpowiednikiem stuba po stronie serwera – jest delegacja otrzymanego od adaptera obiektu wywołania do skojarzonego obiektu implementującego. Podobnie jak stub zajmuje się serializacją i deserializacją danych. 3. Środowisko testowe W niniejszym punkcie zostały opisane scenariusze testowe i warunki prowadzenia badań efektywności wybranych implementacji środowiska CORBA. Przedstawiona charakterystyka platformy sprzętowej i programowej pozwala zorientować się, jakie wymagania ze względu na zasoby komputerów stawiają poszczególne implementacje. Do badań użyto opracowany przez firmę IONA interfejs zawierający wszystkie typy niezbędne do gruntownego przetestowania implementacji środowiska CORBA. 3.1 Scenariusze testowe Pomiary dokonane zostały dla dwóch odmiennych modeli testowych. W pierwszym komunikacja klienta z serwerem odbywała się poprzez sieć komputerową. W drugim zarówno klient jak i serwer uruchomione były na jednej maszynie (rys. 2). Komputer 1 Klient Komputer 2 Serwer Komputer 1 Klient Serwer Sieć lokalna Rys. 2. Dwa scenariusze prowadzenia testów środowisk CORBA. Po lewej model z transmisją przez sieć, po prawej transmisja wewnątrzmaszynowa Takie dwa sposoby pomiaru pozwoliły zbadać zachowanie się w środowiska CORBA w typowych dla niego warunkach pracy tj. z wykorzystaniem sieci komputerowej i porównać te wyniki z otrzymanymi dla pracy w warunkach rzadziej spotykanych. Umożliwiło to stwierdzić jaki wpływ wywiera transmisja w sieci na czas wykonania operacji, a ponadto zauważyć wymagania co do zasobów systemowych, stawiane przez poszczególne implementacje. 3.2 Platforma sprzętowa i programowa Prowadzone testy są kontynuacją badań wykonanych dla firmy IONA, których celem było porównanie platformy Orbix 3.01 z Orbix 2000. Orbix 2000 jest całkowicie nową implementacją specyfikacji CORBA stworzoną jako środowisko w pełni modularne zbudowane w oparciu o architekturę IONA ART (Adaptive Runtime Technology) [4]. Tę samą architekturę wykorzystuje implementacja Orbix 2000 dla języka Java, co uzasadnia przeprowadzenie testów porównawczych dla obu tych środowisk. Wszystkie powyższe implementacje IONA są produktami komercyjnymi, celowe więc wydawało się porównanie tych produktów z implementacją dostępną darmowo. Podsumowując, podczas testów wykorzystywano następujące implementacje specyfikacji CORBA: Orbix 3.01 z odwzorowaniem IDL do C++, Orbix 2000 wersja 1.21 z odwzorowaniem IDL do C++, Orbix 2000 wersja 2.0 beta z odwzorowaniem IDL do języka Java, CORBA zawarta w środowisku JDK 1.4. Porównaniu podlegać więc będą dwie implementacje CORBA z odwzorowaniem IDL do C++ i dwie z odwzorowaniem do języka Java. Do testów wybrane zostały trzy komputery oznaczane w dalszej części artykułu jako , i należące do tej samej lokalnej sieci komputerowej, lecz różniące się architekturą sprzętową i programową. Pozwoliło to zbadać wpływ uwarunkowań systemowych na efektywność poszczególnych implementacji. Opis parametrów tych komputerów znajduje się w tabeli 1. Tabela 1. Opis parametrów komputerów wykorzystywanych podczas testów Symbol komputera Typ komputera Procesor(y) Sun Enterprise 3000 Sun Ultra 1 Sun Ultra 1 3 x UltraSPARC 400 MHz 1 x UltraSPARC 140 MHz 1 x UltraSPARC 140 MHz Wielkość Sterownik pamięci sieciowy RAM 1,5 GB Eth 100 Mb/s 64 MB Eth 10 Mb/s 64 MB Eth 10 Mb/s System operacyjny Solaris 2.8 Solaris 2.8 Solaris 2.7 MTU interfejsu loopback [B] 8232 8232 8232 Konfiguracja komputera wyposażonego w starszą wersję systemu operacyjnego (Solaris 2.7) nie pozwoliła na uruchomienie środowiska Orbix 2000 ani w wersji C++, ani Java; na maszynie tej testowane więc były tylko Orbix 3.01 oraz implementacja pochodząca z JDK 1.4. Otrzymano w ten sposób 26 różnych konfiguracji sprzętowo-programowych pracujących w homogenicznym środowisku CORBA. Przykładowo dla implementacji Orbix 3.01 testowane były następujące konfiguracje sprzętowe: , , , , , , , , , gdzie pierwszy symbol oznacza komputer klienta, a drugi komputer serwera. Z badań wyłączono testy w środowiskach heterogenicznych – pomiędzy różnymi implementacjami specyfikacji CORBA – co znacząco ułatwiło analizę wyników. 3.3 Interfejs testowy Testowy moduł IDL Benchmark opracowano w taki sposób, aby umożliwić zbadanie wydajności przesyłania możliwie szerokiej grupy typów. Znajdują się w nim definicje kilku podlegających przesyłaniu typów użytkownika – struktury, unii, interfejsu oraz sekwencji; fragmenty pliku benchmark.idl z ich definicjami przedstawione są w tabelach 2, 3, 4 i 5. Moduł definiuje ponadto trzy interfejsy z operacjami do transferu danych. Każdy z nich zawiera po cztery operacje służące do testowania danego typu; zmienna tego typu zawsze jest jedynym parametrem operacji, przykładowo: void short_in_t(in short s); przesłanie wartości typu short od klienta do serwera void short_inout_t(inout short s); przesłanie wartości typu short od klienta do serwera z możliwością jej zmiany w serwerze void short_out_t(out short s); przesłanie wartości typu short od serwera do klienta short short_ret_t(); przesłanie wartości typu short od serwera do klienta jako wartości zwracanej operacji Tabela 2. Definicja unii u1 Tabela 3. enum discrim1 { e1, e2, e3 }; interface I { void foo(); short bar (in short s); double d (); }; union u1 switch (discrim1) { case e1: short s; case e2: long l; case e3: char c; }; Tabela 4. Definicja struktury s2 struct s2 { short s; long l; long long ll; unsigned short us; unsigned long ul; float f; double d; char c; string st; boolean b; octet o; any a; }; Tabela 5. typedef typedef typedef typedef typedef Definicja interfejsu I Definicja sekwencji sequence<short> ShortSeq_UB; sequence<float, 65536> FloatSeq_64K; sequence<string> StringSeq_UB; sequence<octet, 1048576> OctetSeq_1M; sequence<any> AnySeq_UB; typedef sequence<UserTypes::s2> S2Seq_UB; Poszczególne interfejsy zawierały operacje służące przesyłaniu zmiennych następujących typów: 1. Interfejs BasicTester Wbudowane typy proste CORBA takie jak: char, short, double, octet. Typ łańcuchowy (string). Typ Any. 2. Interfejs UserTypeTester – struktura s2, unia u1 oraz interfejs I (tab. 2, 3, 4). 3. Interfejs SequenceTester – sekwencje (tab. 5), zarówno o ograniczonej maksymalnej długości (ang. bounded) jak i nielimitowane składające się z elementów będących: typami prostymi, strukturami s2, zmiennymi Any. 3.4 Metoda prowadzenia pomiarów Wszystkie operacje z interfejsu IDL miały domyślny atrybut twoway, dzięki czemu możliwe było dokonywanie pomiaru po stronie klienta – bezpośrednio przed i bezpośrednio po wykonaniu operacji. Do pomiaru czasu wykorzystano standardową funkcję gettimeofday, która odmierza czas z dokładnością do 1 mikrosekundy. (W środowisku Java do wywołania jej niezbędne było skorzystanie z mechanizmu JNI). Sam czas dokonywania pomiaru nie zaburza wyniku, gdyż trwa około 1 s (a więc jest co najmniej trzy rzędy wielkości krótszy niż mierzone wartości) i w związku z tym został zaniedbany. Od wyniku pomiaru odejmowano – tam, gdzie to było możliwe – czas przetwarzania danych po stronie serwera. W celu zwiększenia jakości otrzymanych wyników każdy z testów powtarzany był 200 razy. Na etapie opracowywania wyników odrzucane były wartości znacznie przewyższające pozostałe rezultaty, których występowanie spowodowane było najczęściej chwilowymi zmianami obciążenia sieci lub serwerów. 4. Analiza wyników badań Otrzymane wyniki pozwolą określić różnice w wydajności testowanych implementacji standardu CORBA. Istotne przy tym jest, że pomiary wykonywane były przy współpracy serwera z pojedynczym klientem w warunkach laboratoryjnych (tj. przy wyeliminowaniu możliwie szerokiej gamy czynników zakłócających pracę sieci oraz komputerów testowych). Pozwoliło to w dokładny sposób zbadać czasy wykonania operacji, z drugiej jednak strony, warunki pracy programów testujących odbiegały znacząco od warunków normalnej eksploatacji oprogramowania CORBA, przez co zostało pominięte wiele innych czynników mających wpływ na wydajność implementacji. 4.1 Wyniki uzyskane dla typów prostych Rysunek 3 przedstawia wykres zależności czasu wykonania operacji (z atrybutem in) przesłania wartości typu short od zastosowanego środowiska i komputerów, na których pracował klient i serwer. Typ short wybrany został w opracowaniu jako reprezentant całej grupy typów prostych; wyniki dla pozostałych typów prostych były bardzo zbliżone. Zachowanie takie spowodowane jest przez podobną serializację typów prostych oraz zbliżony rozmiar danych nie przekraczający rozmiaru MTU ani dla interfejsu loopback, ani dla Ethernet. 14,00 Orbix 3.01 Orbix 2000 C++ 12,00 Java 1.4 Orbix 2000 Java czas wykonania [ms] 10,00 8,00 6,00 4,00 2,00 0,00 komputer klienta - komputer serwera Rys. 3. Czas wykonania operacji przesłania wartości (z atrybutem in) typu short w zależności od konfiguracji sprzętowej i programowej Z przedstawionego rysunku można jednoznacznie stwierdzić, że wydajność implementacji środowiska CORBA dla języka C++ jest większa niż tych dla języka Java. Stosunek wydajności jest szczególnie duży przy wykonaniu połączenia wewnątrzmaszynowego (, oraz ). Jest to spowodowane dużym obciążeniem maszyny generowanym przez dwa środowiska Javy pracujące jednocześnie. Efekt ten jest szczególnie zauważalny na komputerach oraz , które są wyposażone w stosunkowo niewielkie zasoby. Wyjaśnienia wymaga również nieco gorsza wydajność komputera w stosunku do . Jak wspomniano wcześniej, maszyna wyposażona została w starszą wersję systemu operacyjnego, przez co niemożliwe było uruchomienie na niej środowisk Orbix 2000. Podczas testów na komputerze uruchomiono mniejszą ilość serwerów, na skutek czego dostępnych było więcej zasobów pamięci i procesora. Rysunek 3 pokazuje więc także wpływ obciążenia generowanego przez środowiska CORBA na pracę systemu. W przypadku implementacji dla Javy mniejsza ilość zasobów spowodowała dość znaczne zmniejszenie wydajności (patrz oraz dla Java 1.4). 4.2 Wyniki uzyskane dla typów złożonych Rezultaty otrzymane dla typów złożonych mają bardzo zbliżony charakter do tych osiągniętych przy transmisji danych prostych. W szczególności dotyczy to przesyłania łańcuchów znaków czy sekwencji. Rysunek 4 przedstawia omawianą zależność dla transmisji łańcucha znaków o przykładowej długości 36 kB. To, co wyraźnie odróżnia te rezultaty od przedstawionych na rysunku 2, to zwiększenie wydajności transmisji wewnątrzmaszynowych w stosunku do przesyłania w sieci (z wyjątkiem środowiska Orbix 2000 dla języka Java, które wyraźnie odbiega wydajnością od pozostałych). Wpływ na taką tendencję ma opóźnienie generowane przez transmisję większej ilości danych w sieci. Warto zauważyć również, że podobnie jak dla typów prostych stosunek wydajności poszczególnych implementacji środowiska CORBA dla przesyłania w sieci pozostaje niemal niezmieniony. 120,00 Orbix 3.01 Orbix 2000 C++ 100,00 Java 1.4 Orbix 2000 Java czas wykonania [ms] 80,00 60,00 40,00 20,00 0,00 komputer klienta - komputer serwera Rys. 4. Zależność czasu wykonania operacji przesłania łańcucha znaków o długości 36 kB z atrybutem in od rodzaju środowiska dla różnych konfiguracji sprzętowych Dokonano także gruntownych testów operacji przesyłających łańcuchy znaków i sekwencji. Zgodnie z przewidywaniami czas wykonania operacji przesłania danych jest zależny liniowo od ich rozmiaru. Wśród czterech testowanych środowisk implementujących standard CORBA tylko Orbix 2000 dla Javy wykazywał niestabilne zachowanie przy przesyłaniu ciągów danych. Na rysunku 5 przedstawiono zależność czasu wykonania operacji transmisji (z atrybutem in) łańcucha znaków w zależności od długości łańcucha dla implementacji Orbix 2000 w wersji Java. Przesyłanie danych w sieci nie wykazało żadnych nieprzewidzianych efektów, inaczej jest natomiast z operacją wykonywaną z ramach jednego komputera. W tym przypadku omawiana zależność jest funkcją prostokątną o okresie 16 kB. Podobne zachowanie się środowiska Orbix 2000 dla Javy obserwowano podczas przesyłania sekwencji. Efekt ten został dokładnie opisany i przedstawiony firmie IONA do konsultacji. 400,00 350,00 czas wykonania [ms] 300,00 250,00 200,00 150,00 100,00 50,00 0,00 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 długość łańcucha [4 kB] Rys. 5. Zależność czasu wykonania operacji przesłania łańcucha znaków (atrybut in) od długości łańcucha dla środowiska Orbix 2000 w wersji Java Kolejna grupa testów obejmowała efektywność przesyłania struktur danych zagnieżdżonych w zmiennej typu Any. Jak należało zakładać, czas wykonania operacji jest liniowo zależny od poziomu zagnieżdżenia. W przypadku implementacji w języku Java pojawiają się nieco zaskakujące rezultaty (rysunek 6). Przesłanie wartości typu prostego umieszczonej w Any jest szybsze niż bezpośrednie przesłanie wartości, bez zagnieżdżenia w Any. Takie zachowanie się spowodowane jest tym, że pomiar czasu wykonania operacji dla wartości typu Any nie uwzględniał czasu insercji2. Implementacje w języku Java przygotowują zapewne dane do transmisji już w czasie insercji do Any. Przedstawione kilkumilisekundowe przyspieszenie dla typów prostych jest niezauważalne przy przesyłaniu dużej ilości danych w zależności od zagnieżdżenia w Any. Na rysunku 7 pokazano tę samą, co poprzednio, zależność z tym, że przesyłaną wartością była sekwencja struktur s2 o długości 2000 (w strukturze ulokowany był łańcuch znaków o długości 40 B oraz wartość typu short umieszczona w Any). W tym przypadku we wszystkich implementacjach przesłanie wartości bezpośrednio bez zagnieżdżenia w Any jest szybsze. Ponadto każde kolejne zagnieżdżenie daje bardzo niewielki przyrost czasu wykonania – co dobrze świadczy o efektywności operacji insercji. W zależności od programisty może ona przebiegać w różny sposób: dane do insercji mogą pochodzić bezpośrednio ze zmiennej, ale także np. ze strumienia danych. Ponadto celem badań było jedynie ustalenie czasu wykonania operacji, insercja znalazła się więc poza pomiarem czasu. 2 800,00 bez zagnieżdżenia 1-krotne zagnieżdżenie 700,00 3-krotne zagnieżdżenie 5-krotne zagnieżdżenie czas wykonania [ms] 600,00 500,00 400,00 300,00 200,00 100,00 0,00 Orbix 3.01 Orbix 2000 dla C++ JDK 1.4 Orbix 2000 dla Javy rodzaj środowiska Rys. 6. Zależność czasu wykonania operacji przesłania (z atrybutem in) wartości typu short od poziomu zagnieżdżenia danych w Any i rodzaju środowiska CORBA Wszystkie prezentowane dotychczas rezultaty odnosiły się do operacji transmisji danych z atrybutem in. Przeprowadzone badania obejmowały także pozostałe sposoby przesyłania (z atrybutem out, inout oraz przez wartość zawracaną), które wykazywały zależności podobne do opisanych wyżej. Ponadto jak należało się spodziewać operacje przesyłania danych z atrybutem in i out są symetryczne. Oznacza to, że szybkość wykonania operacji z atrybutem in dla pary komputerów np. jest niemal taka sama jak operacji z atrybutem out dla pary . Pełniejsze zestawienie przedstawiono w tabeli 6, gdzie dla poszczególnych implementacji zestawiono wyniki przesłania sekwencji oktetów o długości 25000. Tabela 6. in out Porównanie czasów przesłania sekwencji oktetów o długości 25000 w zależności od kierunku transmisji danych i mocy obliczeniowej komputerów dla testowanych środowisk Orbix 3.01 26,93 ms 30,67 ms 30,81 ms 27,09 ms Orbix 2000 dla C++ 23,16 ms 27,83 ms 25,17 ms 23,72 ms Java 1.4 26,32 ms 30,91 ms 30,31 ms 26,36 ms Orbix 2000 dla Javy 119,92 ms 119,73 ms 119,95 ms 119,79 ms 8,00 bez zagnieżdżenia 7,00 2-krotne zagnieżdżenie 4-krotne zagnieżdżenie 6-krotne zagnieżdżenie czas wykonania [ms] 6,00 5,00 4,00 3,00 2,00 1,00 0,00 Orbix 3.01 Orbix 2000 C++ Java 1.4 Orbix 2000 Java rodzaj środowiska Rys. 7. Zależność czasu wykonania operacji (z atrybutem in) przesłania sekwencji struktur o długości 2000 od poziomu zagnieżdżenia w Any i rodzaju środowiska CORBA 5. Podsumowanie Zaprezentowane wyniki badań i tabele obrazują wybrane najistotniejsze i najciekawsze rezultaty, które pozwalają zorientować się w jakości testowanych środowisk. Pozostałe otrzymane wyniki mają charakter bardzo zbliżony do przedstawionych, co pozwala stwierdzić jednoznacznie, że implementacje dla języka C++ są wydajniejsze od implementacji dla języka Java. Środowisko Orbix 2000 dla Javy (wersja beta) jest najsłabszym produktem z testowanych i wyraźnie odstaje od trzech pozostałych implementacji, a niestabilne zachowanie się zmniejsza dodatkowo jego przydatność. Mimo, że otrzymane wyniki wykazują lepsze rezultaty dla implementacji języka C++, warto zwrócić uwagę na środowisko pochodzące z JDK 1.4. Czasy wykonania operacji otrzymane dla implementacji firmy Sun są ok. 50% gorsze od implementacji Orbix 2000 dla C++, jednak łatwość programowania i przejrzystość kodu w języku Java mogą w niektórych przypadkach wystarczająco wynagrodzić słabszą wydajność. Przeprowadzone testy wykazały, że obie testowane implementacje standardu CORBA dla języka C++ są znacząco szybsze podczas pracy klienta i serwera na jednym komputerze. Istotny jest również fakt, że obciążenie generowane przez środowisko uruchomieniowe Java powodowało spadek wydajności wykonania testowanych operacji, co jest szczególnie zauważalne podczas pracy aplikacji testowej na komputerach z mniejszą ilością zasobów – i . Ze względu jednak na przeznaczenie środowiska CORBA do pracy w sieci, wydaje się mieć to mniejsze znaczenie. 6. Literatura 1. 2. 3. 4. Object Management Group, The Common Object Request Broker: Architecture and Specification, 1998. IONA Technologies, Orbix2000 Programmer’s Guide, IONA Technologies PLC, 2000. IONA Technologies, Orbix C++ Programmer’s Guide, IONA Technologies PLC, 1999. IONA Technologies, IONA Adaptive Runtime Technology, http://www.iona.com/products/arthome.htm 5. M. Henning, S. Vinoski, Advanced CORBA Programming with C++, Addison-Wesley, 1999. 6. G. Clarke, R. Kempson, Introduction to the Design and Analysis of Experiments, Arnold, Londyn, 1997. 7. A. Zeliaś, Metody statystyczne, Polskie Wydawnictwo Ekonomiczne, 2000. 8. Object Management Group, Model Driven Architecture, 2000; http://www.omg.org/mda/papers.htm 9. The Source for Java Technology, Sun Microsystems; http://java.sun.com 10. W.R. Stevens, Programowanie zastosowań sieciowych w systemie Unix, WydawnictwaNaukowo Techniczne, Warszawa 1996. 11. OmniORB, Free High Performance CORBA 2 ORB from AT&T Laboratories Cambridge; http://www.uk.research.att.com/omniORB