[Tarantool-patches] [PATCH] relay: yield explicitly every N sent rows

Serge Petrenko sergepetrenko at tarantool.org
Wed Feb 24 12:48:07 MSK 2021



24.02.2021 01:30, Vladislav Shpilevoy пишет:
> Thanks for the patch!
Thanks for the reivew!

>>>> diff --git a/src/box/relay.cc b/src/box/relay.cc
>>>> index 1d8edf116..6d9269e1d 100644
>>>> --- a/src/box/relay.cc
>>>> +++ b/src/box/relay.cc
>>>> @@ -117,6 +117,11 @@ struct relay {
>>>>            * is passed by the replica on subscribe.
>>>>            */
>>>>           uint32_t id_filter;
>>>> +       /**
>>>> +        * How many rows has this relay sent to the replica. Used to yield once
>>>> +        * in a while when reading a WAL to unblock the event loop.
>>>> +        */
>>>> +       size_t row_cnt;
> Name is a bit ugly, because all the other members are not
> contractions. They use full words. But up to you.

No problem, changed to `row_count`.
>>> 1. But it is not a size of anything, right? Maybe make it
>>> int64_t then?
>> uint64_t, probably?
> Nope, int64_t. It is supposed to be 'faster'. Because it does
> not have defined overflow rules, and therefore the hardware does
> not need to handle it.
>
> But honestly, I didn't measure. For me it is more cargo cult. I
> just use signed integers where I can assuming that the hardware
> really may omit an instruction or so.
>
> Up to you.

Long story short, I'd like to leave it as is. Besides, we have an 
unsigned type
(size_t) in local recovery.

Ok, now I see what you meant.
I never thought of this, and brief googling showed no signs of a speedup
with signed arithmetic vs unsigned.

Actually, the standard says signed overflow is an undefined behaviour while
an unsigned overflow should result in a wrap (modulo 2^64 in our case).

Do you think this wrap may be costly on some architecture?
>
> The patch about power of 2 worked btw. This is how it looks now:
>
> 	andq   $0x7fff, %rcx             ; imm = 0x7FFF
>
> this is how it used to look:
>
> 	movl   $0x7d00, %ecx             ; imm = 0x7D00
> 	divq   %rcx

Yeah, that was a nice catch.

-- 
Serge Petrenko



More information about the Tarantool-patches mailing list