gitlab-org--gitlab-foss/lib/gitlab/metrics
Yorick Peterse d7b4f36a3c
Use clock_gettime for all performance timestamps
Process.clock_gettime allows getting the real time in nanoseconds as
well as allowing one to get a monotonic timestamp. This offers greater
accuracy without the overhead of having to allocate a Time instance. In
general using Time.now/Time.new is about 2x slower than using
Process.clock_gettime(). For example:

    require 'benchmark/ips'

    Benchmark.ips do |bench|
      bench.report 'Time.now' do
        Time.now.to_f
      end

      bench.report 'clock_gettime' do
        Process.clock_gettime(Process::CLOCK_MONOTONIC, :millisecond)
      end

      bench.compare!
    end

Running this benchmark gives:

    Calculating -------------------------------------
                Time.now   108.052k i/100ms
           clock_gettime   125.984k i/100ms
    -------------------------------------------------
                Time.now      2.343M (± 7.1%) i/s -     11.670M
           clock_gettime      4.979M (± 0.8%) i/s -     24.945M

    Comparison:
           clock_gettime:  4979393.8 i/s
                Time.now:  2342986.8 i/s - 2.13x slower

Another benefit of using Process.clock_gettime() is that we can simplify
the code a bit since it can give timestamps in nanoseconds out of the
box.
2016-06-28 17:51:25 +02:00
..
subscribers Add cache count metrics to rails cache 2016-05-15 19:47:41 +01:00
delta.rb Storing of application metrics in InfluxDB 2015-12-17 17:25:48 +01:00
instrumentation.rb Track method call times/counts as a single metric 2016-06-17 13:09:55 -04:00
method_call.rb Use clock_gettime for all performance timestamps 2016-06-28 17:51:25 +02:00
metric.rb Use clock_gettime for all performance timestamps 2016-06-28 17:51:25 +02:00
rack_middleware.rb Filter out sensitive parameters of metrics data 2016-06-17 18:14:25 +02:00
sampler.rb Filter out classes without names in the sampler 2016-06-14 18:09:06 +02:00
sidekiq_middleware.rb Add Sidekiq queue duration to transaction metrics. 2016-06-23 13:09:52 +02:00
system.rb Use clock_gettime for all performance timestamps 2016-06-28 17:51:25 +02:00
transaction.rb Use clock_gettime for all performance timestamps 2016-06-28 17:51:25 +02:00