[Mono-list] Mono/C# microbenchmarks

David Jeske jeske@chat.net
Mon, 19 Aug 2002 23:06:14 -0700


I finally have successfully built a semi-recent snapshot of the Mono
environment to run some microbenchmarks that make up a simple
scripting performance test suite and I figured someone might be
interseted. You can see some basic information about scriptperf here:

http://mozart.chat.net/~jeske/Projects/ScriptPerf/

  (the results posted there don't include C#, but the code is there)

Overall, the performance of Mono/C# is pretty darn close to the C
version. This is great given that mono is still very much a work in
progress. The MS.NET runtime fairs slightly better, especially
considering it's on a slightly slower CPU.

I'm somewhat surprised at how much faster the hashtable based
index_test and index_string_test come out in the C version. There must
be some nasty stuff going on in C# to get a unique hash value, particularly
for integers.

Oddly, Python seems to be in the same ballpark as C# on the index_test
and index_string_test. That leads me to believe it's some kind of
type-munging overhead taking the time, which absent from the C/glib
version.

[ linux tests are on a celeron 400, windows tests are on a P-II 300 ]

-- mono linux (C# version)

mozart:~/src/scriptperf> time mono scriptperf.exe
loop_test   500000 elapsed: 0.138
index_test   1000000 elapsed: 12.713
index_string_test   1000000 elapsed: 4.925
nested_int_test   23 elapsed: 0.113
nested_test   23 elapsed: 0.148
return_test   5000000 elapsed: 0.061
object_test   5000000 elapsed: 0.218
17.310u 0.750s 0:18.58 97.2%    0+0k 0+0io 767pf+0w
mozart:~/src/scriptperf> 

-- MS.NET Win2k (C# version)

C:\scriptperf_cs>scriptperf
loop_test   500000 elapsed: 0.09
index_test   1000000 elapsed: 7.911
index_string_test   1000000 elapsed: 1.472
nested_int_test   23 elapsed: 0.06
nested_test   23 elapsed: 0.06
return_test   5000000 elapsed: 0.05
object_test   5000000 elapsed: 0.13


-- gcc -O3 linux (C version)

mozart:~/src/scriptperf> gcc -O3 -o scriptperf_c -I/usr/include/glib-1.2 -I/usr/lib/glib/include -L/usr/lib -lglib scriptperf.c
mozart:~/src/scriptperf> time ./scriptperf_c
            fib_test (30) elapsed:  0.12 seconds
           loop_test (500000) elapsed:  0.04 seconds
          index_test (1000000) elapsed:  0.57 seconds
   index_string_test (1000000) elapsed:  1.11 seconds
     nested_int_test (23) elapsed:  0.04 seconds
          returntest (5000000) elapsed:  0.03 seconds
            functest (5000000) elapsed:  0.02 seconds
          objecttest (5000000) elapsed:  0.14 seconds
      file_line_test (1) elapsed:  1.74 seconds
file_line_split_test (1) elapsed:  2.43 seconds
    list_append_test (50000) elapsed:  0.01 seconds
  list_traverse_test (500000) elapsed:  0.15 seconds
6.010u 0.320s 0:06.40 98.9%     0+0k 0+0io 1231pf+0w


-- python1.5.2 linux (Python version)

mozart:~/src/scriptperf> time ./all_test.py
starting   
           loop_test(500000) elapsed: 9.54620301723 seconds
          index_test(1000000) elapsed: 5.96789705753 seconds
   index_string_test(1000000) elapsed: 4.21141695976 seconds
     nested_int_test(23) elapsed: 12.8061180115 seconds
          returntest(5000000) elapsed: 19.4322520494 seconds
            functest(5000000) elapsed: 18.1918109655 seconds
          objecttest(5000000) elapsed: 21.314817071 seconds
88.780u 1.830s 1:31.81 98.6%    0+0k 0+0io 262pf+0w

-- 
David Jeske (N9LCA) + http://www.chat.net/~jeske/ + jeske@chat.net