Skip to content

Instantly share code, notes, and snippets.

-- (c) Dmitry Sharonov если что - я вчера на скорую руку добавил в семлпер еще тройку лидеров из топа, вот так:
local top = fun.iter(fiber.top().cpu):map(function(name, f) f.name=name; return f end):totable()
table.sort(top, function(f1, f2) return f1.average > f2.average end)
log.info(require('yaml').encode(fun.iter(top):take(3):totable()))
@Mons
Mons / change-tarantool-backup-uuid.pl
Last active April 20, 2023 17:12
Script for changing stored UUID of Tarantool backup files (.snap, .xlog, .vy*)
#!/usr/bin/env perl
use 5.010;
use strict;
use File::Find;
use Getopt::Long;
sub usage {
return <<EOF
===============================================================
@Mons
Mons / timegm.lua
Last active August 20, 2021 18:48
Lua FFI implementation of timegm (convert any given date to GMT epoch timestamp)
local ffi = require 'ffi'
if not pcall(ffi.typeof, 'struct tm') then
ffi.cdef[[
struct tm {
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
if not pcall(assert, false, {}) then
local a = _G.assert
assert = function(t, m)
if t == nil then
error("value expected", 2)
end
if not t then
if m == nil then
error("assertion failed", 2)
else
@Mons
Mons / bad_tarantool.sh
Created July 6, 2021 16:48 — forked from ochaton/bad_tarantool.sh
Monitoring fiber of latency of single ev_once
> tarantool -l fiber -l clock -e 'fiber.create(function() while true do while clock.time() < fiber.time()+0.1 do end fiber.sleep(0.01) end end)' test.lua
entering the event loop
e:100.011µs p:0.017µs t:99.998µs
e:100.042µs p:0.010µs t:100.035µs
e:100.013µs p:0.015µs t:100.004µs
e:100.005µs p:0.006µs t:99.994µs
e:100.007µs p:0.004µs t:99.996µs
e:100.010µs p:0.009µs t:99.993µs
e:100.012µs p:0.016µs t:100.000µs
e:100.009µs p:0.050µs t:99.999µs
@Mons
Mons / ftrace-example.lua
Created April 15, 2021 15:35
Trace function call time
local TOO_LONG_CALL_THRESHOLD = 0.1
local log = require('log')
local clock = require 'clock'
local json = require 'json'.new() json.cfg{ encode_use_tostring = true }
local function ftail(fname, args, start, ...)
local run = clock.realtime() - start
if run > TOO_LONG_CALL_THRESHOLD then
log.info("Function call %s(%s) was too long: %0.2fs", fname, json.encode(args), run)
local client = require 'http.client'
local fiber = require 'fiber'
local yaml = require 'yaml'
local uris = {
'http://httpbin.org/get?1',
'http://httpbin.org/get?2',
'http://httpbin.org/get?3',
'http://httpbin.org/get?4',
'http://httpbin.org/get?5',
local fiber = require 'fiber'
local clock = require 'clock'
local N = 1e6
do
local i = 0;
local cond = fiber.cond()
local function creator()
i = i + 1
@Mons
Mons / tar_test.c
Created December 14, 2020 13:35 — forked from danikin/tar_test.c
Tarantool Quick Test
// Tarantool quick test
// Copyright, Dennis Anikin 2016
//
// Quick disclaimer:
//
// This test shows 500K-1000K transactions per second on one CPU core
// and 600K-1600K queries per second on one CPU core.
//
// Based on the $6.57 per-month-price for the AWS t2.micro instance we can afford the tremendous number of 630bln queries for just $1
//
@Mons
Mons / fx.lua
Created November 17, 2020 14:51
for _,expr in pairs({
"1",
"N",
"N/2+1",
"N/2+2",
"math.random()"
}) do
local fun,err = loadstring("return "..expr)
if not fun then error("Bad expression '"..expr.."'") end
local count = math.floor(math.random(7))