lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <36CD1041-0CAE-41C1-8086-C17854531B3E@linux.vnet.ibm.com>
Date:   Thu, 8 Dec 2022 12:21:20 +0530
From:   Athira Rajeev <atrajeev@...ux.vnet.ibm.com>
To:     Arnaldo Carvalho de Melo <acme@...nel.org>
Cc:     Ian Rogers <irogers@...gle.com>,
        Peter Zijlstra <peterz@...radead.org>,
        Ingo Molnar <mingo@...hat.com>,
        Mark Rutland <mark.rutland@....com>,
        Alexander Shishkin <alexander.shishkin@...ux.intel.com>,
        Jiri Olsa <jolsa@...nel.org>,
        Namhyung Kim <namhyung@...nel.org>,
        Nick Desaulniers <ndesaulniers@...gle.com>,
        LKML <linux-kernel@...r.kernel.org>,
        linux-perf-users@...r.kernel.org, bpf@...r.kernel.org,
        Stephane Eranian <eranian@...gle.com>
Subject: Re: [PATCH 2/3] perf build: Use libtraceevent from the system



> On 07-Dec-2022, at 10:57 PM, Arnaldo Carvalho de Melo <acme@...nel.org> wrote:
> 
> Em Wed, Dec 07, 2022 at 07:08:28PM +0530, Athira Rajeev escreveu:
>> 
>> 
>>> On 06-Dec-2022, at 11:01 PM, Arnaldo Carvalho de Melo <acme@...nel.org> wrote:
>>> 
>>> Em Tue, Dec 06, 2022 at 02:13:48PM -0300, Arnaldo Carvalho de Melo escreveu:
>>>> Em Tue, Dec 06, 2022 at 02:07:32PM -0300, Arnaldo Carvalho de Melo escreveu:
>>>>> Em Tue, Dec 06, 2022 at 02:01:43PM -0300, Arnaldo Carvalho de Melo escreveu:
>>>>>> Em Tue, Dec 06, 2022 at 01:41:41PM -0300, Arnaldo Carvalho de Melo escreveu:
>>>>>>> Now to look at the BUILD_BPF_SKEL=1 kaboom:
>>>>>>> 
>>>>>>> [acme@...co perf]$ alias m
>>>>>>> alias m='rm -rf ~/libexec/perf-core/ ; make -k NO_LIBTRACEEVENT=1 BUILD_BPF_SKEL=1 O=/tmp/build/perf -C tools/perf install-bin && perf test python'
>>>>>>> [acme@...co perf]$ m
>>>>>>> make: Entering directory '/home/acme/git/perf/tools/perf'
>>>>>>> BUILD:   Doing 'make -j8' parallel build
>>>>>>> <SNIP>
>>>>>>> /usr/bin/ld: /tmp/build/perf/perf-in.o: in function `add_work':
>>>>>>> /home/acme/git/perf/tools/perf/util/bpf_kwork.c:285: undefined reference to `perf_kwork_add_work'
>>>>>>> /usr/bin/ld: /tmp/build/perf/perf-in.o: in function `lock_contention_read':
>>>>> 
>>>>> For that bpf_kwork.c see below. Now to see why the python binding is not
>>>>> building, I guess is unrelated and you have some other outstanding
>>>>> patch?
>>>> 
>>>> Its related:
>>>> 
>>>> [acme@...co perf]$ perf test -v python
>>>> Couldn't bump rlimit(MEMLOCK), failures may take place when creating BPF maps, etc
>>>> 14: 'import perf' in python                                         :
>>>> --- start ---
>>>> test child forked, pid 1669872
>>>> python usage test: "echo "import sys ; sys.path.append('/tmp/build/perf/python'); import perf" | '/usr/bin/python3' "
>>>> Traceback (most recent call last):
>>>> File "<stdin>", line 1, in <module>
>>>> ImportError: /tmp/build/perf/python/perf.cpython-310-x86_64-linux-gnu.so: undefined symbol: tep_unload_plugins
>>>> test child finished with -1
>>>> ---- end ----
>>>> 'import perf' in python: FAILED!
>>>> [acme@...co perf]$
>>>> 
>>>> Now checking why NO_LIBTRACEEVENT=1 fails with this...
>>>> 
>>>> [acme@...co perf]$ find tools/perf/ -name "*.c" | xargs grep tep_unload_plugins
>>>> tools/perf/util/trace-event.c:	tep_unload_plugins(t->plugin_list, t->pevent);
>>>> [acme@...co perf]$
>>>> 
>>>> [acme@...co perf]$ grep trace-event tools/perf/util/python-ext-sources
>>>> util/trace-event.c
>>>> [acme@...co perf]$
>>>> 
>>>> Trying to fix...
>>> 
>>> I'm missing some detail, this isn't working, util/trace-event.c is still
>>> being built and linked.
>> 
>> Hi,
>> 
>> Observed similar issue with “builtin-trace.c”
>> 
>> In system without libtraceevent-devel, I could still see builtin-trace trying to get
>> compiled and hitting error. In my understanding, CONFIG_TRACE will be
>> disabled when libtraceevent is not present and hence builtin-trace should be disabled
>> which I am not seeing.
>> 
>> # rpm -qa|grep libtraceevent
>> libtraceevent-1.2.1-1.el8.ppc64le
>> 
>> # grep -i traceevent FEATURE-DUMP 
>> feature-libtraceevent=0
>> 
>> Snippet from make logs:
>> 
>> builtin-trace.c:266:50: error: dereferencing pointer to incomplete type 'struct tep_format_field'
>>  return __tp_field__init_uint(field, format_field->size, format_field->offset, needs_swap);
>>                                                  ^~
>> builtin-trace.c: In function 'evsel__syscall_arg_fmt':
>> builtin-trace.c:361:25: error: 'struct evsel' has no member named 'tp_format'
>>   et->fmt = calloc(evsel->tp_format->format.nr_fields, sizeof(struct syscall_arg_fmt));
>> 
> 
> Can you try again? tmp.perf/core? That "tmp." part means its a force
> pushed branch, so I just force pushed with some arch specific fixes, now
> I'm down to (removing the successful builds and unrelated failures, now
> related to libbpf's F_DUPFD_CLOEXEC kaboom):

Ok Arnaldo, Sure, I will check with updated branch


> 
>   5     7.38 fedora:34                     : FAIL gcc version 11.3.1 20220421 (Red Hat 11.3.1-2) (GCC)
>    /git/perf-6.1.0-rc6/tools/perf/util/evsel.c: In function ‘evsel__rawptr’:
>    /git/perf-6.1.0-rc6/tools/perf/util/evsel.c:2787:36: error: ‘TEP_FIELD_IS_RELATIVE’ undeclared (first use in this function); did you mean ‘TEP_FIELD_IS_FLAG’?
>     2787 |                 if (field->flags & TEP_FIELD_IS_RELATIVE)
>          |                                    ^~~~~~~~~~~~~~~~~~~~~
>          |                                    TEP_FIELD_IS_FLAG

I observed same issue as updated here: 
https://lore.kernel.org/lkml/10476A85-3F75-4C91-AB5B-E5B136F31297@linux.vnet.ibm.com/

Looks like TEP_FIELD_IS_RELATIVE is not defined in header file of the system installed version.
whereas it is there in header file in tools/lib/traceevent

# grep TEP_FIELD_IS_RELATIVE /usr/include/traceevent/event-parse.h
# grep TEP_FIELD_IS_RELATIVE ../lib/traceevent/event-parse.h
	TEP_FIELD_IS_RELATIVE	= 256,


Thanks
Athira
>    /git/perf-6.1.0-rc6/tools/perf/util/evsel.c:2787:36: note: each undeclared identifier is reported only once for each function it appears in
>    error: command '/usr/bin/gcc' failed with exit code 1
> 
>  7     7.18 fedora:35                     : FAIL gcc version 11.3.1 20220421 (Red Hat 11.3.1-2) (GCC)
>    /git/perf-6.1.0-rc6/tools/perf/util/evsel.c: In function ‘evsel__rawptr’:
>    /git/perf-6.1.0-rc6/tools/perf/util/evsel.c:2787:36: error: ‘TEP_FIELD_IS_RELATIVE’ undeclared (first use in this function); did you mean ‘TEP_FIELD_IS_FLAG’?
>     2787 |                 if (field->flags & TEP_FIELD_IS_RELATIVE)
>          |                                    ^~~~~~~~~~~~~~~~~~~~~
>          |                                    TEP_FIELD_IS_FLAG
>    /git/perf-6.1.0-rc6/tools/perf/util/evsel.c:2787:36: note: each undeclared identifier is reported only once for each function it appears in
>    error: command '/usr/bin/gcc' failed with exit code 1
> 
>  14     8.49 ubuntu:18.04-x-s390           : FAIL gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)
>    tests/parse-events.c:1893:12: error: 'test__checkevent_tracepoint' undeclared here (not in a function); did you mean 'test__checkevent_breakpoint'?
>       .check = test__checkevent_tracepoint,
>                ^~~~~~~~~~~~~~~~~~~~~~~~~~~
>                test__checkevent_breakpoint
>    /git/perf-6.1.0-rc6/tools/build/Makefile.build:139: recipe for target 'tests' failed
>    make[3]: *** [tests] Error 2
>  16     6.38 ubuntu:22.04                  : FAIL gcc version 11.3.0 (Ubuntu 11.3.0-1ubuntu1~22.04)
>    /git/perf-6.1.0-rc6/tools/perf/util/evsel.c: In function ‘evsel__rawptr’:
>    /git/perf-6.1.0-rc6/tools/perf/util/evsel.c:2787:36: error: ‘TEP_FIELD_IS_RELATIVE’ undeclared (first use in this function); did you mean ‘TEP_FIELD_IS_FLAG’?
>     2787 |                 if (field->flags & TEP_FIELD_IS_RELATIVE)
>          |                                    ^~~~~~~~~~~~~~~~~~~~~
>          |                                    TEP_FIELD_IS_FLAG
>    /git/perf-6.1.0-rc6/tools/perf/util/evsel.c:2787:36: note: each undeclared identifier is reported only once for each function it appears in
>    error: command '/usr/bin/gcc' failed with exit code 1
> 
> 
> 
>> Thanks
>> Athira
>> 
>>> 
>>> The python binding should be usable without tracepoints, in fact its
>>> first usage was just to have access to the perf metaevents, see 
>>> tools/perf/python/twatch.py.
>>> 
>>> diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf
>>> index f0e4daeef8120853..5bd67d54d036f281 100644
>>> --- a/tools/perf/Makefile.perf
>>> +++ b/tools/perf/Makefile.perf
>>> @@ -348,6 +348,10 @@ export PYTHON_EXTBUILD_LIB PYTHON_EXTBUILD_TMP
>>> python-clean := $(call QUIET_CLEAN, python) $(RM) -r $(PYTHON_EXTBUILD) $(OUTPUT)python/perf*.so
>>> 
>>> PYTHON_EXT_SRCS := $(shell grep -v ^\# util/python-ext-sources)
>>> +ifneq ($(CONFIG_TRACEEVENT),y)
>>> +  PYTHON_EXT_SRCS := $(call filter-out,$(PYTHON_EXT_SRCS),util/trace-event.c)
>>> +endif
>>> +
>>> PYTHON_EXT_DEPS := util/python-ext-sources util/setup.py $(LIBAPI)
>>> 
>>> SCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH))
>>> diff --git a/tools/perf/util/python.c b/tools/perf/util/python.c
>>> index 728fe2f51759eb0d..72088aec2857b316 100644
>>> --- a/tools/perf/util/python.c
>>> +++ b/tools/perf/util/python.c
>>> @@ -1330,6 +1330,9 @@ static struct {
>>> static PyObject *pyrf__tracepoint(struct pyrf_evsel *pevsel,
>>> 				  PyObject *args, PyObject *kwargs)
>>> {
>>> +#ifndef HAVE_LIBTRACEEVENT
>>> +	return NULL;
>>> +#else
>>> 	struct tep_event *tp_format;
>>> 	static char *kwlist[] = { "sys", "name", NULL };
>>> 	char *sys  = NULL;
>>> @@ -1344,6 +1347,7 @@ static PyObject *pyrf__tracepoint(struct pyrf_evsel *pevsel,
>>> 		return _PyLong_FromLong(-1);
>>> 
>>> 	return _PyLong_FromLong(tp_format->id);
>>> +#endif // HAVE_LIBTRACEEVENT
>>> }
>>> 
>>> static PyMethodDef perf__methods[] = {
> 
> -- 
> 
> - Arnaldo

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ