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
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
ABSTRACT
! " #$ % ! & $ & $ & ' ( $ ' ! ( ') ( % ! & & ' ! ( $ ') ( * + #( ' , -, -, -, - % ( $ ( # $ $ % &
ACKNOWLEDGEMENTS
-) . / "
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
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.1 Other Distributed Object Middleware & RPC Middleware... 62 7.1.1 Web Services... 62 7.1.2 XML-RPC... 62
PART 8 Conclusion 63
0 & + & 0 -) 1 ) 1 # 2 + 3 2 * 4 5 % $ 5
$ # $ 6 7 -! " # & & ' ( % ! & ! ( 2 ! ( 2 ) ( 5 5
!
"
0 $ 5# $
%
! ! 5 5& '
' ' 6% 8 8 7 6 ! & ' 7 " % 8 8 $ ' # ' ' ' ' ' 05 ' $ 9: ; $ < ) & ' = >& * $ * * ? @ ' A;B ( 0 & 0 5 C
(
)
*
"
%
( ! 6 ( ! 7 0 ( ! 0 ( ! ( ! ( ! D @% A;B & ( @+ A;B*
0 5 $ 5 @+ A;B% +
%
,
E ! D D 00 ( ! @+ 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 '
/
- .$ *
)
$ 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 GFigure 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
& *
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 + % ! &@& + L% ! & A9B
'
$
% ! & ' ! & D% ! & '/
" % 3' " %
2
)
3 ! & % ! & 0 E $ ! & D% ! & 0 ( / 3 % 6 % 8 7 2 % ! & + ! & 6 + ! & 7 #(
)
&
! & ! & = HFigure 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
(
)
!
# $ $ % ! & ! & $ $ ! & ' ' ( ! % ! & '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
/ 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 && ' ( # & & /
/
" % * ( , 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 & " " $+ @& 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
!
/
*
2
)
& & 0 & $ -G % H ! I & : + @+ 3 2 L & <IB!
& 0 & 4 & 4 & ! @% A;B! ! $
*
*
& & 0 # & & @% A;BFigure 6. RMI Data flow
! # *
1 %
& ' ( ! " # 4 ! " #- % 8 & ' ( 4 & 0 ( " 4 * & & ' ( ! " # 4 & > & ' ( " + ! " # H I " - $ ( " P & 6 7 ( ? @+ 3 2 L & ' ( <HB#
#
,
$ C 0 $ 0 0 5Client
Server
RMI Registry
#
'
% ! &
0 ! " #
& ' ( " & & ! " #$ &
& ' ( ! " #$ & $ & ' ( N 0 - ! 8 #+ + ( # ) ! 8 #+ + ( # ) % ! & 0 2 2 % ! & N 0 N 0
#
*
1
# 0 % ! & % ! & % ! & % ! &.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<B2#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 + & 67F ( & 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':
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 0Client 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
$
'
# ' $ 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 ' $; #+ ! ' 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]
! *
/
* 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
*
5 # D-
) $
$ $ 0 0 & * ' ' ' $ % $ 5 G 5 $ ! ( ( ' $ ' + C $ 6 + S + @ + + <IB7 ' ' ( + 0 ! H -% 6 71 See Measuring Network Traffic, Snort 2.0. 2 See Test Environment, Software.
8 6 7 -6 7 " +
2#3
>+ $ ' ( $ D ? @! <IB $ % $ + $ + * ' $ ! ( ' ( ' ! ( ' # 5 ' % ! & $ % ! & % ! & ' $ ' $ ' '3
'
$
C -' 5 5 $ 5 $ ) ' 6 ' 7=// 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
%
) $
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
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
$ * * *" * " $ * ') ( $
,
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 $
%
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
') ( - + #( =
// 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
% ! & $ =
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
// 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
%
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 )
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 )
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 $ $ 0Distr. 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
$
6 7 0 0 # $ -2 6 7 % 8 6 7 # 0 -+ 0 ' ' 0 A * ' ' $ 0Figure 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& & ! " # & ' ( ' ! ( ! " # & ' ( ') ( ' ! (
&
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
*
&
&
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
&
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
*
&
"
&
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
"
&
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
"
&
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
,
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
&
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
*
&
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
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
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
!
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
! '
! 9
2
)
'
'
% +
:
% ! & 2 % ! & 2 + 2 * % ! & & ! " # % 8 " ! " # " 2 0 * # % ! & & & ' ( 2 0 0 & & & ' ( " ! " # & 4 2 2 4 Q 4# *
2
)
&
/
2
"
&
&
& 6
4 H 5 5 ! " # & ' ( @& 5 <<B
% 7 %
! ' * &
& $ & ' ( ! " # + 3 2 - 4 H 4 H ! " # & @ 5 <GB* &
8 * %+ 7 % 9 * :! *
0 @( <GB& 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= "
-! " # ' ! ( ') ( & & ' ( % ! & $ 0 + 3 2 - 4 & * 2 +&
&
%
&
% ! & & % ! & % ! & & ' ( ! " # & ' ( ( ' ! ( & ' ( ! " # ! " # ') ( * 0 F & 8 + #( ) ( 0 + 3 2 - 4 & * 2
0 % ! & 4 2
$
)
% ! & ' :G9; % ! & ' ') ( - + #( ' $ ') ( ' ! ( V 9 - G C ') ( GM 0 ' ! ( ' HAA$I ' ' ! ( 5 $ * 4 & $ I G9 C ; & $ ' ! ( ') ( 5 ;*
!
"
$
)
&
! " # & ' ( ! " # ) 4 & ! " # & ' ( & * % ! &> *
@#### 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
@& + 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
@+ 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
ABBREVIATIONS
CORBA Common Object Request Broker Architecture DCOM Distributed Component Object ModelHTTP 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