From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtpng2.m.smailru.net (smtpng2.m.smailru.net [94.100.179.3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id EC80346970E for ; Wed, 29 Jan 2020 21:46:31 +0300 (MSK) Date: Wed, 29 Jan 2020 21:46:30 +0300 From: Nikita Pettik Message-ID: <20200129184630.GB16149@tarantool.org> References: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: Subject: Re: [Tarantool-patches] [PATCH] test: stabilize flaky fiber memory leak detection List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Alexander Turenko Cc: tarantool-patches@dev.tarantool.org On 29 Jan 20:03, Alexander Turenko wrote: > After #4736 regression fix (in fact it just reverts the new logic in > small) it is possible again that a fiber's region may hold a memory for > a while, but release it eventually. When the used memory exceeds 128 KiB > threshold, fiber_gc() puts 'garbage' slabs back to slab_cache and > subtracts them from region_used() metric. But until this point those > slabs are accounted in region_used() and so in fiber.info() metrics. > > This commit fixes flakiness of test cases of the following kind: > > | fiber.info()[fiber.self().id()].memory.used -- should be zero > | <...workload...> > | fiber.info()[fiber.self().id()].memory.used -- should be zero > > The problem is that the first `<...>.memory.used` value may be non-zero. > It depends of previous tests that were executed on this tarantool > instance. It is resolved by restarting of a tarantool instance before > such test cases to ensure that there are no 'garbage' slabs in a current > fiber's region. Hm, why not simply save value of ..memory.used before workload, value after workload and compare them: reg_sz_before = fiber.info()[fiber.self().id()].memory.used ... reg_sz_after = fiber.info()[fiber.self().id()].memory.used assert(reg_sz_before == reg_sz_after); So that make sure workload returns all occupied memory. This may fail only in case allocated memory > 4kb, but examples in this particular case definitely don't require so many memory (as you noted below). > Note: This works only if a test case reserves only one slab at the > moment: otherwise some memory may be hold after the case (and so a > memory check after a workload will fail). However it seems that our > cases are small enough to don't trigger this situation. > > Call of region_free() would be enough, but we have no Lua API for it. > > Fixes #4750. > --- >