Messages in this thread Patch in this message | | | Date | Wed, 10 Aug 2022 10:00:14 -0300 | From | Arnaldo Carvalho de Melo <> | Subject | Re: [PATCH] perf inject jit: Ignore memfd mmap events if jitdump present |
| |
Em Thu, Aug 04, 2022 at 08:22:14AM -0700, Ian Rogers escreveu: > On Tue, Aug 2, 2022 at 11:25 AM Brian Robbins > <brianrob@linux.microsoft.com> wrote: > > > > Some processes store jitted code in memfd mappings to avoid having rwx > > mappings. These processes map the code with a writeable mapping and a > > read-execute mapping. They write the code using the writeable mapping > > and then unmap the writeable mapping. All subsequent execution is > > through the read-execute mapping. > > > > perf inject --jit ignores //anon* mappings for each process where a > > jitdump is present because it expects to inject mmap events for each > > jitted code range, and said jitted code ranges will overlap with the > > //anon* mappings. > > > > Ignore /memfd: mappings so that jitted code contained in /memfd: > > mappings is treated the same way as jitted code contained in //anon* > > mappings. > > > > Signed-off-by: Brian Robbins <brianrob@linux.microsoft.com> > > Acked-by: Ian Rogers <irogers@google.com>
CC /tmp/build/perf/util/jitdump.o CC /tmp/build/perf/pmu-events/pmu-events.o LD /tmp/build/perf/pmu-events/pmu-events-in.o util/jitdump.c: In function ‘jit_process’: util/jitdump.c:853:65: error: expected ‘)’ before ‘return’ 853 | (strncmp(filename, "/memfd:", 7) == 0)) | ^ | ) 854 | return 1; | ~~~~~~ util/jitdump.c:851:20: note: to match this ‘(’ 851 | if (jit_has_pid(machine, pid) && | ^ util/jitdump.c:857:9: error: expected expression before ‘}’ token 857 | } | ^ make[4]: *** [/var/home/acme/git/perf/tools/build/Makefile.build:96: /tmp/build/perf/util/jitdump.o] Error 1 make[4]: *** Waiting for unfinished jobs.... make[3]: *** [/var/home/acme/git/perf/tools/build/Makefile.build:139: util] Error 2
Trying to fix now.
- Arnaldo > > --- > > tools/perf/util/jitdump.c | 8 ++++++-- > > 1 file changed, 6 insertions(+), 2 deletions(-) > > > > diff --git a/tools/perf/util/jitdump.c b/tools/perf/util/jitdump.c > > index a23255773c60..335a3c61940b 100644 > > --- a/tools/perf/util/jitdump.c > > +++ b/tools/perf/util/jitdump.c > > @@ -845,8 +845,12 @@ jit_process(struct perf_session *session, > > if (jit_detect(filename, pid, nsi)) { > > nsinfo__put(nsi); > > > > - // Strip //anon* mmaps if we processed a jitdump for this pid > > - if (jit_has_pid(machine, pid) && (strncmp(filename, "//anon", 6) == 0)) > > + /* > > + * Strip //anon* and /memfd:* mmaps if we processed a jitdump for this pid > > + */ > > + if (jit_has_pid(machine, pid) && > > + ((strncmp(filename, "//anon", 6) == 0) || > > + (strncmp(filename, "/memfd:", 7) == 0)) > > Related to this there is the prctl PR_SET_VMA_ANON_NAME which will > name mapping to start with "[anon:" > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/filesystems/proc.rst#n434 > I wonder also we should be checking the pages are executable. > > Thanks, > Ian > > > return 1; > > > > return 0; > > -- > > 2.25.1 > >
--
- Arnaldo
| |