[Tarantool-patches] [PATCH v1 luajit 02/41] perf: introduce clock module

Sergey Bronnikov sergeyb at tarantool.org
Tue Nov 11 17:28:48 MSK 2025


Hi, Sergey!

thanks for the patch! Please see my comments.

Sergey

On 10/24/25 13:50, Sergey Kaplun wrote:
> This module contains 2 functions:
> - `realtime()` -- returns the time represented by the wall clock.
> - `process_cputime()` -- returns the time consumed by all threads of
>    the process.
I would rephrase second bullet: "to measure CPU time instead of elapsed 
time"
Also, I would add this description to the Lua module as well.
>
> Both functions are implemented via FFI call to the `clock_gettime()`.
> ---
>   perf/utils/clock.lua | 35 +++++++++++++++++++++++++++++++++++
>   1 file changed, 35 insertions(+)
>   create mode 100644 perf/utils/clock.lua
>
> diff --git a/perf/utils/clock.lua b/perf/utils/clock.lua
> new file mode 100644
> index 00000000..57385967
> --- /dev/null
> +++ b/perf/utils/clock.lua
> @@ -0,0 +1,35 @@
> +local ffi = require('ffi')
> +
> +ffi.cdef[[
> +struct timespec {
> +  long tv_sec; /* Seconds. */
> +  long tv_nsec; /* Nanoseconds. */
> +};
> +
> +int clock_gettime(int clockid, struct timespec *tp);
> +]]
> +
> +local C = ffi.C
> +
> +-- Wall clock.
> +local CLOCK_REALTIME = 0

  This clock is not a reliable source of the time. This clock can be 
adjusted by

NTP or manually or by timezones. It is better to use CLOCK_MONOTONIC or

even CLOCK_MONOTONIC_RAW (not portable, Linux-specific), it is more reliable

and does not depend on things listed above.

> +-- CPU time consumed by the process.
> +local CLOCK_PROCESS_CPUTIME_ID = 2
> +
> +-- All functions below returns the corresponding `clock_gettime()`
s/`clock_gettime()`/elapsed time/
> +-- in seconds.
> +local M = {}
> +
> +local timespec = ffi.new('struct timespec[1]')
> +
> +function M.realtime()
> +  C.clock_gettime(CLOCK_REALTIME, timespec)
> +  return tonumber(timespec[0].tv_sec) + tonumber(timespec[0].tv_nsec) / 1e9
> +end
> +

may be it is better to make conversion only once?

@@ -24,7 +24,7 @@ local timespec = ffi.new('struct timespec[1]')

  function M.realtime()
    C.clock_gettime(CLOCK_REALTIME, timespec)
-  return tonumber(timespec[0].tv_sec) + tonumber(timespec[0].tv_nsec) / 1e9
+  return tonumber(timespec[0].tv_sec + timespec[0].tv_nsec / 1e9)
  end

the same below

> +function M.process_cputime()
> +  C.clock_gettime(CLOCK_PROCESS_CPUTIME_ID, timespec)
> +  return tonumber(timespec[0].tv_sec) + tonumber(timespec[0].tv_nsec) / 1e9
> +end
> +
> +return M
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.tarantool.org/pipermail/tarantool-patches/attachments/20251111/0aa93208/attachment.htm>


More information about the Tarantool-patches mailing list