[Tarantool-patches] [PATCH v1 luajit 16/41] perf: adjust meteor in LuaJIT-benches

Sergey Kaplun skaplun at tarantool.org
Fri Dec 26 11:23:11 MSK 2025


Hi, Sergey!
Thanks for the review!
Please considery my answers below.

On 23.12.25, Sergey Bronnikov wrote:
> Hello,
> 
> thanks for the patch! See my comments.
> 
> Sergey
> 
> 
> On 10/24/25 13:50, Sergey Kaplun wrote:
> > This patch adjusts the aforementioned test to use the benchmark
> > framework introduced before. The arguments to the script still can be
> > provided in the command line run. However, the values greater than the
> > maximum possible solutions found do not affect the time of execution for
> > this benchmark. Hence, the number of items to proceed is considered
> > constant as the maximum possible number of solutions.
> > ---
> >   perf/LuaJIT-benches/meteor.lua | 46 ++++++++++++++++++++++++++--------
> >   1 file changed, 36 insertions(+), 10 deletions(-)
> >
> > diff --git a/perf/LuaJIT-benches/meteor.lua b/perf/LuaJIT-benches/meteor.lua
> > index 80588ab5..f3962820 100644
> > --- a/perf/LuaJIT-benches/meteor.lua
> > +++ b/perf/LuaJIT-benches/meteor.lua
> > @@ -1,3 +1,4 @@

Added the comment with the short benchmark description, as we
discussed offline:

===================================================================
diff --git a/perf/LuaJIT-benches/meteor.lua b/perf/LuaJIT-benches/meteor.lua
index 7acb86af..8cda0190 100644
--- a/perf/LuaJIT-benches/meteor.lua
+++ b/perf/LuaJIT-benches/meteor.lua
@@ -1,3 +1,8 @@
+-- Benchmark to check various operations via the Meteor puzzle
+-- solver.
+-- For the details see:
+-- https://pybenchmarks.org/u64q/performance.php?test=meteor
+
 local bench = require("bench").new(arg)
 
 -- Generate a decision tree based solver for the meteor puzzle.
===================================================================

> > +local bench = require("bench").new(arg)
> >   
> >   -- Generate a decision tree based solver for the meteor puzzle.
> >   local function generatesolver(countinit)
> > @@ -118,6 +119,10 @@ local function printresult()
> >     printboard(smax)
> >   end
> >   
> > +local function getresult()
> > +  return countinit-count, smin, smax
> > +end
> > +
> >   -- Generate piece lookup array from the order of use.
> >   local function genp()
> >     local p = pcs
> > @@ -141,7 +146,7 @@ local function f91(k)
> >       local s = p[b0] ]]
> >     for p=2,99 do if ok[p] then s = s.."..p[b"..p.."]" end end
> please add more whitespaces. Here and below.

This part wasn't touched by the patch. Let's leave this chunk as is in
the original state. If we want to refactor it, this should be carefully
done when we have the stable performance testing so we may verify that
our changes don't affect the measurements. All stylistic fixes should be
done only in cases when we have already touched the code. Without it,
these changes have no sense to me. Most probably, we will never refactor
this code, but we will add new tests in our own perf suite.

> >     s = s..[[
> > -    -- Remember min/max boards, dito for the symmetric board.
> > +    -- Remember min/max boards, ditto for the symmetric board.
> >       if not smin then smin = s; smax = s
> >       elseif s < smin then smin = s elseif s > smax then smax = s end
> >       s = reverse(s)
> > @@ -206,15 +211,36 @@ local f93 = f91
> >     end
> >   
> >     -- Compile and return solver function and result getter.
> > -  return loadstring(s.."return f0, printresult\n", "solver")(countinit)
> > +  return loadstring(s.."return f0, printresult, getresult\n", "solver")(countinit)
> >   end
> >   
> > --- Generate the solver function hierarchy.
> > -local solver, printresult = generatesolver(tonumber(arg and arg[1]) or 10000)
> > -
> > --- The optimizer for LuaJIT 1.1.x is not helpful here, so turn it off.
> > -if jit and jit.opt and jit.version_num < 10200 then jit.opt.start(0) end
> > +local N = tonumber(arg and arg[1]) or 10000
> > +
> > +bench:add({
> > +  name = "meteror",
> typo: s/meteror/meteor/

Fixed, thanks!

===================================================================
diff --git a/perf/LuaJIT-benches/meteor.lua b/perf/LuaJIT-benches/meteor.lua
index f3962820..7acb86af 100644
--- a/perf/LuaJIT-benches/meteor.lua
+++ b/perf/LuaJIT-benches/meteor.lua
@@ -217,7 +217,7 @@ end
 local N = tonumber(arg and arg[1]) or 10000
 
 bench:add({
-  name = "meteror",
+  name = "meteor",
   setup = function()
     -- The optimizer for LuaJIT 1.1.x is not helpful here, so turn it off.
     if jit and jit.opt and jit.version_num < 10200 then jit.opt.start(0) end
===================================================================

> > +  setup = function()
> > +    -- The optimizer for LuaJIT 1.1.x is not helpful here, so turn it off.
> > +    if jit and jit.opt and jit.version_num < 10200 then jit.opt.start(0) end
> > +  end,
> > +  payload = function()
> > +    -- Generate the solver function hierarchy.
> > +    local solver, printresult, getresult = generatesolver(N)
> > +
> > +    -- Run the solver protected to get partial results (max count or ctrl-c).
> > +    pcall(solver, 0)
> > +
> > +    local n, smin, smax = getresult()
> > +    return {n = n, smin = smin, smax = smax}
> > +  end,
> > +  checker = function(res)
> > +    if N >= 2097 then
> > +      assert(res.n == 2098, "Incorrect solutions number")
> > +      assert(res.smin == "00001222012661126155865558633348893448934747977799")
> > +      assert(res.smax == "99998966856688568255777257472014220144031400311333")
> > +    end
> > +    return true
> > +  end,
> > +  items = 2098,
> > +})
> >   
> > --- Run the solver protected to get partial results (max count or ctrl-c).
> > -pcall(solver, 0)
> > -printresult()
> > +bench:run_and_report()

-- 
Best regards,
Sergey Kaplun


More information about the Tarantool-patches mailing list