[Tarantool-patches] [PATCH 13/20] net.box: rewrite send_and_recv_{iproto, console} in C
Vladislav Shpilevoy
v.shpilevoy at tarantool.org
Wed Aug 4 02:06:04 MSK 2021
>>> + local hdr, body_rpos, body_end = internal.send_and_recv_iproto(
>>
>> 3. Indexing 'internal' via '.' is not free. It is a lookup
>> in a hash. You might want to save internal.send_and_recv_iproto into
>> a global variable when the module loads first time and use the
>> cached value. Non-cached version is a bit faster only for FFI, but
>> here you are using Lua C - cache should be good.
>>
>>> + connection:fd(), send_buf, recv_buf, timeout)
>>
>> Another idea is to cache 'connection:fd()' result into a variable in
>> the root of create_transport() function. And update it when the
>> connetion is re-established. Although you probably move this all to
>> C later as well, I didn't reach the last commits yet.
>
> The calling function is moved to C later in the patch set so these
> comments will become irrelevant.
>
> Regarding caching function name (instead of accessing via dot operator),
> eventually there will be only two hot C functions that could benefit
> from this:
>
> internal.perform_request
> internal.perform_async_request
>
> I tried caching their names, but saw no performance gain at all in my
> test. I also tried removing fiber_self and fiber_clock aliases from
> net_box.lua and accessing these functions as fiber.<name> - again no
> difference.
Both can be explained by jitting. I wasn't sure if 'internal' is jitted,
but seems so. While jit works, there probably won't be any difference. Now
it is just inconsistent because you have a couple of methods cached:
local encode_method = internal.encode_method
local decode_greeting = internal.decode_greeting
The commit LGTM anyway.
More information about the Tarantool-patches
mailing list