Path: utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!ncar!boulder!carla From: carla@boulder.Colorado.EDU (Carla Mowers) Newsgroups: comp.misc Subject: Re: A Comparison of Commerical RPC Protocols Summary: performance data from Netwise Keywords: RPC Apollo Sun Netwise Message-ID: <10260@boulder.Colorado.EDU> Date: 25 Jul 89 15:51:32 GMT References: <6567@joshua.athertn.Atherton.COM> Reply-To: carla@boulder.Colorado.EDU (Carla Mowers) Organization: University of Colorado, Boulder Lines: 202 The following paper contains more recent performance data for Sun, Apollo, and Netwise. Format as described below. If you don't have access to troff, or the mm macros, send me email to receive a plain text output or a hard copy by mail. Tony Andrews Netwise, Inc. 2477 55th St. Boulder, CO 80301 UUCP: onecom!wldrdg!tony .\" Sun/Apollo/Netwise RPC Performance .\" 6/9/89 .\" .\" Tony Andrews .\" Netwise, Inc. .\" 2477 55th St. .\" Boulder, CO 80301 .\" .\" Format with: .\" .\" tbl file | nroff -mm | col | lpr .\" .nr Hu 2 .nr Cl 5 .nr Hb 5 .nr Ej 0 .TL Remote Procedure Call Performance .sp A Review of Current Product Offerings .AU "Netwise, Inc." .AU "June 9, 1989" .AF "" .MT 4 .PH "''''" .PF "'Netwise, Inc.''June 9, 1989'" .HU "Introduction" This paper presents preliminary results of an ongoing performance study of the major commercial remote procedure call (RPC) products. The testing thus far has measured round-trip times for remote procedure calls using a variety of simple data types, as well as the basic code size overhead for a simple remote procedure call. .P The products used for this comparison are: .BL .LI Netwise C Language RPC TOOL, version 2.02 .LI Apollo NCS, version 1.1 .LI Sun/RPC, version 3.9 .LE .HU "Testing Environment" All tests were performed on a Sun 3/280 system running SunOS 3.5 in single-user mode. Client and server processes executed within the same system. Each test run measured the elapsed real time for 500 calls. The times shown represent the average of five such test runs. .P We attempted to measure only the remote procedure call overhead itself. In each case, client/server binding overhead was minimized by using the most optimal binding method and excluding any set-up calls from the measured time. In addition, all procedures were declared as "idempotent" for the Apollo tests. .P The tests used are as follows: .VL 20 5 .LI void void procedure with no parameters .LI add adds two integers and returns the result .LI "integer 100" integer array of 100 elements as the sole input parameter; returns an integer .LI "integer 1000" same as above but with 1000 elements .LI "string" concatenates two null-terminated string parameters and returns the result; input strings are 15 and 18 characters long .LI "opaque 4000" passes and returns a buffer of 4000 bytes; also returns an integer .LI "opaque 8000" passes and returns a buffer of 8000 bytes; also returns an integer .LI "opaque 16000" passes and returns a buffer of 16000 bytes; also returns an integer .LE .P The tests were implemented as uniformly as possible across the three products tested. In some cases an output parameter was used instead of a return value due to RPC compiler restrictions, but no significant changes were required for any of the RPC compilers. .P Testing was done for both TCP and UDP transports wherever possible. .HU "Timing Results" The following table shows the measured round-trip per-call times (in milliseconds) as measured in the client process, excluding extraneous binding and set-up overhead. .DS .TS center,expand,tab(%); l 2 | ce 2 s 2 s 2 | ce 2 s 2 s 2 | l 2 | ce 2 s 2 s 2 | ce 2 s 2 s 2 | l 2 | ce 2 ce 2 ce 2 | ce 2 ce 2 ce 2 | l 2 | ne 2 | ce 2 | ne 2 | ne 2 | ne 2 | ne 2 |. %TCP Transport%UDP Transport %Round-Trip Time (ms)%Round-Trip Time (ms) %Sun%Apollo%Netwise%Sun%Apollo%Netwise _ Void%5.01%-%5.34%4.11%5.95%4.37 _ Add%5.22%-%5.47%4.22%6.82%4.48 _ Integer 100%10.37%-%11.42%8.60%10.38%9.99 _ Integer 1000%57.03%-%65.35%46.41%81.04%59.01 _ String%6.38%-%7.11%5.17%11.49%6.00 _ Opaque 4000%28.30%-%72.38%15.38%131.66%61.15 _ Opaque 8000%62.05%-%140.40%25.09%353.06%116.82 _ Opaque 16000%105.27%-%272.05%-%431.31%- _ .TE .DE .P Some of the RPC times above warrant further explanation. No TCP times are presented for Apollo because NCS supports only datagram transports such as UDP. Times are also missing for Netwise and Sun for UDP in the "opaque 16000" test case. This is because of the size limit for UDP messages. Apollo has avoided this limit through additional protocols implemented above UDP. .P The Netwise UDP times were measured using a pre-release product. All other times represent currently available products. .P The slower performance of Netwise with respect to Sun in the opaque tests is due to the use of a suboptimal ASN.1 constructed encoding. Future releases will use a simpler ASN.1 encoding, bringing the numbers more in line with Sun. .HU "Code Size Results" Code sizes for a minimal distributed application (the void test from above) were measured. The sizes were broken down into the following categories: .BL .LI Application Code .br User-written application code. On the client side, this includes any binding calls required by the RPC system. .LI Server Initialization .br This is the server program's main routine, which generally performs some network initialization and begins waiting for RPC requests. In the case of Apollo's NCS, this code is written by the user. .LI Generated Code .br Code generated by the RPC compiler for client/server stubs, data transfer procedures, and so forth. .LI Libraries .br Code obtained by linking with runtime libraries provided by the RPC vendor. This does not include any code from the standard C runtime library. .LE .SP .P The observed code sizes are as follows: .DS .TS center,expand,tab(%); l 2 | ce 2 se 2 se 2 | ce 2 se 2 se 2 | l 2 | ce 2 se 2 se 2 | ce 2 se 2 se 2 | l 2 | ce 2 ce 2 ce 2 | ce 2 ce 2 ce 2 | l 2 | ne 2 ne 2 ne 2 | ne 2 ne 2 ne 2 |. %Client%Server %Object Code Size (bytes)%Object Code Size (bytes) Code Type%Sun%Apollo%Netwise%Sun%Apollo%Netwise _ Application%304%452%264%16%20%20 _ Server Init.%-%-%-%300%356%1108 _ Gen'd Code%100%132%132%276%52%984 _ Libraries%12216%38836%9964%17884%38836%9396 _ TOTAL%12620%39420%10360%18476%39264%11508 _ .TE .DE