~statik/ubuntu/maverick/erlang/erlang-merge-testing

« back to all changes in this revision

Viewing changes to lib/megaco/doc/src/megaco_performance.xml

  • Committer: Bazaar Package Importer
  • Author(s): Sergei Golovan
  • Date: 2009-05-01 10:14:38 UTC
  • mfrom: (3.1.4 sid)
  • Revision ID: james.westby@ubuntu.com-20090501101438-6qlr6rsdxgyzrg2z
Tags: 1:13.b-dfsg-2
* Cleaned up patches: removed unneeded patch which helped to support
  different SCTP library versions, made sure that changes for m68k
  architecture applied only when building on this architecture.
* Removed duplicated information from binary packages descriptions.
* Don't require libsctp-dev build-dependency on solaris-i386 architecture
  which allows to build Erlang on Nexenta (thanks to Tim Spriggs for
  the suggestion).

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?xml version="1.0" encoding="latin1" ?>
 
2
<!DOCTYPE chapter SYSTEM "chapter.dtd">
 
3
 
 
4
<chapter>
 
5
  <header>
 
6
    <copyright>
 
7
      <year>2002</year><year>2009</year>
 
8
      <holder>Ericsson AB. All Rights Reserved.</holder>
 
9
    </copyright>
 
10
    <legalnotice>
 
11
      The contents of this file are subject to the Erlang Public License,
 
12
      Version 1.1, (the "License"); you may not use this file except in
 
13
      compliance with the License. You should have received a copy of the
 
14
      Erlang Public License along with this software. If not, it can be
 
15
      retrieved online at http://www.erlang.org/.
 
16
    
 
17
      Software distributed under the License is distributed on an "AS IS"
 
18
      basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
 
19
      the License for the specific language governing rights and limitations
 
20
      under the License.
 
21
    
 
22
    </legalnotice>
 
23
 
 
24
    <title>Performace comparison</title>
 
25
    <prepared>H&aring;kan Mattsson</prepared>
 
26
    <responsible>H&aring;kan Mattsson</responsible>
 
27
    <docno></docno>
 
28
    <approved>H&aring;kan Mattsson</approved>
 
29
    <checked></checked>
 
30
    <date>2007-06-15</date>
 
31
    <rev>%VSN%</rev>
 
32
    <file>megaco_performance.sgml</file>
 
33
  </header>
 
34
 
 
35
  <section>
 
36
    <title>Comparison of encoder/decoders</title>
 
37
    <p>The Megaco/H.248 standard defines both a plain text encoding and a 
 
38
      binary encoding (ASN.1 BER) and we have implemented encoders and 
 
39
      decoders for both. We do supply a bunch of different encoding/decoding 
 
40
      modules and the user may in fact implement their own (like our erl_dist 
 
41
      module). Using a non-standard encoding format has its obvious drawbacks, 
 
42
      but may be useful in some configurations.</p>
 
43
    <p>We have made four different measurements of our Erlang/OTP 
 
44
      implementation of the Megaco/H.248 protocol stack, in order to compare 
 
45
      our different encoders/decoders. The result of each one is summarized 
 
46
      in a line chart:</p>
 
47
 
 
48
    <section>
 
49
      <title>Encoded message size in bytes</title>
 
50
      <image file="message_size">
 
51
        <icaption>Encoded message size in bytes</icaption>
 
52
      </image>
 
53
    </section>
 
54
 
 
55
    <section>
 
56
      <title>Encode time in micro seconds</title>
 
57
      <image file="encode_time">
 
58
        <icaption>Encode time in micro seconds</icaption>
 
59
      </image>
 
60
    </section>
 
61
 
 
62
    <section>
 
63
      <title>Decode time in micro seconds</title>
 
64
      <image file="decode_time">
 
65
        <icaption>Decode time in micro seconds</icaption>
 
66
      </image>
 
67
    </section>
 
68
 
 
69
    <section>
 
70
      <title>Sum of encode and decode time in micro seconds</title>
 
71
      <image file="total_time">
 
72
        <icaption>Sum of encode and decode time in micro seconds</icaption>
 
73
      </image>
 
74
    </section>
 
75
  </section>
 
76
 
 
77
  <section>
 
78
    <title>Description of encoders/decoders</title>
 
79
    <p>In Appendix A of the Megaco/H.248 specification (RFC 3525), there are 
 
80
      about 30 messages that shows a representative call flow. We have also 
 
81
      added a few extra version 1, version 2 and version 3 messages. 
 
82
      We have used these messages as basis for our measurements. 
 
83
      The numbers within parentheses are the plain average values. Our 
 
84
      figures have not been weighted in regard to how frequent the different 
 
85
      kinds of messages that are sent between the media gateway and its 
 
86
      controller.</p>
 
87
    <p>The test compares the following encoder/decoders:</p>
 
88
    <list type="bulleted">
 
89
      <item>
 
90
        <p><em>pretty</em> - pretty printed text. In the text encoding, 
 
91
          the protocol stack implementors have the choice of using a 
 
92
          mix of short and long keywords. It is also possible to add 
 
93
          white spaces to improve readability. The pretty text encoding 
 
94
          utilizes long keywords and an indentation style like the 
 
95
          text examples in the Megaco/H.248 specification.</p>
 
96
      </item>
 
97
      <item>
 
98
        <p><em>compact</em> - the compact text encoding uses the shortest 
 
99
          possible keywords and no optional white spaces.</p>
 
100
      </item>
 
101
      <item>
 
102
        <p><em>ber</em> - ASN.1 BER.</p>
 
103
      </item>
 
104
      <item>
 
105
        <p><em>per</em> - ASN.1 PER. Not standardized as a valid 
 
106
          Megaco/H.248 encoding, but included for the matter of completeness 
 
107
          as its encoding is extremely compact.</p>
 
108
      </item>
 
109
      <item>
 
110
        <p><em>erl_dist</em> - Erlang's native distribution format. Not 
 
111
          standardized as a valid Megaco/H.248 encoding, but included 
 
112
          as a reference due to its well known performance characteristics. 
 
113
          Erlang is a dynamically typed language and any Erlang data 
 
114
          structure may be serialized to the erl_dist format by using 
 
115
          built-in functions.</p>
 
116
      </item>
 
117
    </list>
 
118
    <p>The actual encoded messages have been collected in one directory per 
 
119
      encoding type, containing one file per encoded message.</p>
 
120
    <p>Here follows an example of a text message to give a feeling of the 
 
121
      difference between the pretty and compact versions of text messages. 
 
122
      First the pretty printed, well indented version with long keywords:</p>
 
123
    <p></p>
 
124
    <pre>
 
125
MEGACO/1 [124.124.124.222] 
 
126
  Transaction = 9998 { 
 
127
    Context = - { 
 
128
      ServiceChange = ROOT { 
 
129
  \011Services { 
 
130
  \011  Method = Restart, 
 
131
  \011  ServiceChangeAddress = 55555, 
 
132
  \011  Profile = ResGW/1, 
 
133
  \011  Reason = "901 MG Cold Boot"
 
134
  \011}
 
135
      }  
 
136
    }
 
137
  }    </pre>
 
138
    <p>Then the compact text version without indentation and with short 
 
139
      keywords:</p>
 
140
    <pre>
 
141
!/1 [124.124.124.222] T=9998{
 
142
  C=-{SC=ROOT{SV{MT=RS,AD=55555,PF=ResGW/1,RE="901 MG Cold Boot"}}}}    </pre>
 
143
  </section>
 
144
 
 
145
  <section>
 
146
    <title>Setup</title>
 
147
    <p>The measurements has been performed on a 
 
148
      HP workstation xw4400 with 
 
149
      an Intel Core 2 Duo 2.13 GHz, 
 
150
      3 GB memory and 
 
151
      running SLES 10 SP1 i586, kernel 2.6.16.54-0.2.5-bigsmp
 
152
      Software versions was open source OTP R12B-2 and megaco-3.8 
 
153
      (R12B-1 and megaco-3.7.3).</p>
 
154
  </section>
 
155
 
 
156
  <section>
 
157
    <title>Complete measurement result</title>
 
158
    <p>This chapter details the effects of the possible encoding 
 
159
      configurations for every codec. The result above are the fastest 
 
160
      of these configurations for each codec. The figures presented are 
 
161
      the average of all used messages.</p>
 
162
    <p>For comparison, also included are performance figures for when both 
 
163
      the test program and the codec's where <c>hipe compiled</c>. In the case 
 
164
      of the binary codec's, the asn1 run-time was also <c>inlined</c>. </p>
 
165
 
 
166
    <table>
 
167
      <row>
 
168
        <cell align="left" valign="middle"><em>Codec and config</em></cell>
 
169
        <cell align="center" valign="middle"><em>Size</em></cell>
 
170
        <cell align="center" valign="middle"><em>Encode</em></cell>
 
171
        <cell align="center" valign="middle"><em>Decode</em></cell>
 
172
        <cell align="center" valign="middle"><em>Total</em></cell>
 
173
      </row>
 
174
 
 
175
      <!-- PRETTY -->
 
176
      <row>
 
177
        <cell align="left" valign="middle">pretty</cell>
 
178
        <cell align="right" valign="middle">336</cell>
 
179
        <cell align="right" valign="middle">30 (31)</cell>
 
180
        <cell align="right" valign="middle">98 (115)</cell>
 
181
        <cell align="right" valign="middle">129 (146)</cell>
 
182
      </row>
 
183
      <row>
 
184
        <cell align="left" valign="middle">pretty [flex]</cell>
 
185
        <cell align="right" valign="middle">336</cell>
 
186
        <cell align="right" valign="middle">31 (31)</cell>
 
187
        <cell align="right" valign="middle">53 (60)</cell>
 
188
        <cell align="right" valign="middle">84 (91)</cell>
 
189
      </row>
 
190
 
 
191
      <!-- PRETTY + HIPE -->
 
192
      <row>
 
193
        <cell align="left" valign="middle"><c>pretty hipe</c></cell>
 
194
        <cell align="right" valign="middle"><c>336</c></cell>
 
195
        <cell align="right" valign="middle"><c>18 (18)</c></cell>
 
196
        <cell align="right" valign="middle"><c>50 (58)</c></cell>
 
197
        <cell align="right" valign="middle"><c>68 (76)</c></cell>
 
198
      </row>
 
199
      <row>
 
200
        <cell align="left" valign="middle"><c>pretty [flex] hipe</c></cell>
 
201
        <cell align="right" valign="middle"><c>336</c></cell>
 
202
        <cell align="right" valign="middle"><c>18 (18)</c></cell>
 
203
        <cell align="right" valign="middle"><c>44 (51)</c></cell>
 
204
        <cell align="right" valign="middle"><c>62 (69)</c></cell>
 
205
      </row>
 
206
 
 
207
      <!-- COMPACT -->
 
208
      <row>
 
209
        <cell align="left" valign="middle">compact</cell>
 
210
        <cell align="right" valign="middle">181</cell>
 
211
        <cell align="right" valign="middle">26 (26)</cell>
 
212
        <cell align="right" valign="middle">80 (91)</cell>
 
213
        <cell align="right" valign="middle">106 (117)</cell>
 
214
      </row>
 
215
      <row>
 
216
        <cell align="left" valign="middle">compact [flex]</cell>
 
217
        <cell align="right" valign="middle">181</cell>
 
218
        <cell align="right" valign="middle">26 (26)</cell>
 
219
        <cell align="right" valign="middle">49 (56)</cell>
 
220
        <cell align="right" valign="middle">75 (82)</cell>
 
221
      </row>
 
222
 
 
223
      <!-- COMPACT + HIPE -->
 
224
      <row>
 
225
        <cell align="left" valign="middle"><c>compact hipe</c></cell>
 
226
        <cell align="right" valign="middle"><c>181</c></cell>
 
227
        <cell align="right" valign="middle"><c>13 (14)</c></cell>
 
228
        <cell align="right" valign="middle"><c>45 (53)</c></cell>
 
229
        <cell align="right" valign="middle"><c>58 (67)</c></cell>
 
230
      </row>
 
231
      <row>
 
232
        <cell align="left" valign="middle"><c>compact [flex] hipe</c></cell>
 
233
        <cell align="right" valign="middle"><c>181</c></cell>
 
234
        <cell align="right" valign="middle"><c>13 (14)</c></cell>
 
235
        <cell align="right" valign="middle"><c>39 (47)</c></cell>
 
236
        <cell align="right" valign="middle"><c>52 (61)</c></cell>
 
237
      </row>
 
238
 
 
239
      <!-- PER -->
 
240
      <row>
 
241
        <cell align="left" valign="middle">per bin</cell>
 
242
        <cell align="right" valign="middle">91</cell>
 
243
        <cell align="right" valign="middle">84 (82)</cell>
 
244
        <cell align="right" valign="middle">86 (87)</cell>
 
245
        <cell align="right" valign="middle">170 (169)</cell>
 
246
      </row>
 
247
      <row>
 
248
        <cell align="left" valign="middle">per bin [driver]</cell>
 
249
        <cell align="right" valign="middle">91</cell>
 
250
        <cell align="right" valign="middle">57 (57)</cell>
 
251
        <cell align="right" valign="middle">58 (59)</cell>
 
252
        <cell align="right" valign="middle">115 (116)</cell>
 
253
      </row>
 
254
      <row>
 
255
        <cell align="left" valign="middle">per bin [native]</cell>
 
256
        <cell align="right" valign="middle">91</cell>
 
257
        <cell align="right" valign="middle">64 (63)</cell>
 
258
        <cell align="right" valign="middle">64 (63)</cell>
 
259
        <cell align="right" valign="middle">127 (126)</cell>
 
260
      </row>
 
261
      <row>
 
262
        <cell align="left" valign="middle">per bin [driver,native]</cell>
 
263
        <cell align="right" valign="middle">91</cell>
 
264
        <cell align="right" valign="middle">36 (35)</cell>
 
265
        <cell align="right" valign="middle">37 (38)</cell>
 
266
        <cell align="right" valign="middle">72 (73)</cell>
 
267
      </row>
 
268
 
 
269
      <!-- PER + HIPE + INLINE -->
 
270
      <row>
 
271
        <cell align="left" valign="middle"><c>per bin hipe+inline</c></cell>
 
272
        <cell align="right" valign="middle"><c>91</c></cell>
 
273
        <cell align="right" valign="middle"><c>38 (38)</c></cell>
 
274
        <cell align="right" valign="middle"><c>40 (38)</c></cell>
 
275
        <cell align="right" valign="middle"><c>78 (76)</c></cell>
 
276
      </row>
 
277
      <row>
 
278
        <cell align="left" valign="middle"><c>per bin [driver] hipe+inline</c></cell>
 
279
        <cell align="right" valign="middle"><c>91</c></cell>
 
280
        <cell align="right" valign="middle"><c>33 (33)</c></cell>
 
281
        <cell align="right" valign="middle"><c>33 (36)</c></cell>
 
282
        <cell align="right" valign="middle"><c>66 (69)</c></cell>
 
283
      </row>
 
284
      <row>
 
285
        <cell align="left" valign="middle"><c>per bin [native] hipe+inline</c></cell>
 
286
        <cell align="right" valign="middle"><c>91</c></cell>
 
287
        <cell align="right" valign="middle"><c>28 (28)</c></cell>
 
288
        <cell align="right" valign="middle"><c>30 (29)</c></cell>
 
289
        <cell align="right" valign="middle"><c>58 (57)</c></cell>
 
290
      </row>
 
291
      <row>
 
292
        <cell align="left" valign="middle"><c>per bin [driver,native] hipe+inline</c></cell>
 
293
        <cell align="right" valign="middle"><c>91</c></cell>
 
294
        <cell align="right" valign="middle"><c>22 (22)</c></cell>
 
295
        <cell align="right" valign="middle"><c>25 (25)</c></cell>
 
296
        <cell align="right" valign="middle"><c>47 (47)</c></cell>
 
297
      </row>
 
298
 
 
299
      <!-- BER -->
 
300
      <row>
 
301
        <cell align="left" valign="middle">ber bin</cell>
 
302
        <cell align="right" valign="middle">165</cell>
 
303
        <cell align="right" valign="middle">46 (45)</cell>
 
304
        <cell align="right" valign="middle">71 (70)</cell>
 
305
        <cell align="right" valign="middle">116 (115)</cell>
 
306
      </row>
 
307
      <row>
 
308
        <cell align="left" valign="middle">ber bin [driver]</cell>
 
309
        <cell align="right" valign="middle">165</cell>
 
310
        <cell align="right" valign="middle">46 (45)</cell>
 
311
        <cell align="right" valign="middle">51 (51)</cell>
 
312
        <cell align="right" valign="middle">97 (96)</cell>
 
313
      </row>
 
314
      <row>
 
315
        <cell align="left" valign="middle">ber bin [native]</cell>
 
316
        <cell align="right" valign="middle">165</cell>
 
317
        <cell align="right" valign="middle">26 (26)</cell>
 
318
        <cell align="right" valign="middle">48 (47)</cell>
 
319
        <cell align="right" valign="middle">74 (73)</cell>
 
320
      </row>
 
321
      <row>
 
322
        <cell align="left" valign="middle">ber bin [driver,native]</cell>
 
323
        <cell align="right" valign="middle">165</cell>
 
324
        <cell align="right" valign="middle">26 (26)</cell>
 
325
        <cell align="right" valign="middle">29 (28)</cell>
 
326
        <cell align="right" valign="middle">54 (54)</cell>
 
327
      </row>
 
328
 
 
329
      <!-- BER + HIPE + INLINE -->
 
330
      <row>
 
331
        <cell align="left" valign="middle"><c>ber bin hipe+inline</c></cell>
 
332
        <cell align="right" valign="middle"><c>165</c></cell>
 
333
        <cell align="right" valign="middle"><c>24 (24)</c></cell>
 
334
        <cell align="right" valign="middle"><c>41 (41)</c></cell>
 
335
        <cell align="right" valign="middle"><c>65 (65)</c></cell>
 
336
      </row>
 
337
      <row>
 
338
        <cell align="left" valign="middle"><c>ber bin [driver] hipe+inline</c></cell>
 
339
        <cell align="right" valign="middle"><c>165</c></cell>
 
340
        <cell align="right" valign="middle"><c>24 (24)</c></cell>
 
341
        <cell align="right" valign="middle"><c>30 (30)</c></cell>
 
342
        <cell align="right" valign="middle"><c>54 (54)</c></cell>
 
343
      </row>
 
344
      <row>
 
345
        <cell align="left" valign="middle"><c>ber bin [native] hipe+inline</c></cell>
 
346
        <cell align="right" valign="middle"><c>165</c></cell>
 
347
        <cell align="right" valign="middle"><c>14 (14)</c></cell>
 
348
        <cell align="right" valign="middle"><c>31 (31)</c></cell>
 
349
        <cell align="right" valign="middle"><c>45 (45)</c></cell>
 
350
      </row>
 
351
      <row>
 
352
        <cell align="left" valign="middle"><c>ber bin [driver,native] hipe+inline</c></cell>
 
353
        <cell align="right" valign="middle"><c>165</c></cell>
 
354
        <cell align="right" valign="middle"><c>14 (14)</c></cell>
 
355
        <cell align="right" valign="middle"><c>20 (20)</c></cell>
 
356
        <cell align="right" valign="middle"><c>34 (34)</c></cell>
 
357
      </row>
 
358
 
 
359
      <!-- ERLANG -->
 
360
      <row>
 
361
        <cell align="left" valign="middle">erl_dist</cell>
 
362
        <cell align="right" valign="middle">875</cell>
 
363
        <cell align="right" valign="middle">7 (7)</cell>
 
364
        <cell align="right" valign="middle">13 (13)</cell>
 
365
        <cell align="right" valign="middle">20 (20)</cell>
 
366
      </row>
 
367
      <row>
 
368
        <cell align="left" valign="middle">erl_dist [megaco_compressed]</cell>
 
369
        <cell align="right" valign="middle">405</cell>
 
370
        <cell align="right" valign="middle">8 (8)</cell>
 
371
        <cell align="right" valign="middle">9 (9)</cell>
 
372
        <cell align="right" valign="middle">17 (17)</cell>
 
373
      </row>
 
374
      <row>
 
375
        <cell align="left" valign="middle">erl_dist [compressed]</cell>
 
376
        <cell align="right" valign="middle">345</cell>
 
377
        <cell align="right" valign="middle">143 (142)</cell>
 
378
        <cell align="right" valign="middle">31 (31)</cell>
 
379
        <cell align="right" valign="middle">174 (173)</cell>
 
380
      </row>
 
381
      <row>
 
382
        <cell align="left" valign="middle">erl_dist [megaco_compressed,compressed]</cell>
 
383
        <cell align="right" valign="middle">200</cell>
 
384
        <cell align="right" valign="middle">119 (111)</cell>
 
385
        <cell align="right" valign="middle">17 (18)</cell>
 
386
        <cell align="right" valign="middle">137 (129)</cell>
 
387
      </row>
 
388
 
 
389
      <!-- ERLANG + HIPE -->
 
390
      <row>
 
391
        <cell align="left" valign="middle"><c>erl_dist hipe</c></cell>
 
392
        <cell align="right" valign="middle"><c>875</c></cell>
 
393
        <cell align="right" valign="middle"><c>7 (7)</c></cell>
 
394
        <cell align="right" valign="middle"><c>13 (13)</c></cell>
 
395
        <cell align="right" valign="middle"><c>20 (20)</c></cell>
 
396
      </row>
 
397
      <row>
 
398
        <cell align="left" valign="middle"><c>erl_dist [megaco_compressed] hipe</c></cell>
 
399
        <cell align="right" valign="middle"><c>405</c></cell>
 
400
        <cell align="right" valign="middle"><c>6 (6)</c></cell>
 
401
        <cell align="right" valign="middle"><c>6 (6)</c></cell>
 
402
        <cell align="right" valign="middle"><c>12 (12)</c></cell>
 
403
      </row>
 
404
      <row>
 
405
        <cell align="left" valign="middle"><c>erl_dist [compressed] hipe</c></cell>
 
406
        <cell align="right" valign="middle"><c>345</c></cell>
 
407
        <cell align="right" valign="middle"><c>135 (130)</c></cell>
 
408
        <cell align="right" valign="middle"><c>30 (29)</c></cell>
 
409
        <cell align="right" valign="middle"><c>165 (159)</c></cell>
 
410
      </row>
 
411
      <row>
 
412
        <cell align="left" valign="middle"><c>erl_dist [megaco_compressed,compressed] hipe</c></cell>
 
413
        <cell align="right" valign="middle"><c>200</c></cell>
 
414
        <cell align="right" valign="middle"><c>107 (108)</c></cell>
 
415
        <cell align="right" valign="middle"><c>14 (14)</c></cell>
 
416
        <cell align="right" valign="middle"><c>121 (122)</c></cell>
 
417
      </row>
 
418
      <tcaption>Codec performance</tcaption>
 
419
    </table>
 
420
  </section>
 
421
 
 
422
  <section>
 
423
    <title>Summary</title>
 
424
    <p>In our measurements we have seen that there are no significant 
 
425
      differences in message sizes between ASN.1 BER and the compact 
 
426
      text format. Some care should be taken when using the pretty text 
 
427
      style (which is used in all the examples included in the protocol 
 
428
      specification and preferred during debugging sessions) since the 
 
429
      messages can then be quite large. If the message size really is a 
 
430
      serious issue, our per encoder should be used, as the ASN.1 PER 
 
431
      format is much more compact than all the other alternatives. Its 
 
432
      major drawback is that it is has not been approved as a valid 
 
433
      Megaco/H.248 message encoding.</p>
 
434
    <p>When it comes to pure encode/decode performance, it turns out that:</p>
 
435
    <list type="bulleted"> 
 
436
      <item>
 
437
        <p>our fastest binary encoder (ber) is about equal 
 
438
          to our fastest text encoder (compact). </p>
 
439
      </item>
 
440
      <item>
 
441
        <p>our fastest binary decoder (ber) is about 26% (47%) faster than our 
 
442
          fastest text decoder (compact). </p>
 
443
      </item>
 
444
    </list> 
 
445
    <p>If the pure encode/decode performance really is a serious issue, our 
 
446
      erl_dist encoder could be used, as the encoding/decoding of the 
 
447
      erlang distribution format is much faster than all the other 
 
448
      alternatives. Its major drawback is that it is has not been approved 
 
449
      as a valid Megaco/H.248 message encoding.</p>
 
450
    <note>
 
451
      <p>Please, observe that these performance figures are related to our 
 
452
        implementation in Erlang/OTP. Measurements of other implementations 
 
453
        using other tools and techniques may of course result in other 
 
454
        figures. </p>
 
455
    </note>
 
456
  </section>
 
457
</chapter>
 
458