[erlang-questions] os:perf_counter/1 is slow

Michael Truog <>
Wed Aug 10 03:29:13 CEST 2016


Hi,

When I test the speed of os:perf_counter/1 as a potential source of 
pseudo-randomness from the microseconds result, the speed is slower than 
os:timestamp/0, erlang:monotonic_time/0 and erlang:system_time/1 which I 
found surprising, since the documentation claims os:perf_counter/1 
should be fast (http://erlang.org/doc/man/os.html#perf_counter-1).  
Should this be explained as a hardware problem due to lower-level 
instruction usage that is hardware dependent, or is this still being 
improved (it is new in 19.0)?

The results from https://github.com/okeuday/erlbench when I do "make" is:
N == 10000 (10 runs)
          18_bxor_abs get:     2507.1 us (  1.2)
18_erlang:system_tim get:     2095.7 us (  1.0)
         18_monotonic get:     2186.1 us (  1.0)
      18_rand_exs1024 get:    13539.0 us (  6.5)
        18_rand_exs64 get:    11205.1 us (  5.3)
      18_rand_exsplus get:     6171.4 us (  2.9)
19_os:perf_counter/1 get:     5214.4 us (  2.5)
crypto:rand_uniform/ get:    88909.9 us ( 42.4)
       os:timestamp/0 get:     2214.8 us (  1.1)
     random:uniform/1 get:     6058.7 us (  2.9)
random_wh06_int:unif get:    14252.9 us (  6.8)
random_wh82:uniform/ get:     6049.0 us (  2.9)
random_wh82_int:unif get:     6595.8 us (  3.1)

The machine is:
Core i7 2670QM 2.2GHz 1 cpu, 4 cores/cpu, 2 hts/core
L2:4×256KB L3:6MB RAM:8GB:DDR3-1333MHz
Sandy Bridge-HE-4 (Socket G2)

Thanks,
Michael



More information about the erlang-questions mailing list