mirror of
https://github.com/wahyd4/gitlabhq.git
synced 2026-08-11 21:56:19 +10:00
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.
48 lines
1.1 KiB
Ruby
48 lines
1.1 KiB
Ruby
require 'spec_helper'
|
|
|
|
describe Gitlab::Metrics::System do
|
|
if File.exist?('/proc')
|
|
describe '.memory_usage' do
|
|
it "returns the process' memory usage in bytes" do
|
|
expect(described_class.memory_usage).to be > 0
|
|
end
|
|
end
|
|
|
|
describe '.file_descriptor_count' do
|
|
it 'returns the amount of open file descriptors' do
|
|
expect(described_class.file_descriptor_count).to be > 0
|
|
end
|
|
end
|
|
else
|
|
describe '.memory_usage' do
|
|
it 'returns 0.0' do
|
|
expect(described_class.memory_usage).to eq(0.0)
|
|
end
|
|
end
|
|
|
|
describe '.file_descriptor_count' do
|
|
it 'returns 0' do
|
|
expect(described_class.file_descriptor_count).to eq(0)
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '.cpu_time' do
|
|
it 'returns a Float' do
|
|
expect(described_class.cpu_time).to be_an_instance_of(Float)
|
|
end
|
|
end
|
|
|
|
describe '.real_time' do
|
|
it 'returns a Float' do
|
|
expect(described_class.real_time).to be_an_instance_of(Float)
|
|
end
|
|
end
|
|
|
|
describe '.monotonic_time' do
|
|
it 'returns a Float' do
|
|
expect(described_class.monotonic_time).to be_an_instance_of(Float)
|
|
end
|
|
end
|
|
end
|