Tarantool development patches archive
 help / color / mirror / Atom feed
From: Igor Munkin <imun@tarantool.org>
To: Sergey Kaplun <skaplun@tarantool.org>
Cc: tarantool-patches@dev.tarantool.org
Subject: Re: [Tarantool-patches] [PATCH luajit 3/3] core: remove excess assertion inside memprof
Date: Wed, 30 Dec 2020 12:39:16 +0300	[thread overview]
Message-ID: <20201230093916.GX5396@tarantool.org> (raw)
In-Reply-To: <b726ff6975e8e00b819498976aa7e4bfd9e7fd8b.1609278043.git.skaplun@tarantool.org>

Sergey,

Thanks for the patch! AFAICS, the issue relates to invalid writer to be
chosen but not to the <lj_debug_frameline> return value. As we discussed
offline, all these allocations should be reported as internal, but now
the engine attempts to attribute them with a Lua function being
recorded. Please mention this fact in the commit message.

I believe there is an issue with the VM states introduces in the
previous series and it should be fixed. For now I'm OK with this fix
though it is not quite relevant. Anyway, the world is better with it,
crashes are gone, so formally LGTM with two nits below.

Please create a ticket for this to investigate the root cause.

On 30.12.20, Sergey Kaplun wrote:
> lj_debug_frameline() may return -1 for Lua functions on top.
> In this case assertion inside memprof_write_lfunc() that returned line
> is not negative is incorrect.

I propose the following wording:
| There are the cases when memory profiler attempts to attribute
| allocations triggered by JIT engine recording phase with a Lua
| function to be recorded. At this case lj_debug_frameline() may return
| BC_NOPOS (i.e. a negative value) so the assertion in the Lua writer
| memprof_write_lfunc() is violated.

> 
> This patch removes this assertion. For negative returned line value
> profiler is reported zero frameline.
> 
> Follows up tarantool/tarantool#5442
> ---
> 
> I have not thought of any more correct check than:
> | -- Check alocations for Lua function on top.
> | -- This is not the best test case but the most simple.
> | -- Trace allocation on top leads to assertion.
> | jit.on()
> | for _ = 1, 100 do
> |   local _ = tostring(_)
> | end
> | jit.off()
> | jit.flush()
> 
> But this is not very fair: here we have tail call to cpcall()
> (with trace_state() as an argument) without creating a new guest stack
> frame. Also test looks redundant -- assertion obviously can't fail as
> far as it doesn't exist. But I can add this test case if you want.
> 
>  src/lj_memprof.c | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/src/lj_memprof.c b/src/lj_memprof.c
> index c4d2645..0568049 100644
> --- a/src/lj_memprof.c
> +++ b/src/lj_memprof.c
> @@ -90,15 +90,15 @@ static void memprof_write_lfunc(struct lj_wbuf *out, uint8_t aevent,
>  				cTValue *nextframe)
>  {
>    const BCLine line = lj_debug_frameline(L, fn, nextframe);
> +  lj_wbuf_addbyte(out, aevent | ASOURCE_LFUNC);
> +  lj_wbuf_addu64(out, (uintptr_t)funcproto(fn));
>    /*
> -  ** Line is always >= 0 if we are inside a Lua function.
> +  ** Line is >= 0 if we are inside a Lua function.
> +  ** An exception may be when the Lua function is on top.
>    ** Equals to zero when LuaJIT is built with the

Minor: Please make this wording clearer considering my proposal for
commit message. It doesn't refer to the original problem for now.

>    ** -DLUAJIT_DISABLE_DEBUGINFO flag.
>    */
> -  lua_assert(line >= 0);
> -  lj_wbuf_addbyte(out, aevent | ASOURCE_LFUNC);
> -  lj_wbuf_addu64(out, (uintptr_t)funcproto(fn));
> -  lj_wbuf_addu64(out, (uint64_t)line);
> +  lj_wbuf_addu64(out, line >= 0 ? (uint64_t)line : 0);
>  }
>  
>  static void memprof_write_cfunc(struct lj_wbuf *out, uint8_t aevent,
> -- 
> 2.28.0
> 

-- 
Best regards,
IM

  reply	other threads:[~2020-12-30  9:39 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-29 22:22 [Tarantool-patches] [PATCH luajit 0/3] LuaJIT memory profiler bug fixes Sergey Kaplun
2020-12-29 22:22 ` [Tarantool-patches] [PATCH luajit 1/3] misc: fix build with disabled memory profiler Sergey Kaplun
2020-12-30  8:49   ` Igor Munkin
2020-12-30  8:52     ` Sergey Kaplun
2020-12-30  9:42       ` Sergey Ostanevich
2020-12-29 22:22 ` [Tarantool-patches] [PATCH luajit 2/3] core: fix resources leak in " Sergey Kaplun
2020-12-30  9:06   ` Igor Munkin
2020-12-30  9:31     ` Sergey Ostanevich
2020-12-30  9:33       ` Sergey Kaplun
2020-12-30  9:32     ` Sergey Kaplun
2020-12-30  9:53       ` Sergey Ostanevich
2020-12-29 22:22 ` [Tarantool-patches] [PATCH luajit 3/3] core: remove excess assertion inside memprof Sergey Kaplun
2020-12-30  9:39   ` Igor Munkin [this message]
2020-12-30  9:50     ` Sergey Kaplun
2020-12-30 10:50       ` Sergey Ostanevich
2020-12-30 11:06         ` Sergey Kaplun
2020-12-30  8:24 ` [Tarantool-patches] [PATCH luajit 0/3] LuaJIT memory profiler bug fixes Alexander V. Tikhonov
2020-12-30 11:20 ` Igor Munkin

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=20201230093916.GX5396@tarantool.org \
    --to=imun@tarantool.org \
    --cc=skaplun@tarantool.org \
    --cc=tarantool-patches@dev.tarantool.org \
    --subject='Re: [Tarantool-patches] [PATCH luajit 3/3] core: remove excess assertion inside memprof' \
    /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