From: Sergey Kaplun via Tarantool-patches <tarantool-patches@dev.tarantool.org> To: Maxim Kokryashkin <max.kokryashkin@gmail.com> Cc: tarantool-patches@dev.tarantool.org Subject: Re: [Tarantool-patches] [PATCH] sysprof: enrich symtab on a new trace or a proto Date: Thu, 19 May 2022 17:07:29 +0300 [thread overview] Message-ID: <YoZPIUvWvqlQMoA4@root> (raw) In-Reply-To: <20220511082521.389687-3-m.kokryashkin@tarantool.org> Hi, Maxim! Thanks for the patch! LGTM, except a few nits. On 11.05.22, Maxim Kokryashkin wrote: > This commit adds functionality introduced > in 0847e71abf7db2559e2bfa35f147ccf0112035e3 ('memprof: enrich symtab when > meeting new prototype') and 0243fb72b05c7c63481c50151c65bef6b04e3372 ('memprof: > enrich symtab when new trace is compiled') to sysprof. > > Both the proto and the trace symtab extensions cannot be run from the > sysprof's signal handler, so it is required to prevent sysprof from > dumping anything in its signal handler during the process to keep the > event stream intact. That is achieved with setting the sysprof's internal state Typo? s/achieved with/achieved by/ > to `SPS_IDLE`. > > Part of tarantool/tarantool#781 > --- > Branch: https://github.com/tarantool/luajit/tree/fckxorg/sysprof-rc-full-ci > > src/lj_bcread.c | 7 +++++++ > src/lj_parse.c | 6 ++++++ > src/lj_sysprof.c | 44 ++++++++++++++++++++++++++++++++++++++++- > src/lj_sysprof.h | 9 ++++++++- > src/lj_trace.c | 7 +++++++ > tools/sysprof/parse.lua | 18 ++++++++++++----- Nit: please update Makefile.dep.original as well. > 6 files changed, 84 insertions(+), 7 deletions(-) > > diff --git a/src/lj_bcread.c b/src/lj_bcread.c > index cb08599d..f6c7ad25 100644 > --- a/src/lj_bcread.c > +++ b/src/lj_bcread.c <snipped> > diff --git a/src/lj_parse.c b/src/lj_parse.c > index 30b0caa0..af0dc53f 100644 > --- a/src/lj_parse.c > +++ b/src/lj_parse.c <snipped> > diff --git a/src/lj_sysprof.c b/src/lj_sysprof.c > index 28d7d229..23947315 100644 > --- a/src/lj_sysprof.c > +++ b/src/lj_sysprof.c > @@ -238,7 +238,7 @@ static void stream_guest(struct sysprof *sp, uint32_t vmstate) <snipped> > diff --git a/src/lj_sysprof.h b/src/lj_sysprof.h > index 2978bbd8..c31d61d8 100644 > --- a/src/lj_sysprof.h > +++ b/src/lj_sysprof.h > @@ -15,6 +15,7 @@ > #ifndef _LJ_SYSPROF_H > #define _LJ_SYSPROF_H > Nit: We need to check that LuaJIT is build with JIT here. | #if LJ_HASJIT > +#include "lj_jit.h" > #include "lj_obj.h" > #include "lmisclib.h" > > @@ -80,7 +81,9 @@ > #define LJP_FRAME_LUA_LAST 0x80 > #define LJP_FRAME_HOST_LAST NULL > > -#define LJP_SYMTAB_EVENT ((uint8_t)10) > +#define LJP_SYMTAB_LFUNC_EVENT ((uint8_t)10) > +#define LJP_SYMTAB_CFUNC_EVENT ((uint8_t)11) > +#define LJP_SYMTAB_TRACE_EVENT ((uint8_t)12) This means we should increase LJP_FORMAT_VERSION as well. > #define LJP_EPILOGUE_BYTE 0x80 > > int lj_sysprof_configure(const struct luam_Sysprof_Config *config); > @@ -91,4 +94,8 @@ int lj_sysprof_stop(lua_State *L); > > int lj_sysprof_report(struct luam_Sysprof_Counters *counters); > > +void lj_sysprof_add_proto(const struct GCproto *pt); > + > +void lj_sysprof_add_trace(const struct GCtrace *tr); Nit: We need to check that LuaJIT is build with JIT here. | #if LJ_HASJIT > + > #endif > diff --git a/src/lj_trace.c b/src/lj_trace.c > index 84b957c6..d7a78d4d 100644 > --- a/src/lj_trace.c > +++ b/src/lj_trace.c <snipped> > diff --git a/tools/sysprof/parse.lua b/tools/sysprof/parse.lua > index cb271784..555b6b3b 100755 > --- a/tools/sysprof/parse.lua > +++ b/tools/sysprof/parse.lua > @@ -33,7 +33,9 @@ M.FRAME = { <snipped> > @@ -128,8 +130,14 @@ local function parse_trace(reader, event, symbols) > -- parse_lua_callchain(reader, event) > end > > -local function parse_symtab(reader, symbols) > - symtab.parse_sym_cfunc(reader, symbols) > +local function parse_symtab(reader, symbols, vmstate) > + if vmstate == SYMTAB_LFUNC_EVENT then > + symtab.parse_sym_lfunc(reader, symbols) > + elseif vmstate == SYMTAB_CFUNC_EVENT then > + symtab.parse_sym_cfunc(reader, symbols) > + elseif vmstate == SYMTAB_TRACE_EVENT then > + symtab.parse_sym_trace(reader, symbols) > + end Nit: may be we should add | else | error('Unknown symtab event') | end check here. Feel free to ignore. > end > > local event_parsers = { > @@ -152,8 +160,8 @@ local function parse_event(reader, events, symbols) > if vmstate == STREAM_END then > -- TODO: samples & overruns > return false > - elseif vmstate == SYMTAB_EVENT then > - parse_symtab(reader, symbols) > + elseif SYMTAB_LFUNC_EVENT <= vmstate and vmstate <= SYMTAB_TRACE_EVENT then > + parse_symtab(reader, symbols, vmstate) > return true > end > > -- > 2.35.1 > -- Best regards, Sergey Kaplun
next prev parent reply other threads:[~2022-05-19 14:09 UTC|newest] Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-05-11 8:25 [Tarantool-patches] [PATCH] sysprof: add `LUAJIT_DISABLE_SYSPROF` to Makefile Maxim Kokryashkin via Tarantool-patches 2022-05-11 8:25 ` [Tarantool-patches] [PATCH] sysprof: change C configuration API Maxim Kokryashkin via Tarantool-patches 2022-05-18 14:20 ` Igor Munkin via Tarantool-patches 2022-05-19 6:56 ` Sergey Kaplun via Tarantool-patches 2022-05-11 8:25 ` [Tarantool-patches] [PATCH] sysprof: enrich symtab on a new trace or a proto Maxim Kokryashkin via Tarantool-patches 2022-05-19 14:07 ` Sergey Kaplun via Tarantool-patches [this message] 2022-05-11 8:25 ` [Tarantool-patches] [PATCH] sysprof: fix `SYSPROF_HANDLER_STACK_DEPTH` Maxim Kokryashkin via Tarantool-patches 2022-05-18 11:06 ` Igor Munkin via Tarantool-patches 2022-05-19 5:23 ` Sergey Kaplun via Tarantool-patches 2022-05-26 16:28 ` Igor Munkin via Tarantool-patches 2022-05-11 8:25 ` [Tarantool-patches] [PATCH] sysprof: make sysprof internal API funcs static Maxim Kokryashkin via Tarantool-patches 2022-05-18 9:49 ` Sergey Kaplun via Tarantool-patches 2022-05-18 11:01 ` Igor Munkin via Tarantool-patches 2022-05-26 16:28 ` Igor Munkin via Tarantool-patches 2022-05-18 10:01 ` [Tarantool-patches] [PATCH] sysprof: add `LUAJIT_DISABLE_SYSPROF` to Makefile Sergey Kaplun via Tarantool-patches 2022-05-18 10:58 ` Igor Munkin via Tarantool-patches 2022-05-26 16:25 ` Igor Munkin via Tarantool-patches
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=YoZPIUvWvqlQMoA4@root \ --to=tarantool-patches@dev.tarantool.org \ --cc=max.kokryashkin@gmail.com \ --cc=skaplun@tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH] sysprof: enrich symtab on a new trace or a proto' \ /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