```Tarantool development patches archive
help / color / mirror / Atom feed```
```From: Sergey Bronnikov via Tarantool-patches <tarantool-patches@dev.tarantool.org>
To: Sergey Kaplun <skaplun@tarantool.org>,
Roman Khabibov <roman.habibov@tarantool.org>
Cc: tarantool-patches@dev.tarantool.org
Subject: Re: [Tarantool-patches] [PATCH] serializer: serialize recursive structures
Date: Wed, 21 Apr 2021 16:12:58 +0300	[thread overview]
Message-ID: <092bc107-40cd-2c58-7a90-236663551249@tarantool.org> (raw)

On 21.04.2021 12:27, Sergey Kaplun via Tarantool-patches wrote:
> Hi!
>
> Thanks for the fixes and the benchmarks!

I propose an updated version of script and propose to add benchmark as a
part of patch series.

--[[
-- measure serialization time
-- run: taskset -c 1 tarantool perf.lua
]]

local clock = require('clock')

local function elapsed(f, n)
local t0 = clock.monotonic()
for i = 1, n do
f()
end
local t1 = clock.monotonic()
return t1 - t0
end

-- Get the mean of a table
function calculate_mean(t)
local sum = 0
local count= 0
for k, v in pairs(t) do
if type(v) == 'number' then
sum = sum + v
end
end

return (sum/#t)
end

-- Get the median of a table.
function calculate_median(t)
local temp = {}
-- deep copy table so that when we sort it, the original is unchanged
-- also weed out any non numbers
for k, v in pairs(t) do
if type(v) == 'number' then
table.insert(temp, v)
end
end
table.sort(temp)
-- If we have an even number of table elements or odd.
if math.fmod(#temp,2) == 0 then
-- return mean value of middle two elements
return (temp[#temp/2] + temp[(#temp/2)+1]) / 2
else
-- return middle element
return temp[math.ceil(#temp/2)]
end
end

-- Get the standard deviation of a table
function calculate_stddev(t)
local vm
local sum = 0
local mean = calculate_mean(t)
for k, v in pairs(t) do
if type(v) == 'number' then
vm = v - mean
sum = sum + (vm * vm)
end
end

return math.sqrt(sum/(#t - 1))
end

local function timeit(f, name)
print('======================================')
print(name)
print('======================================')
local res = {}
local iterations = 10
local elapsed_time = 0
local repetitions = 150000
for j = 1, iterations do
-- warming
for i = 1, 100 do f() end
-- measurement
elapsed_time = elapsed(f, repetitions)
table.insert(res, elapsed_time)
print(string.format("%-2d - %f sec / %d repetitions", j,
elapsed_time, repetitions))
end
print(string.format("time mean   %f", calculate_mean(res)))
print(string.format("time median %f", calculate_median(res)))
print(string.format("time stddev %f", calculate_stddev(res)))
end

local t = {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
timeit(function()
local console = require('console')
console.set_default_output('yaml')
return console.eval(tostring(t))
end, 'serializer console yaml')
timeit(function()
local console = require('console')
console.set_default_output('lua')
return console.eval(tostring(t))
end, 'serializer console lua')
timeit(function()
local serializer = require('json')
serializer.cfg({encode_max_depth = 64})
return serializer.encode(t)
end, 'serializer json')
timeit(function()
local serializer = require('yaml')
serializer.cfg({encode_max_depth = 64})
return serializer.encode(t)
end, 'serializer yaml')
timeit(function()
local serializer = require('msgpack')
serializer.cfg({encode_max_depth = 64})
return serializer.encode(t)
end, 'serializer msgpack')
timeit(function()
local serializer = require('msgpackffi')
return serializer.encode(t)
end, 'serializer msgpackffi')

```

```next prev parent reply	other threads:[~2021-04-21 13:13 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-11  5:49 Roman Khabibov via Tarantool-patches
2021-03-14 12:42 ` Sergey Kaplun via Tarantool-patches
2021-04-05 22:05   ` Roman Khabibov via Tarantool-patches
2021-04-21  9:27     ` Sergey Kaplun via Tarantool-patches
2021-04-21 13:12       ` Sergey Bronnikov via Tarantool-patches [this message]
2021-04-21 18:20         ` Sergey Kaplun via Tarantool-patches
2021-04-13 15:54 ` Sergey Bronnikov via Tarantool-patches
2021-04-15 20:39   ` Roman Khabibov via Tarantool-patches
2021-04-21 12:34 ` Sergey Bronnikov via Tarantool-patches
2021-07-07 22:42 ` Alexander Turenko via Tarantool-patches
```

```Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,

Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

switches of git-send-email(1):

git send-email \
--to=tarantool-patches@dev.tarantool.org \
--cc=roman.habibov@tarantool.org \
--cc=sergeyb@tarantool.org \
--cc=skaplun@tarantool.org \
--subject='Re: [Tarantool-patches] [PATCH] serializer: serialize recursive structures' \
```This is a public inbox, see mirroring instructions