[PATCH 2/2] lib/core/fiber: Mark stack as unneeded on creation

Vladimir Davydov vdavydov.dev at gmail.com
Mon Mar 11 11:18:14 MSK 2019


On Fri, Mar 08, 2019 at 12:31:46AM +0300, Cyrill Gorcunov wrote:
> Since we've increased the default stack size we hope
> the whole 512K won't be used for regular loads thus
> we mark the stack area as unneeded to minimize rss
> pressure.
> 
> Note we do this on fiber creation at the moment, more
> detailed stack usage analisys will be implemented in
> another patch series later.
> 
> Closes #3418
> ---
>  src/lib/core/fiber.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/src/lib/core/fiber.c b/src/lib/core/fiber.c
> index f16ac873f..a1b261ad4 100644
> --- a/src/lib/core/fiber.c
> +++ b/src/lib/core/fiber.c
> @@ -749,6 +749,14 @@ fiber_stack_create(struct fiber *fiber, size_t stack_size)
>  	fiber->stack_id = VALGRIND_STACK_REGISTER(fiber->stack,
>  						  (char *)fiber->stack +
>  						  fiber->stack_size);
> +#ifndef TARGET_OS_DARWIN
> +	/*
> +	 * We don't expect the whole stack usage in regular
> +	 * loads, lets try to minimize rss pressure if OS
> +	 * allows us.
> +	 */
> +	madvise(fiber->stack, fiber->stack_size, MADV_DONTNEED);
> +#endif

madvise on fiber creation doesn't make much sense without madvise on
fiber recycling, because fat tasks will quickly fault-in that memory.
I thought you were going to implement stack shrinking to some predefined
size (say, allocate 1 MB max, shrink to 64 KB on recycle if watermark
was overwritten), leaving only dynamic stack sizing for the future (i.e.
estimating the optimal size to do madvise for basing on average fiber
stack usage).



More information about the Tarantool-patches mailing list