[comp.windows.x] More SunOS malloc vs GNU malloc: GNU really wins,

kaleb@THYME.JPL.NASA.GOV (Kaleb Keithley) (08/31/90)

Well, as Chris Peterson pointed out, there were some major discrepancies
in the timings I made using different versions of malloc; so I re-ran my
tests, and GNU is indeed faster.

I built three servers: Server 1 using SunOS 4.1 malloc, Server 2 using
GNU emacs malloc, and Server 3 using GNUs' alpha release malloc.  All
servers and mallocs were built using -O3 -pg, with the exception of Suns'
malloc which I don't have control over.  After building the servers, I
started the server from the command line, ran the x11perf benchmark, and
gprof'd the gmon.out file.  x11perf took about one hour, 45 minutes to run
to completion (-all option.)  Attached are the relevant sections from the
gprof and the x11perfcomp output.

BTW, the test was run on a Sun SS1 with CG3, and 8MB RAM.

In summary, use of GNUs' emacs malloc() and free() saved 65 seconds and
150 seconds respectively, or just under three minutes out of the test run;
Around 3.5% if my math is correct.  So, is it worth it?  I'd say on a
slower machine, it probably is, it almost isn't worth it on the SPARC.
On a faster machine, I'd guess it definitely isn't worth it unless you
have an exceptionally poor implementation of malloc.

malloc gprofs:

SunOS malloc:
                0.00        0.00       1/6649310     _dbm_open [550]
                0.00        0.00       1/6649310     __default_domain [767]
                0.00        0.00       1/6649310     _load_dom_binding [591]
                0.00        0.00       2/6649310     __findbuf [628]
                0.00        0.00       2/6649310     _on_exit [757]
                0.00        0.00       2/6649310     _clntudp_bufcreate [621]
                0.00        0.00       3/6649310     _calloc [737]
                0.00        0.00      28/6649310     _v2domatch [475]
                0.00        0.00      28/6649310     _xdr_bytes [607]
                0.00        0.00     140/6649310     _makenode [626]
                0.17        0.10   13889/6649310     _Xrealloc [162]
                0.22        0.13   17715/6649310     _realloc [171]
               80.61       49.79 6617498/6649310     _Xalloc [57]
[63]     2.4   81.00       50.03 6649310         _malloc [63]
               43.41        0.00 5745550/5745550     _demote [118]
                3.28        2.94  903760/6954542     _delete [111]
                0.36        0.03      81/81          _morecore [338]

------------------------------------------------------------------------

GNU alpha malloc:
                                  224678             _malloc [75]
                0.00        0.00       1/7779831     _dbm_open [567]
                0.00        0.00       1/7779831     __default_domain [749]
                0.00        0.00       1/7779831     _load_dom_binding [591]
                0.00        0.00       2/7779831     __findbuf [479]
                0.00        0.00       2/7779831     _on_exit [743]
                0.00        0.00       2/7779831     _clntudp_bufcreate [604]
                0.00        0.00       3/7779831     _calloc [721]
                0.00        0.00      28/7779831     _v2domatch [510]
                0.00        0.00      28/7779831     _xdr_bytes [627]
                0.00        0.00     140/7779831     _makenode [608]
                0.17        0.01   13893/7779831     _Xrealloc [175]
                4.22        0.28  348143/7779831     _realloc [187]
               90.00        5.95 7417587/7779831     _Xalloc [67]
[75]     1.8   94.40        6.24 7779831+224678  _malloc [75]
                0.30        5.44    8937/8937        _morecore [223]
                0.01        0.49     849/10780       ___default_morecore [219]
                0.00        0.00       1/1           _initialize [638]
                                  224678             _malloc [75]

------------------------------------------------------------------------

GNU emacs malloc:
                0.00        0.00       1/8155300     _dbm_open [577]
                0.00        0.00       1/8155300     __default_domain [762]
                0.00        0.00       1/8155300     _load_dom_binding [631]
                0.00        0.00       2/8155300     __findbuf [622]
                0.00        0.00       2/8155300     _on_exit [757]
                0.00        0.00       2/8155300     _clntudp_bufcreate [632]
                0.00        0.00       3/8155300     _calloc [737]
                0.00        0.00      28/8155300     _v2domatch [462]
                0.00        0.00      28/8155300     _xdr_bytes [652]
                0.00        0.00     140/8155300     _makenode [627]
                0.11        0.00   13893/8155300     _Xrealloc [204]
                2.22        0.02  271829/8155300     _realloc [221]
               64.22        0.48 7869370/8155300     _Xalloc [85]
[96]     1.3   66.56        0.49 8155300         _malloc [96]
                0.03        0.46     727/727         _morecore [323]

------------------------------------------------------------------------

free gprofs:

SunOS free:
                0.00        0.00       2/6954557     _fclose [548]
                0.00        0.00      28/6954557     _gethostbyname [404]
                0.00        0.00      28/6954557     _xdr_bytes [607]
                0.00        0.00      70/6954557     _freenode [637]
                0.00        0.00      81/6954557     _morecore [338]
                0.16        0.29   17715/6954557     _realloc [171]
                2.74        5.06  306612/6954557     _shrink [205]
               59.15      109.34 6630021/6954557     _Xfree [47]
[46]     3.2   62.05      114.69 6954557         _free [46]
               54.47       19.51 6954557/6954557     _insert [95]
               21.47       19.24 5907584/6954542     _delete [111]

------------------------------------------------------------------------

GNU alpha free:
                0.00        0.00       2/7786430     _fclose [748]
                0.00        0.00      28/7786430     _gethostbyname [427]
                0.00        0.00      28/7786430     _xdr_bytes [627]
                0.00        0.00      70/7786430     _freenode [631]
                3.48        0.46  356188/7786430     _realloc [187]
               72.57        9.54 7430114/7786430     _Xfree [80]
[82]     1.6   76.05       10.00 7786430         _free [82]
                9.41        0.00 8011082/13984534     .div [158]
                0.01        0.58     992/10780       ___default_morecore [219]

------------------------------------------------------------------------

GNU emacs free:
                0.00        0.00       2/8153854     _fclose [494]
                0.00        0.00      28/8153854     _gethostbyname [421]
                0.00        0.00      28/8153854     _xdr_bytes [652]
                0.00        0.00      70/8153854     _freenode [682]
                0.94        0.00  271829/8153854     _realloc [221]
               27.19        0.00 7881897/8153854     _Xfree [131]
[135]    0.5   28.13        0.00 8153854         _free [135]

------------------------------------------------------------------------

and lastly x11perfcomp report:

1: Xsun.test
2: alpha.test
3: emacs.test

     1         2         3    Operation
--------  --------  --------  ---------
102000.0  105000.0  106000.0  Dot
 36800.0   37500.0   37400.0  1x1 rectangle
 17200.0   17700.0   17700.0  10x10 rectangle
   675.0     676.0     677.0  100x100 rectangle
    30.0      30.0      30.1  500x500 rectangle
 15400.0   16100.0   16100.0  1x1 stippled rectangle
  3160.0    3180.0    3180.0  10x10 stippled rectangle
   220.0     220.0     220.0  100x100 stippled rectangle
    16.2      16.3      16.2  500x500 stippled rectangle
 18500.0   19000.0   19500.0  1x1 opaque stippled rectangle
  4800.0    4830.0    4820.0  10x10 opaque stippled rectangle
   340.0     337.0     340.0  100x100 opaque stippled rectangle
    24.5      24.6      24.6  500x500 opaque stippled rectangle
 26000.0   28700.0   28400.0  1x1 4x4 tiled rectangle
 14300.0   14700.0   14700.0  10x10 4x4 tiled rectangle
   654.0     654.0     656.0  100x100 4x4 tiled rectangle
    29.8      29.8      29.8  500x500 4x4 tiled rectangle
 16800.0   17400.0   17500.0  1x1 161x145 tiled rectangle
  6470.0    6550.0    6550.0  10x10 161x145 tiled rectangle
   243.0     243.0     242.0  100x100 161x145 tiled rectangle
    11.3      11.3      11.3  500x500 161x145 tiled rectangle
 33200.0   36700.0   35400.0  1-pixel line segment
 26500.0   28700.0   28300.0  10-pixel line segment
 12000.0   12500.0   12400.0  100-pixel line segment
  3530.0    3570.0    3560.0  500-pixel line segment
  8110.0    8550.0    8540.0  100-pixel line segment (1 kid)
  6080.0    6640.0    6630.0  100-pixel line segment (2 kids)
  5230.0    5550.0    5540.0  100-pixel line segment (3 kids)
 17000.0   18200.0   18100.0  10-pixel dashed segment
  5140.0    5240.0    5240.0  100-pixel dashed segment
  4670.0    4750.0    4750.0  100-pixel double-dashed segment
 39900.0   40900.0   39400.0  1-pixel line
 31400.0   31500.0   31000.0  10-pixel line
 12900.0   12900.0   12800.0  100-pixel line
  3610.0    3610.0    3610.0  500-pixel line
 18500.0   19600.0   19500.0  10-pixel dashed line
  5260.0    5350.0    5350.0  100-pixel dashed line
  4770.0    4840.0    4840.0  100-pixel double-dashed line
  1950.0    1860.0    1930.0  10x1 wide line
   551.0     485.0     548.0  100x10 wide line
    95.4      85.5      94.9  500x50 wide line
   242.0     224.0     240.0  100x10 wide dashed line
   212.0     202.0     211.0  100x10 wide double-dashed line
 14400.0   14500.0   12600.0  1-pixel circle
 10500.0   10500.0    9130.0  10-pixel circle
  4090.0    4090.0    3860.0  100-pixel circle
  1150.0    1150.0    1130.0  500-pixel circle
   309.0     273.0     310.0  100-pixel dashed circle
   219.0     189.0     219.0  100-pixel double-dashed circle
   223.0     225.0     236.0  10-pixel wide circle
    51.0      54.2      55.8  100-pixel wide circle
    10.8      11.2      11.5  500-pixel wide circle
    14.4      15.2      15.3  100-pixel wide dashed circle
    11.9      11.3      12.3  100-pixel wide double-dashed circle
  5750.0    5850.0    5610.0  10-pixel partial circle
  2180.0    2170.0    2150.0  100-pixel partial circle
 92400.0   94100.0   93800.0  1-pixel solid circle
  7360.0    7660.0    7450.0  10-pixel solid circle
   597.0     599.0     599.0  100-pixel solid circle
    35.3      35.3      35.4  500-pixel solid circle
  2810.0    2880.0    2900.0  10-pixel fill chord partial circle
   597.0     605.0     603.0  100-pixel fill chord partial circle
  2920.0    3020.0    2960.0  10-pixel fill slice partial circle
   590.0     607.0     602.0  100-pixel fill slice partial circle
  9380.0    9480.0    8810.0  10-pixel ellipse
  3560.0    3560.0    3480.0  100-pixel ellipse
   953.0     952.0     946.0  500-pixel ellipse
   373.0     330.0     374.0  100-pixel dashed ellipse
   265.0     229.0     264.0  100-pixel double-dashed ellipse
   102.0     106.0     108.0  10-pixel wide ellipse
    17.2      17.3      17.6  100-pixel wide ellipse
     3.8       3.8       3.8  500-pixel wide ellipse
     6.3       6.4       6.4  100-pixel wide dashed ellipse
     3.9       3.9       3.9  100-pixel wide double-dashed ellipse
  5170.0    5240.0    5040.0  10-pixel partial ellipse
  2370.0    2380.0    2340.0  100-pixel partial ellipse
  7880.0    8200.0    7870.0  10-pixel filled ellipse
   977.0     983.0     980.0  100-pixel filled ellipse
    67.4      67.5      67.5  500-pixel filled ellipse
  2920.0    2990.0    3010.0  10-pixel fill chord partial ellipse
  1000.0    1020.0    1020.0  100-pixel fill chord ellipse
  3050.0    3150.0    3080.0  10-pixel fill slice partial ellipse
  1000.0    1020.0     990.0  100-pixel fill slice ellipse
  3930.0    3780.0    3860.0  Fill 1-pixel/side triangle
  2340.0    2130.0    2320.0  Fill 10-pixel/side triangle
   292.0     263.0     293.0  Fill 100-pixel/side triangle
  2780.0    2550.0    2770.0  Fill 10x10 trapezoid
   348.0     321.0     350.0  Fill 100x100 trapezoid
   940.0     968.0     966.0  Fill 10x10 stippled trapezoid
    20.7      20.0      20.3  Fill 100x100 stippled trapezoid
   965.0    1010.0     996.0  Fill 10x10 opaque stippled trapezoid
    21.7      22.1      22.1  Fill 100x100 opaque stippled trapezoid
   855.0     946.0     888.0  Fill 10x10 tiled trapezoid
    17.3      18.5      17.8  Fill 100x100 tiled trapezoid
  1410.0    1330.0    1450.0  Fill 10-pixel/side complex polygon
   213.0     189.0     214.0  Fill 100-pixel/side complex polygons
 24200.0   24200.0   24000.0  Char in 80-char line (6x13)
 33200.0   33300.0   33400.0  Char in 80-char line (TR 10)
 11600.0   11700.0   11700.0  Char in 30-char line (TR 24)
 23700.0   23900.0   23800.0  Char in 20/40/20 line (6x13, TR 10)
 43900.0   47700.0   47800.0  Char in 80-char image line (6x13)
 22000.0   22000.0   22000.0  Char in 80-char image line (TR 10)
  6990.0    7020.0    7040.0  Char in 30-char image line (TR 24)
  3900.0    3840.0    4020.0  Scroll 10x10 pixels
   394.0     393.0     394.0  Scroll 100x100 pixels
    19.0      19.0      19.0  Scroll 500x500 pixels
  3700.0    3600.0    3800.0  Copy 10x10 from window to window
   347.0     346.0     348.0  Copy 100x100 from window to window
    16.7      16.8      16.9  Copy 500x500 from window to window
  3980.0    3800.0    4010.0  Copy 10x10 from pixmap to window
   423.0     420.0     423.0  Copy 100x100 from pixmap to window
    20.0      20.0      20.0  Copy 500x500 from pixmap to window
  3850.0    3830.0    3990.0  Copy 10x10 from window to pixmap
   345.0     345.0     346.0  Copy 100x100 from window to pixmap
    16.6      16.6      16.6  Copy 500x500 from window to pixmap
  4450.0    4440.0    4700.0  Copy 10x10 from pixmap to pixmap
   468.0     467.0     469.0  Copy 100x100 from pixmap to pixmap
    22.0      22.0      22.0  Copy 500x500 from pixmap to pixmap
  3490.0    3340.0    3560.0  Copy 10x10 1-bit deep plane
   417.0     416.0     419.0  Copy 100x100 1-bit deep plane
    22.9      22.9      22.9  Copy 500x500 1-bit deep plane
  2210.0    2200.0    2300.0  PutImage 10x10 square
    79.8      80.2      79.0  PutImage 100x100 square
     3.5       3.6       3.6  PutImage 500x500 square
   354.0     364.0     367.0  GetImage 10x10 square
    97.3      94.5      96.5  GetImage 100x100 square
     5.1       5.2       5.1  GetImage 500x500 square
 29900.0   41000.0   37100.0  X protocol NoOperation
   439.0     454.0     452.0  GetAtomName
   434.0     448.0     441.0  GetProperty
  4540.0    4900.0    4680.0  Change graphics context
  1160.0    3060.0    3540.0  Create and map subwindows (4 kids)
  1010.0    1080.0    1220.0  Create and map subwindows (16 kids)
  1030.0    1090.0    1230.0  Create and map subwindows (25 kids)
  1020.0    1090.0    1210.0  Create and map subwindows (50 kids)
  1010.0    1080.0    1200.0  Create and map subwindows (75 kids)
  1000.0    1070.0    1180.0  Create and map subwindows (100 kids)
   960.0    1030.0    1120.0  Create and map subwindows (200 kids)
  2250.0    2230.0    2520.0  Create unmapped window (4 kids)
  2240.0    2430.0    2550.0  Create unmapped window (16 kids)
  2260.0    2430.0    2540.0  Create unmapped window (25 kids)
  2260.0    2450.0    2520.0  Create unmapped window (50 kids)
  2240.0    2490.0    2560.0  Create unmapped window (75 kids)
  2260.0    2500.0    2540.0  Create unmapped window (100 kids)
  2260.0    2510.0    2530.0  Create unmapped window (200 kids)
  1170.0    1290.0    1560.0  Map window via parent (4 kids)
  1700.0    1820.0    2170.0  Map window via parent (16 kids)
  1800.0    1940.0    2310.0  Map window via parent (25 kids)
  1850.0    1960.0    2320.0  Map window via parent (50 kids)
  1870.0    1970.0    2320.0  Map window via parent (75 kids)
  1890.0    1980.0    2360.0  Map window via parent (100 kids)
  1910.0    2000.0    2370.0  Map window via parent (200 kids)
  5310.0    5840.0    6120.0  Unmap window via parent (4 kids)
 12400.0   12800.0   13300.0  Unmap window via parent (16 kids)
 14200.0   15200.0   15500.0  Unmap window via parent (25 kids)
 17400.0   17800.0   17900.0  Unmap window via parent (50 kids)
 18500.0   18300.0   19000.0  Unmap window via parent (75 kids)
 19200.0   19000.0   19600.0  Unmap window via parent (100 kids)
 20300.0   19900.0   20500.0  Unmap window via parent (200 kids)
  1310.0    2580.0    3020.0  Destroy window via parent (4 kids)
  3310.0    4140.0    4890.0  Destroy window via parent (16 kids)
  3780.0    4450.0    5270.0  Destroy window via parent (25 kids)
  4200.0    4770.0    5620.0  Destroy window via parent (50 kids)
  4320.0    4890.0    5770.0  Destroy window via parent (75 kids)
  4430.0    4970.0    5840.0  Destroy window via parent (100 kids)
  4490.0    5070.0    5940.0  Destroy window via parent (200 kids)
   487.0     588.0     709.0  Hide/expose window via popup (4 kids)
   864.0    1000.0    1190.0  Hide/expose window via popup (16 kids)
   953.0    1090.0    1300.0  Hide/expose window via popup (25 kids)
   978.0    1120.0    1330.0  Hide/expose window via popup (50 kids)
  1020.0    1150.0    1360.0  Hide/expose window via popup (75 kids)
  1050.0    1160.0    1380.0  Hide/expose window via popup (100 kids)
  1080.0    1190.0    1400.0  Hide/expose window via popup (200 kids)
   460.0     546.0     611.0  Move window (4 kids)
   355.0     398.0     456.0  Move window (16 kids)
   321.0     348.0     391.0  Move window (25 kids)
   244.0     253.0     292.0  Move window (50 kids)
   203.0     213.0     230.0  Move window (75 kids)
   178.0     180.0     190.0  Move window (100 kids)
   110.0     115.0     111.0  Move window (200 kids)
  4720.0    5230.0    5010.0  Moved unmapped window (4 kids)
  4780.0    5220.0    4980.0  Moved unmapped window (16 kids)
  4730.0    5200.0    4960.0  Moved unmapped window (25 kids)
  4750.0    5160.0    4910.0  Moved unmapped window (50 kids)
  4740.0    5160.0    4910.0  Moved unmapped window (75 kids)
  4720.0    5120.0    4890.0  Moved unmapped window (100 kids)
  4660.0    5080.0    4830.0  Moved unmapped window (200 kids)
  1340.0    1620.0    1840.0  Move window via parent (4 kids)
  2780.0    3280.0    3660.0  Move window via parent (16 kids)
  3220.0    3750.0    4160.0  Move window via parent (25 kids)
  3700.0    4290.0    4730.0  Move window via parent (50 kids)
  3850.0    4510.0    4930.0  Move window via parent (75 kids)
  3970.0    4520.0    5020.0  Move window via parent (100 kids)
  4160.0    4710.0    5180.0  Move window via parent (200 kids)
   423.0     512.0     572.0  Resize window (4 kids)
   359.0     413.0     453.0  Resize window (16 kids)
   329.0     361.0     410.0  Resize window (25 kids)
   263.0     275.0     320.0  Resize window (50 kids)
   227.0     239.0     261.0  Resize window (75 kids)
   202.0     205.0     221.0  Resize window (100 kids)
   132.0     137.0     136.0  Resize window (200 kids)
  4770.0    5390.0    5050.0  Resize unmapped window (4 kids)
  4870.0    5370.0    5000.0  Resize unmapped window (16 kids)
  4810.0    5300.0    5030.0  Resize unmapped window (25 kids)
  4840.0    5290.0    5010.0  Resize unmapped window (50 kids)
  4810.0    5290.0    4980.0  Resize unmapped window (75 kids)
  4800.0    5270.0    4980.0  Resize unmapped window (100 kids)
  4770.0    5210.0    4930.0  Resize unmapped window (200 kids)
   184.0     223.0     264.0  Circulate window (4 kids)
   128.0     155.0     181.0  Circulate window (16 kids)
   125.0     145.0     171.0  Circulate window (25 kids)
   115.0     136.0     159.0  Circulate window (50 kids)
   109.0     133.0     150.0  Circulate window (75 kids)
   105.0     128.0     142.0  Circulate window (100 kids)
    92.9     107.0     117.0  Circulate window (200 kids)
 15200.0   18000.0   15200.0  Circulate Unmapped window (4 kids)
 13800.0   15800.0   13900.0  Circulate Unmapped window (16 kids)
 11000.0   14600.0   12700.0  Circulate Unmapped window (25 kids)
 10200.0   11400.0   10500.0  Circulate Unmapped window (50 kids)
  8940.0    9710.0    8060.0  Circulate Unmapped window (75 kids)
  7860.0    8360.0    5970.0  Circulate Unmapped window (100 kids)
  5140.0    4780.0    3130.0  Circulate Unmapped window (200 kids)