Precise timings with `monotonic_time`
Monotonic time is time from a clock that only moves forward. The system clock on your CPU can be set and reset. Even when tied to the LAN ntp protocol the system clock can be out-of-sync by a couple of milliseconds. When measuring in microseconds, that's a lot of time, and time drift can occur at the microsecond level even when attached to NTP, requiring system clock resets.
To get monotonic time in Elixir use,
iex> System.monotonic_time -576460718338896000 iex> System.monotonic_time -576460324867892860
It's ok that this number is negative, it's always moving positive.
The number has a time unit of
:native. To get a duration in millseconds you could convert from
iex> event_time = System.monotonic_time -576459417748861340 iex> System.convert_time_unit(System.monotonic_time - event_time, :native, :millisecond) 38803
Or you could get a millisecond duration by using the one argument of
monotonic_time to specify the time unit you want.
iex> event_time = System.monotonic_time(:millisecond) -576459079381 iex> System.monotonic_time(:millisecond) - event_time 14519
Check out the elixir docs on time for more info.Tweet