Tarantool development patches archive
 help / color / mirror / Atom feed
From: Alexander Turenko <alexander.turenko@tarantool.org>
To: Leonid Vasiliev <lvasiliev@tarantool.org>
Cc: tarantool-patches@dev.tarantool.org
Subject: Re: [Tarantool-patches] [PATCH] Move txn from shema to a separate module (use C API instead of FFI)
Date: Wed, 15 Jan 2020 20:05:31 +0300	[thread overview]
Message-ID: <20200115170531.zd7j43syvhp2enjw@tkn_work_nb> (raw)
In-Reply-To: <a5f89d27-6372-5663-19be-cb4398656fce@tarantool.org>

On Thu, Dec 12, 2019 at 11:23:14AM +0300, Leonid Vasiliev wrote:
> 
> 
> On 12/12/19 1:21 AM, Alexander Turenko wrote:
> > Kostya, thanks for bringing the FFI / Lua-C question into our view.
> > 
> > ----
> > 
> > We decided to don't change existing convention: let's use FFI when
> > possible and Lua-C API for functions that access a Lua state somehow
> > (including touching tarantool_L, yielding and running triggers /
> > callbacks).
> > 
> > The core reason is that FFI allows to produce longer JIT traces that
> > should positively impact performance of an application at whole.
> > 
> > We have no good understanding how performant Lua-C API with trace
> > stitching, however simple benchmarks (shared by Leonid) shows positive
> > impact of using FFI calls.
> > 
> > We have no interpretation for those benchmarks for now. Whether Lua-C
> > runs were JITed at all? Whether a result will be different if there will
> > be more JITable code around? So for now things looks just as 'FFI is
> > faster the Lua-C'. Hope we'll investigate this later.
> > 
> > We need to find a way to reduce probability that a function that is
> > called via ffi (or one that is called from it) will be changed in a
> > future and starts to yield or touch a Lua state.
> > 
> > We should look whether we can mark functions that are called from ffi
> > (see also [1]) and all its callee to at least verify ourself when
> > changing code.
> > 
> > Also we can work on detection of so called ffi sandwitches and doing
> > more stress testing.
> > 
> > It seems that both directions are worth to dig into.
> > 
> > [1]: https://github.com/tarantool/tarantool/issues/4202
> > 
> > ----
> > 
> > Back to the patch.
> > 
> > Since we'll just move one function, I would not perform refactoring I
> > proposed initially: don't move all related functions together. Let's
> > rewrite box.rollback_to_savepoint() using Lua-C API and place it together
> > with box.commit() and box.rollback() to src/box/lua/init.c >
> > I think we don't need any pure Lua wrapper around this function: we can
> > access a Lua table field and raise an error just from C, so I don't see
> > a reason to split a function logic around two files
> > (src/box/lua/schema.lua and src/box/lua/init.c). They are both about API
> > we expose to Lua.
> > 
> > WBR, Alexander Turenko.
> >  > On Tue, Nov 26, 2019 at 04:13:43PM +0300, Leonid wrote:
> > > https://github.com/tarantool/tarantool/issues/4427
> > > https://github.com/tarantool/tarantool/tree/lvasiliev/gh-4427-move-some-stuff-from-ffi-to-c-api
> > > 
> > > ---
> > >   src/box/CMakeLists.txt       |   2 +
> > >   src/box/lua/init.c           |   4 +
> > >   src/box/lua/schema.lua       |  71 -----------------
> > >   src/box/lua/txn.c            | 145 +++++++++++++++++++++++++++++++++++
> > >   src/box/lua/txn.h            |  49 ++++++++++++
> > >   src/box/lua/txn.lua          |  53 +++++++++++++
> > >   src/box/txn.c                |   2 +
> > >   test/box/misc.result         |   1 +
> > >   test/engine/savepoint.result |  12 +--
> > >   9 files changed, 262 insertions(+), 77 deletions(-)
> > >   create mode 100644 src/box/lua/txn.c
> > >   create mode 100644 src/box/lua/txn.h
> > >   create mode 100644 src/box/lua/txn.lua
> > 
> > > --- box.commit yields, so it's defined as Lua/C binding
> > > --- box.rollback yields as well
> > 
> > Let's move box.rollback_to_savepoint() to them.
> > 
> 
> I think to have a separate module for txn is a good idea. IMHO a true way
> use FFI for begin and is_in_txn and use C API for create a savepoint and
> rollback. Really, it's more consistent in my mind. What do you think about
> it?

Personally I'm not sure that this refactoring is valuable enough to do
it. I don't mind, however: let's propose it after we'll fix the bug, if
you want.

But I think that creation of a savepoint using Lua-C violaves the rule
re FFI / Lua-C API usage (cited from above):

> Use FFI when possible and Lua-C API for functions that access a Lua
> state somehow (including touching tarantool_L, yielding and running
> triggers / callbacks).

I would maybe add an exception for some pure Lua-C API modules (I wrote
about it to the related internal mail thread, see '[dev] RFC: FFI usage
guidance'), but this is not our case. Moving a function from FFI to
Lua-C should be strictly motivated. Since we're working on a strict rule
and your proposal violates the one cited above, can you propose a
wording that will handle your case gracefully?

I'll look into the patch, which moves just one function ('txn: move
rollback to savepoint from ffi to C-API' from 2019-12-13) soon.

WBR, Alexander Turenko.

  reply	other threads:[~2020-01-15 17:05 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-11-26 13:13 Leonid
2019-11-26 21:05 ` Konstantin Osipov
2019-11-26 21:17   ` Alexander Turenko
2019-11-27  8:31     ` Konstantin Osipov
2019-11-28  8:10       ` Leonid Vasiliev
2019-11-28 12:34         ` Konstantin Osipov
2019-11-28 13:00           ` Igor Munkin
2019-11-28 13:18             ` Konstantin Osipov
2019-11-28 14:03               ` Igor Munkin
2019-11-28 15:58                 ` Konstantin Osipov
2019-11-28 18:36                   ` Igor Munkin
2019-11-29  5:30                     ` Konstantin Osipov
2019-11-29 17:43                       ` Igor Munkin
2019-11-29  5:41                     ` Konstantin Osipov
2019-11-29 17:37                       ` Igor Munkin
2019-12-04 13:05                     ` Leonid Vasiliev
2019-12-04 13:15                       ` Konstantin Osipov
2019-12-05  8:27                         ` Leonid Vasiliev
2020-03-20 18:48               ` Igor Munkin
2020-03-20 19:27                 ` Konstantin Osipov
2019-12-11 22:21 ` Alexander Turenko
2019-12-12  8:23   ` Leonid Vasiliev
2020-01-15 17:05     ` Alexander Turenko [this message]
2019-12-12  8:49   ` Konstantin Osipov

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,
  and reply-to-all from there: mbox

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

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200115170531.zd7j43syvhp2enjw@tkn_work_nb \
    --to=alexander.turenko@tarantool.org \
    --cc=lvasiliev@tarantool.org \
    --cc=tarantool-patches@dev.tarantool.org \
    --subject='Re: [Tarantool-patches] [PATCH] Move txn from shema to a separate module (use C API instead of FFI)' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox