From: Vladislav Shpilevoy <v.shpilevoy@tarantool.org> To: Nikita Pettik <korablev@tarantool.org>, tarantool-patches@dev.tarantool.org Subject: Re: [Tarantool-patches] [PATCH] region: do not rotate slabs in case of single slab purification Date: Thu, 6 Feb 2020 21:48:21 +0100 [thread overview] Message-ID: <6c6d81d1-d9d2-5248-3edd-f56aefea9e76@tarantool.org> (raw) In-Reply-To: <d4db4ccd7c65911eb17b7d6816ed8f8c663b5940.1581008805.git.korablev@tarantool.org> Hi! Thanks for the patch! On 06/02/2020 18:14, Nikita Pettik wrote: > Imagine following situation at the moment of region truncation: > > 1 slab 2 slab/HEAD > x of s1 used y of s2 used > +---------+ +---------+ > ...->|xx| |-->|yyyyyy| |--> NULL > |xx| | |yyyyyy| | > +---------+ +---------+ > > And region is going to be truncated by size y (i.g. > region_truncate(®ion, region_used() - y)). After this operation > second slab will remain empty (slab.used == 0). Currently, this slab is > returned back to the slab cache, which leads to slab rotation. This may > not be useful in terms of performance, especially for requests which > don't abuse region memory (for instance, SQL queries) but do call > region_truncate() intensively. For example, during transfer tuples to > ephemeral table truncate() is called for each tuple. What is more, > truncate is also called on each returned tuple in sql_row_to_port() > (see runtime_tuple_new()). I understand the point about perf and slab oscillation, but don't see how is it related to the tests. > Also, taking into consideration revert of 67d7ab4 (see 81dda5b) this may > lead to memory usage fluctuations: region memory in use before query > execution and after may not be the same. Yeah, but your patch does not fix that. It is a bigger problem. Region does not free its slabs even at fiber_gc() if their total size is small enough. So how is this related to memory fluctuations? > For instance: total region memory > in usage is x, but the first slab (head) is empty (since between > requests region_reset() is called). During query execution > region_truncate() is called and first slab is put back to the slab > cache. Now another slab forms head of slab list, but there's no > guarantee that its size is 0 (since slab's sizes are not zeroed on > reset). How slab size can be 0? You mean 'used' size? In that case it is zeroed in reset. Otherwise I am missing something. > As a result, total region memory may change (decrease) due to > slab rotation. It is likely to be misleading for users and in particular > for our testing system: to detect region memory leak cases, we have > nothing to do but restart Tarantool instance each time before test. From what I see, this patch makes region keep slab more often. It does not free them more aggressively or something. So how is it going to fix the slab leak or at least make it less severe? > --- > Branch: https://github.com/tarantool/small/tree/np/dont-rotate-region-on-truncate > > small/region.c | 2 +- > test/region.c | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 70 insertions(+), 1 deletion(-)
next prev parent reply other threads:[~2020-02-06 20:48 UTC|newest] Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-02-06 17:14 Nikita Pettik 2020-02-06 18:43 ` Konstantin Osipov 2020-02-06 20:48 ` Vladislav Shpilevoy [this message] 2020-02-07 13:58 ` Nikita Pettik 2020-02-08 0:28 ` Vladislav Shpilevoy 2020-02-10 11:52 ` Nikita Pettik 2020-04-10 10:10 Aleksandr Lyapunov
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=6c6d81d1-d9d2-5248-3edd-f56aefea9e76@tarantool.org \ --to=v.shpilevoy@tarantool.org \ --cc=korablev@tarantool.org \ --cc=tarantool-patches@dev.tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH] region: do not rotate slabs in case of single slab purification' \ /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