<!DOCTYPE html>
<html data-lt-installed="true">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body style="padding-bottom: 1px;">
<p>Hi, Sergey!</p>
<p>Thanks for the patch!</p>
<p>LGTM after submitting a new issue about investigating
CLOCK_REALTIME drawbacks</p>
<p>Sergey</p>
<div class="moz-cite-prefix">On 12/26/25 12:17, Sergey Kaplun wrote:<br>
</div>
<blockquote type="cite"
cite="mid:f21fdf1f169929a75e436bfe02fc633899339569.1766738771.git.skaplun@tarantool.org">
<pre wrap="" class="moz-quote-pre">This module contains 2 functions:
- `realtime()` -- returns the time represented by the wall clock.
- `process_cputime()` -- measures the CPU time instead of elapsed time.
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..cf708194
--- /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
+-- CPU time consumed by the process.
+local CLOCK_PROCESS_CPUTIME_ID = 2
+
+-- All functions below returns the corresponding 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
+
+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
</pre>
</blockquote>
</body>
<lt-container></lt-container>
</html>