• No results found

Performance Analysis of Distributed Object Middleware Technologies

N/A
N/A
Protected

Academic year: 2021

Share "Performance Analysis of Distributed Object Middleware Technologies"

Copied!
68
0
0

Loading.... (view fulltext now)

Full text

(1)

Master Thesis

Software Engineering

Thesis no: MSE-2003:22

06 2003

Performance Analysis of Distributed Object

Middleware Technologies

Richard Bladh & Per Arneng

Department of

Software Engineering and Computer Science

Blekinge Institute of Technology

Box 520

SE – 372 25 Ronneby

Sweden

(2)

This thesis is submitted to the Department of Software Engineering and Computer Science at Blekinge

Institute of Technology in partial fulfillment of the requirements for the degree of Master of Science in

Software Engineering. The thesis is equivalent to 2*20 weeks of full time studies.

Contact Information:

Author(s):

Richard Bladh

Per Arneng

E-mail: Richard Bladh <

pt99rbl@student.bth.se

> , Per Arneng <

pt99par@student.bth.se

>

University advisor(s):

Håkan Grahn

Department of Software Engineering and Computer Science

Department of

Software Engineering and Computer Science

Blekinge Institute of Technology

Box 520

SE – 372 25 Ronneby

Internet

: http://www.bth.se/ipd

Phone

: +46 457 38 50 00

(3)

ABSTRACT

! " #$ % ! & $ & $ & ' ( $ ' ! ( ') ( % ! & & ' ! ( $ ') ( * + #( ' , -, -, -, - % ( $ ( # $ $ % &

(4)

ACKNOWLEDGEMENTS

-) . / "

(5)

TABLE OF CONTENTS

PART 1 Introduction 8

1.1 Motivation for writing this thesis... 8

1.2 Problem definition... 8

1.3 Scope and Limitations... 8

1.4 Methodology... 9

1.5 Main Contribution... 9

1.6 Thesis Outline... 10

1.7 Definitions... 10

PART 2 Background 12 2.1 Remote Procedure Calls... 12

2.1.1 Overview... 12

2.1.2 Passing Parameters... 12

2.1.3 Parameter Representation... 12

2.1.4 Object Oriented Approach... 12

2.2 .NET Remoting... 13

2.2.1 Motivation... 13

2.2.2 Overview... 13

2.2.3 How .NET Remoting works... 14

2.2.4 Remote Object Proxies... 14

2.2.5 Easy Deployment of Distributed Objects... 15

2.2.6 Remoting-TCP... 15

2.2.7 Remoting-HTTP With Simple Object Access Protocol... 16

2.3 Distributed Component Object Model... 16

2.3.1 Motivation... 16

2.3.2 Overview... 16

2.3.3 How COM/DCOM Works... 17

2.3.4 The Windows Registry... 18

2.3.5 Service Control Manager (SCM)... 18

2.3.6 Interface Description Language... 18

2.3.7 Fallback Functionality... 19

2.4 Common Object Request Broker Architecture... 19

2.4.1 Motivation... 19

2.4.2 Overview... 19

2.4.3 How CORBA Works... 20

2.4.4 Object Request Broker... 20

2.4.5 Interface Description Language... 20

2.5 Remote Method Invocation... 21

(6)

2.5.2 Motivation... 21

2.5.3 How RMI Works... 22

2.5.4 Interfaces... 22

2.5.5 The RMI Registry... 22

2.5.6 RMI-IIOP... 23

2.6 Summary... 23

2.6.1 Architecture... 23

2.6.2 Deployment... 24

2.6.3 Run-time... 24

PART 3 Experimental setup 25 3.1 Test environment... 25

3.1.1 Hardware... 25

3.1.2 Software... 25

3.2 The Test Framework... 26

3.2.1 Requirements of the Framework... 26

3.2.2 High Resolution Timers in the Test Framework... 26

3.2.3 The Design of the Framework... 27

3.3 Test Data... 29

3.3.1 Performance Tests... 29

3.3.2 Overhead Tests... 29

3.3.3 Data Type Mappings Between the Architectures... 30

3.3.4 Motivation of choices in test data... 31

PART 4 Results 32 4.1 Measuring Network Traffic... 32

4.1.1 Motivation... 32

4.1.2 Method... 32

4.1.3 Simple/Primitive Data Types... 33

4.1.4 Array Size Test for Primitive Data Types... 37

4.1.5 String Size Test... 40

4.1.6 Summary... 44

4.2 Time based performance results ... 45

4.2.1 Motivation... 45

4.2.2 Method... 45

4.2.3 Primitives and Objects... 46

4.2.4 Strings and Arrays... 54

4.2.5 Summary of the throughput tests... 59

PART 5 Discussion 60 5.0.1 Working with the Different Distributed Object Middleware:s... 60

PART 6 Related Work 61

(7)

7.1 Other Distributed Object Middleware & RPC Middleware... 62 7.1.1 Web Services... 62 7.1.2 XML-RPC... 62

PART 8 Conclusion 63

(8)

0 & + & 0 -) 1 ) 1 # 2 + 3 2 * 4 5 % $ 5

(9)

$ # $ 6 7 -! " # & & ' ( % ! & ! ( 2 ! ( 2 ) ( 5 5

!

"

0 $ 5

(10)

# $

%

! ! 5 5

& '

' ' 6% 8 8 7 6 ! & ' 7 " % 8 8 $ ' # ' ' ' ' ' 0

(11)

5 ' $ 9: ; $ < ) & ' = >& * $ * * ? @ ' A;B ( 0 & 0 5 C

(12)

(

)

*

"

%

( ! 6 ( ! 7 0 ( ! 0 ( ! ( ! ( ! D @% A;B & ( @+ A;B

*

0 5 $ 5 @+ A;B

% +

%

,

E ! D D 0

(13)

0 ( ! @+ A;B 4 ( ! ( ! 0 0 @% A;B

- .$ *

2 # 2 + & # $ + E 2 # E 0 2

%

2 & 0

% % ! & $ ! " #$ & & ' (

0

$ E 2

2

% ! & $ ! " #$ & & ' (

E 2 $ # $ 2 2 $ 2 $ 2 " 2 2 $ 2 $ + 2 -+ + # ( $ + #( + #( ' 0 & 8 $ F & 8 '

(14)

/

- .$ *

)

$ 0 # 0 C E $ = G # ' 0 ' H I 6 ! ( ) ( 7 : J J 0 K ' 6 7 # ' 2 9

!

"

#$

% &

J# $ 0 J @ <IB $ # $ 5 2 = J8 5 ' J @& 8 <IB

*

% +

0

0 J 0 0 J @& 8 <IB 0 $ 2 4 0 5 0 $ % ! & @ <HB # $ H 0 ' $ ( 0 ( 0 ( 0 0 0 ( 0 ( 0 G

(15)

Figure 1. The .NET Remoting infrastructure utilizes two kinds of proxies to enable clients to interact with remote objects.

( 0 ' 2 @& + L + <IB

! .

'

'

% +

# 2 F ! @ <IB F ! * 0 0 2 C I GG AK 5 ' ' 8 $ & 5 ' $ ' 2 ' F & 8 ' ' $ $ $

# *

1$ "

' ! ( ! ( 5 > 2 C & 2 C ? @" <IB # $

Caller

Transparent

Proxy

Real Proxy

.NET Remoting

infrastructure

Client

Server

.NET Remoting

infrastructure

Object

Implementation

(16)

& *

1/ $ $

2

% +

,

') ( ) ( + #( + # ( 6+ #( 7 ! F & 8 + #( + #( 0 + #( 0 @ I! L+ #( <IB

'

"

% +

% ! & E + % ! & & # F ! @# F <IB

%

& % ! & 6% ! & 7 0 ! & 6! & 7 # % ! &

! & ' $ 0

! & ' $ $ @& + L% ! & A9B

+ % ! & 0 ! & ! &

+ % ! & $ ! & ' $ ! & $ $ % ! & % ! & D! & ' $ ' D 0 @ ' A;B = % ! & ! & ' $ $

'

$ C $ J J ' 5 + % ! &

(17)

@& + L% ! & A9B

'

$

% ! & ' ! & D% ! & '

/

" % 3' " %

2

)

3 ! & % ! & 0 E $ ! & D% ! & 0 ( / 3 % 6 % 8 7 2 % ! & + ! & 6 + ! & 7 #

(

)

&

! & ! & = H

Figure 2. Illustrates how components communicates directly in the same process. Originally from the article about DCOM architecture [MS_DCOM96].

(

)

&

!

( E ) $

$ ! &

Figure 3. Illustrates how a local call is processed in the COM/DCOM infrastructure. LPC stands for Local Procedure Call.

Originally from the article about DCOM architecture [MS_DCOM96].

Client

COM run-time

Sequrity

provider

DCE

RPC

LPC

Component

COM run-time

Sequrity

provider

LPC

DCE

RPC

Client

Component

(18)

(

)

!

# $ $ % ! & ! & $ $ ! & ' ' ( ! % ! & '

Figure 4. Illustrates the overall DCOM architecture. The interprocess communication is replaced with a DCOM network-protocol.

Originally from the article about DCOM architecture [MS_DCOM96].

$

2

*

% ! & ' ! & D% ! & ' 0 $ D 0

!

"

4 " 5

+ ! & 6+ ! & 7 ( ! + ! & % ! & ' 6 % ! & ' 7 $ ! & + ! & $ + ! & 6 7 $ + ! & + ! & $ @/ AMB

#

'

' ' $ ! ' 0 ' N $ 0 2 C % 8 8 - $ % ! & $ # ! & ! & D% ! & '

Client COM run-time Sequrity provider DCERPC Protocol stack Component COM run-time Sequrity provider Protocol stack DCE RPC ORPC

Client COM run-time Sequrity provider DCERPC Protocol stack Component COM run-time Sequrity provider Protocol stack DCE RPC ORPC

(19)

/ 3 % 6/ 3 % 7 $ / 3 % 6 7 3 % ! & @ AAB

& 6

) 6

! & D% ! & ! & ! & D% ! & $ ! & 6 5 7 2 @ AMB '

"

% +

* 7

(

)

,

! " # & / 6 & / 7$ 5 ;<< H<<< @" <GB ! " # # 0 4 4

%

! " # ! " # ' ! " # 5 ' @ & / L! " #<IB & / ' 5 & / ' 5 $ + 3 2 &

& ' ( # & & /

(20)

/

" % * ( , 2

)

!

"

* %+

0 ! " # # ! " # $ -@+ <<B

% +

* 7

(

)

! " # " 6 " 7 " @& AKB

!

'

% 8 6 % 8 7 ! " # 0 % 8 0 ! O O @" <GB % 8 -# 0 % 8 @+ <<B % 8 % 8 3 ! " # % 8 & " " $

(21)

+ @& AKB

%+

' " ( 6 ( 7 ! " # $ ! ( D ( ' 6 % 8 7 & % 8 $ ! " #D ( $ & ' (

Figure 5. A method call from the client to the implementation.

! *

!

%

& 6 & 7 & 5 & $ @% A;B

!

& 4 #( 4 2 # 4 ! " #

Client Stub Skeleton Implementation

IDL Specification

(22)

!

/

*

2

)

& & 0 & $ -G % H ! I & : + @+ 3 2 L & <IB

!

& 0 & 4 & 4 & ! @% A;B

! ! $

*

*

& & 0 # & & @% A;B

(23)

Figure 6. RMI Data flow

! # *

1 %

& ' ( ! " # 4 ! " #- % 8 & ' ( 4 & 0 ( " 4 * & & ' ( ! " # 4 & > & ' ( " + ! " # H I " - $ ( " P & 6 7 ( ? @+ 3 2 L & ' ( <HB

#

#

,

$ C 0 $ 0 0 5

Client

Server

RMI Registry

(24)

#

'

% ! &

0 ! " #

& ' ( " & & ! " #$ &

& ' ( ! " #$ & $ & ' ( N 0 - ! 8 #+ + ( # ) ! 8 #+ + ( # ) % ! & 0 2 2 % ! & N 0 N 0

#

*

1

# 0 % ! & % ! & % ! & % ! &

(25)

.0

$

G<< &

/

,

CPU: Intel Celeron 2.1 GHz

RAM 512 MB

Network Card 100 Mbit Ethernet card

,

CPU: Intel Celeron 500 MHz

RAM: 192 MB

Network Card: 100 Mbit Ethernet card

0 ! ( 3 G<<& *

(

-+ 3 2 - 4 & * 2 F ( $ @ + + <IB$

. $ , /

& 0#1#0

! " #$ & & ' ( + 3 2 4 ( @H<<I<9G<B

#$

0#0

2 % ! & & 2 C @H<<I<9G<B

(26)

2#3

+ 5 $ ' + @H<<I<9G<B

*

0#4#22 0

! 8 0 ' ' ' ! @H<<I<9G<B

$

$

6

)

$

! " #$ & ' ( & + 3 2 - 4 % ! & 2

& E 2 " 4 4 + 3 2 - 4 % , & E 2 P 4 Q 4 4 Q 4 4 Q 4 4 Q 4 4 Q

* 7

6

)

# # 0 2 4

/

*

$

$

6

)

G<< G< # 4 + & 67

(27)

F ( & G< + 3 2 - 4 & * 4 Q @+ 3 2 L & + <IB F ( I': & * G< &

repeat 3000 times { Time(); } //To make the JIT compile Time(); time = Time();

previous = time; repeat 5 times {

// Busy wait until system time changes: while(time == previous) { time = Time(); } resolution = time - previous;

previos = time; }

Figure 7. Pseudo-code for measuring time resolution

&

-Table 1. -Table showing the difference of time resolution.

$

'

6

)

0

Server server = factory.create(selectedAPI); server.parseArguments(cmdLineArgs);

server.start();

Figure 8. Pseudo code for the server

Platform currentTimeMillis getTime

& * 4 Q & * 4 Q & * 4 Q & * 4 Q G< I': + 3 2 * 4 + 3 2 * 4 + 3 2 * 4 + 3 2 * 4 G< I':

(28)

Component comp = new Component(); NameService.bind(ServiceName, comp); idle();

Figure 9. Pseudo code for the service dispatcher

# 0 % ! & % ! & E 0

*

0 0 0 0 0 0 0 0 0

Client client = factory.create(selectedAPI); client.parseArguments(cmdLineArgs); foreach(testName in selectedTestNames) tests.add(testfactory.create(testName)); if(multithreaded) { Threads ts = CreateTestThreads(tests,client); foreach(Thread th in ts) th.start(); } else {

foreach(Test test in tests) {

test.performTest(client); }

}

Figure 10. Pseudo code for the client 0

(29)

$

'

# ' $ D ' 0 * $ $ $ 0 5 0

$

&

0 0 $ " 0 G ; $

* &

!

5 C 5 < K<<< K<< C 5 < K<< G<<

"

C ! " #$ C ! " #$ * * $ ! " # # ' ! " # # ! " # *

%

$

&

!

! " # ; ' 4 ' G9 $ $ 5 $ ! " # 0 #+ ! ' $ HKM " 9K A< *#* *R * ') ( * C *# * S ' $

(30)

; #+ ! ' 6<'HKK7 G9

* &

!

5 C 5 < G<<<<< K<< C 5 < HK<<< K<<

"

'

$

(

,

! " # 0 ! " #-'

* %+

! '

/

) ! " #

CORBA IDL type Java type

Remarks

G9 3 ; 6 + 'G #+ ! 7 ! " # G9 4 + P G9 3 + P ; 3 ! " # G9 3 4 3 C #8 + ; IH 9: G9 IH 9: ! " # # !

Table 2. Type mappings for CORBA IDL types to Java types and the size in bits for each type [Matjaz00]

(31)

! *

/

* 0 I % ! & $ *

! & '

% ! & ' 4 Q 2 ' 2 '

'

DCOM type

Java type

Remarks

! ) # G9 3

+ 2 / + P G9 3

Table 3. Type mappings for DCOM types to Java types and the size in bits for each type.

5 0 '

-5

(32)

*

5 # D

-

) $

$ $ 0 0 & * ' ' ' $ % $ 5 G 5 $ ! ( ( ' $ ' + C $ 6 + S + @ + + <IB7 ' ' ( + 0 ! H -% 6 7

1 See Measuring Network Traffic, Snort 2.0. 2 See Test Environment, Software.

(33)

8 6 7 -6 7 " +

2#3

>+ $ ' ( $ D ? @! <IB $ % $ + $ + * ' $ ! ( ' ( ' ! ( ' # 5 ' % ! & $ % ! & % ! & ' $ ' $ ' '

3

'

$

C -' 5 5 $ 5 $ ) ' 6 ' 7=

(34)

// Array size is not used in the single call tests. arraySize=[NOT USED IN SINGLE CALL TESTS]

// Data types to test

dataTypes="empty byte char boolean short int long float double" // The distributed object middleware name and it's parameters, // such as hosts an ports.

apiStr="[API] [API PARAMETERS]"

// Test both randomized values and the same values. for randomContent in true | false do

// Work through all datatypes. for dataType in dataTypes do

// The test name and it's parameters and the data type.

test="[TEST] [TEST PARAMETERS] "dataType" " arraySize" "randomContent

// Start listening for data with snort and log to a new file, rules are different for each API, i.e. different ports.

snort.exe [SNORT RULES] & > [NEW FILENAME] // Execute our client application.

distbench_client apiStr test

// When our client is dead, kill snort. kill.exe /name "snort" /signal SIGINT done

done

(35)

%

) $

Figure 12. Overhead per data type in each distributed object middleware measured in bytes.

C GH % ! & - C * % ! & $ 0 " % ! & I ' 0 ! & $ ' $ * ! & # :$ % ! & 0 % ! &

@& + L! & + ( ! AKB$ % ! &

+ ') ( $

GMII$:

+ #( : ' F & 8

3 Relate to the information in Background, Distributed Component Object Model. 4 See Background, .NET Remoting, Remoting-HTTP.

DCOM CORBA Remotin g-HTTP Remotin g-TCP RMI RMI-IIOP 0 1000 2000 3000 4000 5000 empty boolean byte char double float int long short

(36)

Table 4. Overhead measurements including actual data in bytes (same data as in figure 12).

1 For CORBA we tested both char and wchar, string and wstring (the

wide-version is specified last in these cases).

2 Included string for an overview of how complex data relates to primitive data.

# = & ' ( ! " #- $ $ ( & ' ( 4 ' ' ( ' - ! " # * 5 K 0 ! " #-$ ! " #$ ; <'HKK 0 #+ ! ' @#+ ! <HB$ HKM " 9K A< *#* *R * 9 $ ' 3 ' G9 5 $ ! " # 4 & $ ' ! ( $ - > ? ' $ $ $ ' ! ( -'

5

!

' " - 0 ') ( ') ( 0 0 = + ') ( + #( $ #+ ! ' $ G<<< G<<$ $ '

5 See Background, CORBA.

6 More about this in the Test Data section.

Type RMI-IIOP RMI CORBA DCOM

9;K ;:K I<< GMK: K<: :GKH

9M; ;:9 HAA GMI9 :AM :G9;

9M; ;:9 HA9 GMG; :AM :G9;

9;H ;:M HA9 GMG; :G9;

9;K ;KI I<K GMK< K<: :G9;

9;G ;:A I<< GMI9 K<< :G9;

9MA ;:M HA; GMHK :A; :G9;

9MI ;:A HA; GMHH :AH :G9;

9;K ;KI I<I GMIM K<: :G9;

MHK ;:; HA; GMI; :G;:

# - 9;K G ;:; I HAA I GMII : IAA 9 :G9;

Remoting-TCP Remoting-HTTP

:AM D K<GG

(37)

$ * * *" * " $ * ') ( $

,

8 $

'

$

C 5 $ $ 0 5 ) ' 6 ' 7= // From a low array size to a larger.

for arraySize from 0 to 100000 delta 500 do

// Run the test-script found in figure 11. # Run single data type test code here... done

Figure 13. Pseudo-code for tests with array sizes on primitive data types.

# % $ 5 0 ' -5 ) $ 0 # $ 0 5 $

(38)

%

6 5 7

5

Figure 14. Overhead measurements including the actual data in bytes for arrays of bytes (graphical view).

C G:

Table 4. Overhead measurements including the actual data in bytes for arrays of bytes.

# $ ') ( 5 $ ') ( - * 5 0 500 1000 1500 2000 2500 3000 3500 4000 4500 0 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 11000 12000 13000 14000 15000 16000 17000 18000 19000 20000 RMI-IIOP RMI Remoting-TCP Remoting-HTTP CORBA DCOM Array size O ve rh ea d in cl ud in g ac tu al d at a (b yt es )

RMI-IIOP RMI CORBA DCOM

< MGI ;9A IGA G;IG K<< 9G9;

K<< GHGI GI9A ;GA G<:G; G<<< 99;<

G<<< GMHA G;9A GIGA G;A;: GKG9 MGM9

GK<< HHHA HI9A G;GA HMKK: H<G9 M9MH

H<<< HM:K H;9A HIGA I9GKG HKIH ;G9;

HK<< IH:K II9A H;GA ::9MK I<IH ;9;<

I<<< IM9G I;9A IIGA KIH9H IK:; AGM9

IK<< :H9G :I9A I;GA 9GM;K :<:; A9MH

:<<< :MMM :;9A :IGA M<::9 :K9: G<G9; :K<< KHMM KI9A :;GA M;AG9 K<9: G<9;<

# - HAAK IGGA HK9A :<:<H H HM;H ;:H:

Array size for

(39)

') ( - + #( =

// A test structure. struct POINTLIST {

long cElems;

[size_is(cElems)] POINT points[]; };

// An SOAP representation of an array of POINTLIST-items. <t:POINTLIST xmlns:t='uri for POINTLIST'>

<cElems>3</cElems> <points xsd:type='t:POINT[3]'> <POINT><x>3</x><y>4</y></POINT> <POINT><x>7</x><y>5</y></POINT> <POINT><x>1</x><y>9</y></POINT> </points> <t:POINTLIST>

Figure 15. A code snippet showing the default syntax for SOAP and arrays [Box03].

# $ $ T U T D U $ $ F & 8 ' $ $ 5 ') ( # % ! & ' ! ( 6 0 7 :G9; - HAA$I ;:H: - H9KA V G: - G V I - G % ! & 5 ' ! ( 0 % ! & ') ( 5 $ 0 = 0 1 $ 5 = ' ! ( & $ 5 " & ' ( ! " # $ $ 5 = C 0 G<<< $ G9 ') ( G9 0 $ + #( ' $

d n

f n

f n 1

f 0

(40)

% ! & $ =

Table 5, figure 16. Overhead delta and accumulated delta for DCOM.

$ 9< 0 0 9<<<

!

8 $

C 5 $ 5 ) ' 6 ' 7= Delta < D D K<< GH GH G<<< ': ; GK<< ': : H<<< ': < HK<< GH GH I<<< ': ; IK<< ': : :<<< ': < :K<< GH GH K<<< ': ; KK<< ': : 9<<< 9< 9:

Array size for

array of byte Acc. delta

0 10000 20000 30000 40000 50000 60000 70000 80000 90000 100000 110000 Actual data

(41)

// The distributed object middleware name and it's parameters, // such as hosts an ports.

apiStr="[API] [API PARAMETERS]"

// Test both randomized values and the same values. for randomContent in true | false do

// From a low string size to a larger.

for contentLength from 0 to 25000 delta 500 do

// The test name and it's parameters and the data type.

test="[TEST] [TEST PARAMETERS] "string" " contentLength" "randomContent

// Start listening for data with snort and log to a new file, rules are different for each API, i.e. different ports.

snort.exe [SNORT RULES] & > [NEW FILENAME] // Execute our client application.

distbench_client apiStr test

// When our client is dead, kill snort. kill.exe /name "snort" /signal SIGINT done

done

Figure17. Pseudo-code for tests with string lengths.

# % $ 5 0 ' -5 $ 5 = ; G9 5 ' ' G9 $ ; 5

(42)

%

5

- ; 9K A<

*#* *R *

Figure 17. Overhead measurements on different string lengths for 8 bit values. CORBA is using it's 8 bits variable 'char'.

GM & ' ( % ! & $ $ 0 6 : 7 % ! & & ' ( G9 $ 5 5 & ' ( ! " # $ & ' ( G9 3 ! " # ; 6 7 ') ( $ ' ! ( & ; $ 5 0 #+ ! ' < HKK$ 5 $ * 0 1500 3500 5500 7500 9500 11500 14000 16500 19000 21500 24000 0 5000 10000 15000 20000 25000 30000 35000 40000 45000 50000 55000 60000 65000 70000 75000 RMI-IIOP RMI Remoting-HTTP Remoting-TCP CORBA DCOM String size O ve rh ea d in cl ud in g ac tu al d at a (b yt es )

(43)

G; 5 - G9 2 ') ( D 3 ' *# * 6 GKI9' GMAG7 M C < 0 G9 = 9KKI9 6 ! & #F LP #8 3 7;

Figure 18. Overhead measurements on different string lengths for 16 bit values.

# $ G9 % ! & & ' ( ; ! " # G9 $ ! " #-= ! " # * 5 ; ') ( 3 C G9' $ 5 6 + #( * 7 ' ! ( & I H: # 3 ! 3 : 3 C IH 3 ! @3 2 ! % <IB 3 C H: ' ! ( &

7 See Test data. 8 See Test data.

0100025004000550070008500 10500 12500 14500 16500 18500 20500 22500 24500 0 5000 10000 15000 20000 25000 30000 35000 40000 45000 50000 55000 60000 65000 70000 75000 RMI-IIOP RMI Remoting-HTTP Remoting-TCP CORBA DCOM String size O ve rh ea d in cl ud in g ac tu al d at a (b yt es )

(44)

5 3 C H: + & & $ 4 $ C #W 4 $ @4 / <IB # $ ' ! ( & * 3 ! * 3 ! + 6 ! 7 & * ' ' * ') ( I 3 ' 6*# *7 3 C G9' " 5 =

Table 6. The estimated functions for each distributed object middleware.

#

% ! & ' :G9; % ! & ' # ' $ ') ( ' ! ( V 9 - G 5 ' ) ( GM 0 ' ! ( ' HAA$I ' ' ! ( 5 $ * 4 & $ I G9 # $ ') ( $ & ' ! ( 5 ; $ * 0 $ $ 0

Distr. Obj. Middleware 8 bit values 16 bit values

& ' ( & ' ! ( ') ( ! " # % ! &

y 515,57 x 725

y 983,46 x 848

y 983,84 x 298

y 500,02 x 1738

y 515,59 x 500

y 510,94 x 4184

y 510,94 x 4184

y 8 x 501

y 0,03 x 1738

y

y 0 x 848

0,03 x 298

y 515,57 x 725

(45)

$

6 7 0 0 # $ -2 6 7 % 8 6 7 # 0 -+ 0 ' ' 0 A * ' ' $ 0

(46)

Figure 19. The slope formula

% +

G<

-6 0 7

*

&

&

Figure 20. Number of calls per millisecond for making a calls with byte as parameter. % ! &

% ! & 9KX

10 See Experimental Setup, Test Data.

Slope k

Time

NrOfClients

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 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.92 2.1 CORBA DCOM Remoting-TCP Remoting-HTTP RMI RMI-IIOP clients ca lls /m s

(47)

& & ! " # & ' ( ' ! ( ! " # & ' ( ') ( ' ! (

(48)

&

Figure 21. Time in milliseconds per call when making calls with byte as parameter. ') (

' ! ( ! " & ' (

% ! & &

Table 7. Slope value for each distributed object middleware when using byte as parameter. % ! & & & ' ( $ ! " # ' ! ( $ ') ( 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 0 10 20 30 40 50 60 70 80 90 100 110 120 130 CORBA DCOM Remoting-TCP Remoting-HTTP RMI RMI-IIOP clients m s/ ca ll

Distr. Obj. Mid. Slope

% ! & % ! & % ! & % ! & < :M &&&& < M: & ' ( & ' ( & ' ( & ' ( G H; ! " # ! " # ! " # ! " # G :M ' ! ( ' ! (' ! ( ' ! ( G ; ') ( ')') (( ') ( K G9

(49)

*

&

&

Figure 22. Number of calls per millisecond for making a calls with byte as parameter. % ! & % ! & * & ' ! ( $ ! " # & ' ( ' ) ( 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 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2 2.1 CORBA DCOM Remoting-TCP Remoting-HTTP RMI RMI-IIOP clients ca lls /m s

(50)

&

Figure 23. Time in milliseconds per call when making calls with double as parameter. )

Table 8. Slope value for each distributed object middleware when using double as parameter. ; 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 0 10 20 30 40 50 60 70 80 90 100 110 120 130 CORBA DCOM Remoting-TCP Remoting-HTTP RMI RMI-IIOP # of clients m s/ ca ll

Distr. Obj. Mid. Slope

% ! & % ! & % ! & % ! & < :M &&&& < M9 & ' ( & ' ( & ' ( & ' ( G HA ! " # ! " # ! " # ! " # G :; ' ! ( ' ! ( ' ! ( ' ! ( G ; ') ( ') ( ') ( ') ( K H

(51)

*

&

"

&

Figure 24. Number of calls per millisecond for making a calls with byte as parameter. &

% ! & % ! &

& ' ( % ! & $ 9<X &

! " # & ' ( ! " # & ' ( ! " # ! " # & ' ( ' ! ( ! " # ') ( $ F & 8 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 0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5 0.55 0.6 0.65 0.7 0.75 0.8 0.85 0.9 0.95 CORBA DCOM Remoting-TCP Remoting-HTTP RMI RMI-IIOP # of clients ca lls /m s

(52)

"

&

Figure 25. Time in milliseconds per call when making calls with byte as parameter. *

') (

Table 9. Slope value for each distributed object middleware when using object as parameter. & % ! & ') ( & 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 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 CORBA DCOM Remoting-TCP Remoting-HTTP RMI RMI-IIOP clients m s/ ca ll

Distr. Obj. Mid. Slope

&&&& G G9 % ! & % ! & % ! & % ! & G KI & ' ( & ' ( & ' ( & ' ( G ;K ' ! ( ' ! (' ! ( ' ! ( H GM ! " # ! " # ! " # ! " # H :9 ') ( ')') (( ') ( K MI

(53)

"

&

Figure 26. Server scalability when using object as parameter

! " # 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 100% 110% 120% 130% 140% 150% 160% 170% 180% 190% 200% 210% 220% CORBA DCOM Remoting-TCP Remoting-HTTP RMI RMI-IIOP # of clients % o f i ni tia l p er fo rm an ce

(54)

,

5

*

&

&

Figure 27. Number of calls per millisecond for making a calls with byte as parameter HM 5 + 5 & :<X ! " # & ' ( % ! & % ! & ! " # & ' ( ' ! ( 0 I<X & ') ( - < <H < <I HM ') ( 1 2 3 4 5 6 7 8 9 10 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1 CORBA DCOM Remoting-TCP Remoting-HTTP RMI RMI-IIOP # of clients ca lls /m s

(55)

&

Figure 28. Time in milliseconds per call when making calls with byte as parameter. HM &

! " # & ' ( % ! & & ' ( ' ! (

& $ & ' ( ! " #

') ( +

N

G<

Table 10. Slope value for each distributed object middleware when using byte array as parameter. G< ') ( GIG & 1 2 3 4 5 6 7 8 9 10 0 2.5 5 7.5 10 12.5 15 17.5 20 22.5 25 27.5 30 32.5 35 37.5 CORBA DCOM Remoting-TCP RMI RMI-IIOP # of clients m s/ ca ll

Distr. Obj. Mid. Slope

&&&& < MK ! " # ! " # ! " # ! " # G H9 & ' ( & ' ( & ' ( & ' ( G I9 % ! & % ! & % ! & % ! & G AH ' ! ( ' ! (' ! ( ' ! ( I KA ') ( ')') (( ') ( A; KH

(56)

*

&

6

&

Figure 29. Number of calls per millisecond for making a calls with byte as parameter

# HA % ! & #( $ % ! & # $ & $ & ' ( ! " # & $ & ' ( ! " # 0 HM 5 0 & $ & ' ( ! " # $ I< 1 2 3 4 5 6 7 8 9 10 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1 1.2 1.3 CORBA DCOM Remoting-TCP Remoting-HTTP RMI RMI-IIOP # of clients ca lls / m s

(57)

Figure 30. Calls per millisecond for string length 1. $ 5 5 G G 2 #( -; 3 C '; G9 3 C 'G9 3 C 'IH " * & ' ( G9 #( - 1 1 $ 4 P & ' " ' #( - & ' ( ! " # #( - $ # ' ! ( ') ( ' ! ( ' 5 -" @" <HB 1 2 3 4 5 6 7 8 9 10 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1 1.2 1.3 RMI RMI-IIOP CORBA # of clients ca lls / m s

(58)

6

&

Figure 31. Time in milliseconds per call when making calls with string as parameter.

IG ' ! (

! " # & ' ( $ % ! & &

-% ! & &

Table 11. Slope value for each distributed object middleware when using string as parameter. 1 2 3 4 5 6 7 8 9 10 0 2.5 5 7.5 10 12.5 15 17.5 20 22.5 25 27.5 30 32.5 35 37.5 40 42.5 45 47.5 50 52.5 55 CORBA DCOM Remoting-TCP Remoting-HTTP RMI RMI-IIOP # of clients m s / c al l

Distr. Obj. Mid. Slope

&&&& < MI ! " # ! " # ! " # ! " # G KK & ' ( & ' ( & ' ( & ' ( G :K % ! & % ! & % ! & % ! & < M; ' ! ( ' ! (' ! ( ' ! ( G A ') ( ')') (( ') ( K IM

(59)

!

Table 12. Summary of the throughput tests. GH 0 % ! & 4 2 2 4 5

Dist. Obj. Mid. Byte # Double # String # Object # Byte Array # Average Rank

RMI 1.290 2 1.265 2 0.925 2 0.859 1 0.936 1 1.6 DCOM 2.039 1 2.009 1 1.231 1 0.634 2 0.561 4 1.8 RMI-IIOP 0.742 3 0.737 3 0.528 3 0.525 3 0.575 3 3.0 CORBA 0.645 4 0.640 4 0.504 4 0.390 5 0.616 2 3.8 Remoting-TCP 0.549 5 0.548 5 0.486 5 0.455 4 0.281 5 4.8 Remoting-HTTP 0.193 6 0.191 6 0.175 6 0.172 6 0.028 6 6.0

(60)

! '

! 9

2

)

'

'

% +

:

% ! & 2 % ! & 2 + 2 * % ! & & ! " # % 8 " ! " # " 2 0 * # % ! & & & ' ( 2 0 0 & & & ' ( " ! " # & 4 2 2 4 Q 4

(61)

# *

2

)

&

/

2

"

&

&

& 6

4 H 5 5 ! " # & ' ( @& 5 <<B

% 7 %

! ' * &

& $ & ' ( ! " # + 3 2 - 4 H 4 H ! " # & @ 5 <GB

* &

8 * %+ 7 % 9 * :! *

0 @( <GB

(62)

& 6

2

)

0 0 0

&

%

'

% +

; * "

&

2

+ #( ) ( 5 5 I! - -DD I DH<<HD

&

<

1* "

F & 8 ' ( ! F & 8 ) ( ') ( + #( ) ( F & 8 ' ( ! + #( 0 0 -F & 8 ' ( ! - ) - -DD 0

(63)

= "

-! " # ' ! ( ') ( & & ' ( % ! & $ 0 + 3 2 - 4 & * 2 +

&

&

%

&

% ! & & % ! & % ! & & ' ( ! " # & ' ( ( ' ! ( & ' ( ! " # ! " # ') ( * 0 F & 8 + #( ) ( 0 + 3 2 - 4 & * 2

(64)

0 % ! & 4 2

$

)

% ! & ' :G9; % ! & ' ') ( - + #( ' $ ') ( ' ! ( V 9 - G C ') ( GM 0 ' ! ( ' HAA$I ' ' ! ( 5 $ * 4 & $ I G9 C ; & $ ' ! ( ') ( 5 ;

*

!

"

$

)

&

! " # & ' ( ! " # ) 4 & ! " # & ' ( & * % ! &

(65)

> *

@#### F <IF <IF <IF <IB J# F ! J$ D $ H<<I Y

-DD 0

@#+ !#+ !#+ !#+ ! <H<H<H<HB J 0 #+ ! J$ $ H<<I Y

-DD D & D D 0 L#+ !

@"""" <H<H<H<HB J% 2 ( ! Q J$ " $ # $ H<<H @ + " 2 - G'KA<'KA<IA'HB

@" 0 <I" 0 <I" 0 <I" 0 <IB J# N ( / + # ( - + #( # ( 8 J$ % " 0 $ H<<I Y

-DD D D D<I<<D D 0

@"""" <G<G<G<GB J4 ( ! " #J$ / " $ # P , % $ & / ( $ H<<G @ + " 2 - <':MG'IM9;G'MB

@"""" <I<I<I<IB J J$ , " $ $ H<<I Y

-DD D L D D D

@!!!! <I<I<I<IB J+ H <- % J$ ! $ + $ H<<I @ + " 2 - G'AIG';I9M:':B

@%%%% A;A;BA;A; J4 & - & J$ " % $ % / " $ $ GAA; @ + " 2 - <'M9:K';<:I':B

@//// AMAMAMAMB J( % ! & ( J$ % / $ 0 ( $ GAAM

@ + " 2 - G';9G<<<'9<'0 B

@4 /4 /4 /4 / <I<I<I<IB J+ 5 C #W C / J$ D $ H<<I Y

-DD D D 1 Z + 5

@&&&& 5 << 5 <<B 5 << 5 << J4 H % & ( # 5 J$ & 5 $ D $ H<<< Y -DD ' D[ D H

@&&&& 8888 <I<I<I<IB J& 2 J$ & 8 $ & ( $ H<<I @ + " 2 - <'MIK9'GMM;'IB

@&&&& AKAKAKAKB J ! " #J$ & $ R $ & / ( $ GAAK @ + " 2 - <':MG'G<9GG'AB

(66)

@& + L!& + L!& + L!& + L! & +& +& +& + AKAKBAKAK J ! & + J$ & ! $ GAAK Y -DD D D9D D D9 9 '9 9K':; M' GMH'G<I:9A II G D! & GKA;" R ( @& + L% !& + L% !& + L% !& + L% ! & A9& A9& A9& A9B J% ! & J$ & ! $ GAA9 Y

-DD D D 1 Z D D ' D D D L

@ <I<IB<I<I J& 2 - # J$ ( 4

) $ & ! $ H<<G Y

-DD D D 1 Z D D ' D D D

@ & / L!& / L!& / L!& / L! " #<I" #<IB" #<I" #<I J! " #\ " #+ ! + J$ D $ H<<I Y -DD D D @ & / L& / L& / L& / L ) # + <I) # + <I) # + <I) # + <IB J & / 1 J$ D $ H<<I -DD D D 0 @ + ++ ++ ++ + <I<I<I<IB J 5 + 5 J$ D $ H<<I Y -DD

@ + ++ ++ ++ + <I<I<I<IB J + 3 + J$ D $ H<<I Y

-DD D D + 0

@(((( <G<GB<G<G J! & J$ ( $ D $ H<<G Y

-DD D[ DC L

@ <H<HB<H<H J# 2 J$ $ #( $ H<<H @ + " 2 - G'KA<K'A<HK'HB

@ AMAMAMAMB J% ! & - & % ! & J$ C $

% / " $ GAAM @ + " 2 - <'M9:K';<::'HB

@ '''' A;BA;A;A; J% ! & 0 J$ ' $ % ( $ H<<I @ + " 2 - G'KKKK;'HG9';B

@ 5555 <G<G<G<GB J & $ & ' ( % 8 ! J$ 5 $ D $ H<<G Y -DD ' D[ D I

@ AAAAAAAAB J3 % ! & J$ $ ( ') $ GAAA @ + " 2 - <'GI'<AKA99'AB @++++ <<<<<<<<B J! " # I- C ( J$ 4 + $ & / ( $ H<<<

@ + " 2 - <':MG'HAKG;'IB

@++++ A;A;A;A;B J + J$ + $ ( ') $ GAA;

@ + " 2 -<'GI'AGMAA;':B @+ 3 2 L & <I+ 3 2 L & <I+ 3 2 L & <I+ 3 2 L & <IB J & J$ D $ H<<I Y

-DD D D D D D 0

@+ 3 2 L & '+ 3 2 L & '+ 3 2 L & '+ 3 2 L & ' ( <H( <H( <H( <HB J & ' ( ( / J$ + & $ $ H<<H Y

(67)

@+ 3 2 L &+ 3 2 L &+ 3 2 L &+ 3 2 L & + <I+ <I+ <I+ <IB J& J$ P $ D $ H<<I Y -DD D D DH<<I'<GD<G' '<GG<' @ <I <I <I <IB J#+ ( G<G- 2 " 5 5 J$ 4 $ D $ H<<I Y

-DD G<G D D D 5 5 D

@3333 <I<IB<I<I J3 ! J$ D $ H<<I Y -DD

@ I! L+I! L+I! L+I! L+ #( <I#( <I#( <I#( <IB J I! - ! J$ D $ H<<I Y

-DD I

(68)

ABBREVIATIONS

CORBA Common Object Request Broker Architecture DCOM Distributed Component Object Model

HTTP HyperText Transfer Protocol IIOP Internet Inter-ORB Protocol IP Internet Protocol

RMI Remote Method Invocation RPC Remote Procedure Call SOAP Simple Object Access Protocol TCP Transmittion Control Protocol XML Extensible Meta Language

References

Related documents

matched Strategy inside Strategy Executor according to the exception type. Strategy Executor is used to fix the runtime exception. Strategy Verifier is to verify if the exception

The smallest cluster, consisting of a single Norwegian and a single Swedish landrace, both from the Finnmarken area stood out as the geographically most local group. Most of

Majoriteten av familjehemmen upplever det som jobbigt när de placerade barnen åker hem till sina biologiska föräldrar. Detta beror främst på hur barnet mår strax innan och

Overall prevalence statistics are not available for visual, musculoskeletal and balance symptoms in low vision patients. A wider survey would contribute to further knowledge

Exempelvis kan nämnas The Children’s Bookshop på två ställen – på det ena finns 15 000 titlar på barnböcker, på det andra finns böcker för barn, The Poetry Bookshop med

When selecting patients who experienced symptoms in ≥3 clusters (51% of the patients), the motor cluster had a clinically relevant negative impact on the same func- tioning

Further, the diffusion properties of solid specimens of cement paste are investigated and the physical properties such as porosity, pore size distribution and

In the images received by the digital camera, these colors are segmented and the binary image for each object is generated inside the FPGA. The robot is moved forward